Frage

Ich verwende LPSolve IDE, um ein LP-Problem zu lösen.Ich muss das Modell anhand von etwa 10 oder 20 Sätzen unterschiedlicher Parameter testen und vergleichen.

Gibt es eine Möglichkeit für mich, das allgemeine Modell beizubehalten, aber die Konstanten nach meinen Wünschen anzugeben?Wenn ich beispielsweise die folgende Einschränkung habe:

A >= [c]*B

Ich möchte testen, wie sich das Modell wann verhält [c] = 10, [c] = 20, und so weiter.Im Moment bereite ich einfach verschiedene .lp-Dateien über Suchen und Ersetzen vor, aber:

a) Es scheint nicht sehr effizient zu sein

b) Irgendwann muss ich die Einschränkung der Form berücksichtigen A >= B/[c] // =(1/[c]*B).Es scheint jedoch, dass LPSolve den Divisionsoperator nicht erkennt.Spezifiziert 1/[c] direkt jedes Mal die einzige Option?

War es hilfreich?

Lösung

Es ist nicht ganz klar, welches Format Sie mit lp_solve verwenden.Mit dem cplex lp-Format zum Beispiel gibt es keinen besseren Weg:Sie können für den Koeffizienten keine Division (oder auch keine Multiplikation) verwenden, und es gibt keine Funktion zum „Einschließen“ einer anderen Datei oder zum Einführen symbolischer Namen für einen Parameter.Es ist eine sehr einfache Sprache und nicht für komplexe Aufgaben geeignet.

Es gibt mehrere Lösungen für Ihr Problem.Es hängt davon ab, ob Sie an etwas interessiert sind, das sich schnell umsetzen lässt, oder ob es „sauber“, wiederverwendbar und mit kurzer Laufzeit ist (das ist natürlich ein Kompromiss).

  1. Sie haben die Möglichkeit, Ihre LP-Dateien aus einer anderen Sprache zu generieren, z.B.Python, Bash usw.Dies ist eine „schnelle und schmutzige“ Lösung:Zur Laufzeit sehr langsam, aber wahrscheinlich schneller zu implementieren.

  2. Wie jeder mir bekannte LP-Solver verfügt auch lp_solve über mehrere Modellierungsschnittstellen:Sie können zum Beispiel die verwenden GNU MP-Format statt der jetzigen.Es erkennt Multiplikationen, Divisionen, Bedingungen usw.(Alles, was Sie suchen, finden Sie im Abschnitt 3.1 „Numerische Ausdrücke“)

  3. Schließlich haben Sie die Möglichkeit, die lp_solve-Schnittstelle direkt aus einer anderen Programmiersprache (z. B.C) Dies ist die flexibelste Option, erfordert jedoch möglicherweise etwas mehr Arbeit.

Siehe die lp_solve-Dokumentation Weitere Informationen zu den unterstützten Eingabeformaten und der API-Referenz finden Sie hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top