LPSOLVE - specificare coefficienti costanti
-
21-12-2019 - |
Domanda
Sto usando lpsolve IDE per risolvere un problema LP.Devo testare il modello contro circa 10 o 20 set di parametri diversi e confrontarli.
C'è un modo per me per mantenere il modello generale, ma specificare le costanti come desidero?Ad esempio, se ho il seguente vincolo:
A >= [c]*B
Voglio testare come si comporta il modello quando [c] = 10
, [c] = 20
e così via.Per ora, sto semplicemente preparando diversi file .lp tramite ricerca e sostituzione, ma:
a) Non sembra troppo efficiente
B) Ad un certo punto, ho bisogno di considerare il vincolo del modulo A >= B/[c] // =(1/[c]*B)
.Sembra, tuttavia, che LPSOLVE non riesce a ricogettare l'operatore di divisione.Specificare 1/[c]
direttamente ogni volta l'unica opzione?
Soluzione
Non è completamente chiaro quale formato usi con lp_solve. Con il formato Clex LP, ad esempio, non è possibile utilizzare il modo migliore: non è possibile utilizzare la divisione per il coefficiente (o anche la moltiplicazione per quella materia) e non vi è alcuna funzione "includere" un altro file o introdurre un nome simbolico per un parametro. È un linguaggio molto semplice, e non adatto a qualsiasi compito complesso.
Ci sono diverse soluzioni per il tuo problema; Dipende se sei interessato a qualcosa di veloce da implementare, o "pulire", riutilizzabile e con un breve periodo di runtime (ovviamente questo è un compromesso).
- .
-
Hai la possibilità di generare i tuoi file LP da un'altra lingua, ad es. Python, Bash, ecc. Questa è una soluzione "veloce e sporca": molto lenta in fase di esecuzione, ma probabilmente più veloce da implementare.
-
Come ogni solver LP lo so, LP_Solve viene fornito con diverse interfacce di modellazione: puoi usare il GNU MP Formato invece di quello corrente. Riconosce la moltiplicazione, le divisioni, i condizionali, ecc. (Tutto ciò che stai cercando, vedi la sezione 3.1 'Espressioni numeriche')
-
Infine, è possibile utilizzare direttamente l'interfaccia lp_solve da un altro linguaggio di programmazione (ad es. c) che sarà l'opzione più flessibile, ma potrebbe richiedere un po 'più di lavoro.
.Vedi il LP_Solve Documentazione per ulteriori dettagli sui formati di input supportati e il riferimento API. .