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
risposta
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
- ...
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++.
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
@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
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
È possibile dare un'occhiata a Choco, un framework per la programmazione dei vincoli implementato in java.
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.
Hai guardato Apache Commons Math? Mi sembra di ricordare alcune utilità di ottimizzazione non lineari ... –
potresti fornire un esempio del tipo di problema che stai cercando di risolvere? –
Il problema che vuoi risolvere ha variabili discrete o variabili continue? – willem