Dove specifico che alcune entità di pianificazione sono immutabili?
-
13-11-2019 - |
Domanda
Sto realizzando un gioco Sudoku (2X2) e ne ho bisogno completare un puzzle.Ciò significa che alcune cifre sono immutabili (non possono essere spostate fuori posto.
In una partita 2X2 ce ne sono 16 Digit
S.I fatti problematici sono row
S, column
sabbia block
s (capito?).IL row
è l'unica variabile di pianificazione.
ho specificato boolean fixed
come attributo per Digit
.Ma (come da guida per l'utente), non ho trovato un posto dove implementarlo.
Quali sono le modalità per rendere effettivamente immutabili alcune entità di pianificazione?
Trovo questi metodi:
- Implementare a
moveFactory
questo cambia ilrow
solo se è immutabile.Questo metodo è non documentato. - Se la
row
non è uguale ad afixed_row
, rompere un vincolo duro. - Utilizzo
@ValueRangeFromPlanningProperty
.Lasciamo che le entità immutabili abbiano avalue_range
di un singolo elemento e le entità mutabili hanno un elenco che esclude le righe fisse.Ciò sembra insostenibile per qualcosa di più grande di un progetto Sudoku, giusto?E ci sono (mie?) presunte insidie che fanno deragliare il risolutore?
Domanda in più:il metodo n. 3 è quello consigliato per qualcosa come un problema di orario (assegnare la materia dell'insegnante a un periodo possibile)?
Soluzione
Opzione 4:Le cifre fisse sono fatti problematici:istanze di una classe che non ha un'annotazione @PlanningEntity.Le cifre non fisse sono entità di pianificazione:istanze di una classe che ha un @PlanningEntity.
Se desideri riutilizzare la stessa classe per entrambi a fini di progettazione:
- Una MoveFactory personalizzata sarebbe la soluzione.La scrittura di una move factory personalizzata è documentata:è solo questione di aggiungere un'istruzione if per escludere le mosse che modificano una cifra fissa.
- In tal caso non si tratta di un vincolo rigido integrato ma di un vincolo rigido normale, non lo consiglierei per questo caso d'uso.Consulta le informazioni manuali sui "vincoli rigidi incorporati"
- Eccessivo, ma funzionerebbe :)
Opzione 5: https://issues.jboss.org/browse/JBRULES-3359