5

Sto leggendo cose contraddittorie nella documentazione.OptaPlanner supporta ottimizzazioni e vincoli su variabili continue?

Da un lato, questo passaggio sembra indicare che le variabili di pianificazione continue sono possibili:

un campo di valori di pianificazione è l'insieme di possibili valori di pianificazione per una variabile pianificazione. Questo set può essere discreto (ad esempio riga 1, 2, 3 o 4) o continuo (ad esempio qualsiasi doppio tra 0,0 e 1,0).

D'altra parte, quando si definisce una variabile di pianificazione, è necessario specificare un'annotazione ValueRangeProvider su un campo da utilizzare per il valore impostato:

L'implementazione soluzione è il metodo che restituisce una Collection. Qualsiasi valore da quella raccolta è un possibile valore di pianificazione per questa variabile di pianificazione .

Entrambi questi frammenti sono nella stessa sezione della documentazione (http://docs.jboss.org/drools/release/latest/optaplanner-docs/html_single/#d0e2518)

Quindi, qual è? Posso utilizzare un intero double come variabile di pianificazione o devo limitare il suo intervallo ai valori in uno specifico Collection?

Considerando gli algoritmi attuali forniti, non vedo nessuno che sia effettivamente adatto all'ottimizzazione delle variabili continue, quindi dubito che sia possibile, ma sarebbe bello averlo chiarito e reso esplicito.

risposta

4

Stiamo lavorando a sostenere pienamente le variabili continue. Ma al momento (in 6.0.0.CR2) non è ancora supportato in maniera decente. intervalli

valori possono infatti essere intervalli continue, ma l'impianto idraulico li utilizzare effettivamente non c'è ancora. Di recente abbiamo compiuto buoni progressi, vedi https://issues.jboss.org/browse/PLANNER-160.

Ecco come funziona: You 'll essere in grado di utilizzare un'annotazione @ValueRangeProvider su un metodo che restituisce un ValueRange (invece di un Collection) troppo.

Un ValueRange sarà un interfaccia supporta la selezione di un valore casuale, ottenendo una dimensione, ... Out-of-the-box sosterremo IntValueRange, DoubleValueRange, BigDecimalValueRange, ... (dettaglio di implementazione: noi' ll retro-adattarsi a questi metodi di restituzione della raccolta in un CollectionValueRange.)

Quindi le implementazioni di ValueSelector lo utilizzeranno direttamente.

Per quanto riguarda l'idoneità per ottimizzare le variabili continue:

  • JIT selezione casuale sarà velocissimo ed essere molto la memoria-efficiente.
  • Se si dispone di un problema NP-completo/NP-difficile, allora OptaPlanner sarà un'ottima soluzione.Se hai solo variabili continue (e non una singola variabile discreta), allora è improbabile che il tuo problema sia NP-completo (a meno che i tuoi vincoli non lo dimostrino) e in questo caso stai meglio con un algoritmo polinomiale personalizzato, fatto a mano comunque (perché non è NP-completo, quindi c'è una soluzione "facile").