22

Sono novizio per la programmazione lineare intera. Ho intenzione di utilizzare un solutore di programmazione lineare intero per risolvere il mio problema di ottimizzazione combinatoria. Ho più familiarità con C++/programmazione orientata agli oggetti su un IDE. Ora sto usando NetBeans con Cygwin per scrivere le mie applicazioni la maggior parte del tempo.Come scegliere un risolutore di programmazione lineare intero?

Posso chiedere se è disponibile un solver ILP di facile utilizzo? Oppure dipende dal problema che voglio risolvere? Sto provando a fare un po 'di ottimizzazione della mappatura delle risorse. Per favore fatemi sapere se sono richieste ulteriori informazioni.

Grazie mille, Cassie.

risposta

1

Linear Programming da Wikipedia copre alcuni algoritmi diversi che è possibile eseguire un po 'di ricerca per vedere quale può funzionare meglio per voi. Questo aiuta o volevi qualcosa di più specifico?

4

Per problemi di grandi dimensioni, è possibile consultare AMPL, che è un interprete di ottimizzazione con molti backend solvers disponibili. Funziona come a separate process; C++ verrebbe utilizzato per scrivere i dati di input.

Quindi è possibile provare vari solutori di ultima generazione.

8

Se ciò che si desidera è una programmazione di interi misti lineare, quindi puntare a Coin-OR (e in particolare al modulo CBC). È software libero (come discorso) Puoi usarlo con un linguaggio specifico o usare C++.

Utilizzare C++ se i dati richiedono un sacco di pre-elaborazione o se si desidera mettere le mani nel risolutore (scegliendo i punti di rotazione, generazione di colonne, aggiunta di tagli e così via ...).

Utilizzare il linguaggio integrato se si desidera utilizzare il risolutore come una scatola nera (si è interessati al risultato e il problema è abbastanza semplice o classico da risolvere senza apportare modifiche).

Ma nei tag si menzionano algoritmi genetici e algoritmi di grafici. Forse si dovrebbe iniziare meglio defing tuo problema ... Per i grafici mi piace un sacco Boost :: Graph

+0

Grazie mille. Il mio problema è fondamentalmente la mappatura dei lavori alle macchine su un grafico di attività per la pianificazione. Quindi ho un grafico delle attività. Ogni nodo rappresenta un lavoro che deve essere gestito su una macchina. La diversa mappatura dei lavori alle macchine ha come risultato tempi di programmazione totali diversi sul percorso critico. Il mio obiettivo è trovare il tempo minimo di programmazione per l'assegnazione di alcuni lavori alla macchina. Quindi qualcuno conosce un solutore di facile utilizzo che non richiede un forte backgound di programmazione per me da usare? Grazie mille.Cassie – Cassie

+2

Bene, questo tipo di pianificazione è un dominio di ricerca completo a sé stante. Alcuni problemi possono essere risolti da un algoritmo di percorso più breve (se non si dispone di vincoli sulle attività simultanee). Se le vostre macchine sono prempible, allora ci sono semplici algoritmi polinomiali. Altrimenti, è probabile che tu abbia un problema difficile. Prova a utilizzare CBC come blackbox (ma dovrai imparare come modellare tali problemi in un modello lineare) o provare a codificare il tuo codice di diramazione :) –

8

ho usato lp_solve (http://lpsolve.sourceforge.net/5.5/) in un paio di occasioni con successo. È maturo, ricco di funzionalità ed estremamente ben documentato con molti buoni consigli se le tue capacità di programmazione lineare sono arrugginite. La programmazione lineare intera non è solo un'aggiunta, ma è fortemente enfatizzata con questo pacchetto.

Appena notato che dici di essere un "principiante" in questo. Bene, allora consiglio vivamente questo pacchetto poiché la documentazione è piena di esempi e tutorial gentili. Altri pacchetti che ho provato tendono ad assumere molto all'utente.

2

Cerca su GLPK. Viene fornito con alcuni esempi e funziona con un sottoinsieme di AMPL, anche se IMHO funziona meglio quando ci si attiene a C/C++ per l'impostazione del modello. Affronta anche modelli piuttosto grandi.