2012-05-16 11 views
9

Sto cercando un open source implementazione di un metodo che esegue l'ottimizzazione vincolata per la funzione multivariata non lineare in Java.Ottimizzazione vincolata per funzione multivariata non lineare in Java

+0

Hai guardato Apache Commons Math? Mi sembra di ricordare alcune utilità di ottimizzazione non lineari ... –

+1

potresti fornire un esempio del tipo di problema che stai cercando di risolvere? –

+0

Il problema che vuoi risolvere ha variabili discrete o variabili continue? – willem

risposta

3

Ci sono diversi Java implementazioni open source che possono farlo, come ad esempio:

  • OptaPlanner (licenza Apache, 100% Java, un sacco di esempi e documentazione)
  • Jacop
  • choco
  • ...
5

IPOPT è il risolutore più affidabile che conosca.

Ha un Java interface anche se non ho idea di quanto sia buono, io uso solo l'API C++.

+0

La mia esperienza con IPOPT è che è il risolutore open source più performante che ho usato per problemi convessi di grandi dimensioni e spargoli. Sfortunatamente, la libreria non è thread-safe ed è soggetta a segfault o peggio, corrompe la memoria e fa sì che la JVM seguster in un secondo momento se fai qualcosa di leggermente sbagliato, il che è quasi impossibile eseguire il debug da Java. Alla fine ho deciso che era meglio isolare qualsiasi codice usando IPOPT in un processo separato, scritto in C++. – Owen

+0

@Owen Interessante. Ho usato l'API Java molto ampiamente da allora, e ha funzionato in modo affidabile; nessun segfault, nessuna corruzione della memoria, nessuna perdita di memoria. Tuttavia, sono d'accordo: se è possibile per te, basta metterlo in un processo separato ed evitare del tutto le difficoltà di interfaccia. – Ali

+0

Potrebbe avere ragione. Ho finito per rintracciare la mia corruzione della memoria sul fatto che il finalizzatore di 'Ipopt' veniva chiamato su un thread diverso (come di solito sono i finalizzatori). Quindi suppongo che tutto ciò possa tornare al fatto che Ipopt non è thread-safe, [che è documentato] (https://projects.coin-or.org/Ipopt/ticket/167). – Owen

0

È possibile dare un'occhiata a Choco, un framework per la programmazione dei vincoli implementato in java.

2

Recentemente ho eseguito il porting dell'ottimizzatore senza COBYLA2 di Michael Powells per le funzioni oggettive non lineari e i vincoli su Java. Troverai il codice sorgente here.

Problemi correlati