Gibt es einen praktischen Löser für die lineare Programmierung mit vielen Summierungen?

  • Wie kann ich das folgende Problem der linearen Programmierung auf einfachste Weise lösen?

    Wie können die Summationsterme dort modelliert werden?

    Gibt es einen praktischen Löser für die lineare Programmierung mit vielen Summierungen?

    Ab Seite 187 von Mathematische Programmieransätze von Charu Chandra und Janis Grabis.

    04 July 2012
    prakash
4 answers
  • Ich stimme der Antwort von Aron im Allgemeinen zu.

    Abhängig von der verwendeten Modellierungssoftware kann die Matrixschreibweise $ Ax = b $ mehr oder weniger bequem als Sigma sein Notation. Zum Beispiel mit den C ++ - Schnittstellen zu CPLEX, CLP, CBC und dem Open Solver Interface (OSI) , die lineare Algebra-Notation ist definitiv einfacher zu handhaben, da die Schnittstellen Sie spezifisch fragen Um das Problem in (mehr oder weniger) in der Form von $ Ax = b $ einzurichten (diese Schnittstellen sind etwas flexibler).

    Einige Software-Pakete behandeln jedoch die Definition einer linearen Ebene Programm als deklarativer Prozess. Beispiele sind GAMS und die Python-Pakete PuLP und Coopr . Diese Pakete konzentrieren sich darauf, den Prozess der LP-Definition viel mehr wie die Summennotation (oder Sigma-Notation) aussehen zu lassen, die bei vielen Problemen verwendet wird. Es ist natürlich möglich, ein in einem dieser Pakete codiertes Problem wie $ Axe = b $ zu erzwingen, aber es ist schön, nicht auf diese Notation zurückgreifen zu müssen, wenn Sie es als umständlich empfinden. Darüber hinaus sind diese Pakete nicht als eigenständige Solver eingerichtet und haben daher viel eher Schnittstellen zu mehreren Solvern, wodurch die Flexibilität bei der Implementierung (da die Löser unterschiedliche Geschwindigkeit haben) und der Verteilung erhöht wird (nicht jeder hat Lizenzen für Closed-Source-Solver

    Aus diesen Gründen empfehle ich in abnehmender Reihenfolge:

    • PuLP weil es einfach zu verwenden, leichtgewichtig, Open Source und in Python
    • Coopr ist, weil es Open Source und in Python ist (aber flexibler als PuLP)
    • OSI, weil es Open Source ist und eine Schnittstelle für mehrere (gemischte ganzzahlige) Löser für lineare Programmierung ist, aber es erfordert y
    03 July 2012
    Geoff Oxberry
  • Ich würde empfehlen, JuMP zu verwenden. Sie können hier sehen, dass Ausdrücke und Einschränkungen direkt in Form von Summierungen geschrieben werden können . Die Zielfunktion kann in Form von Summen unter Verwendung von Standard-Julia geschrieben werden (d. H. Die sum -Funktion für Arrays und solche Dinge verwenden, die sinnvoll sind und leicht lesbar sind).

    Aber es ist noch besser als die Tatsache, dass Sie das Ziel und die Nebenbedingungen leicht direkt in der sum -Notation schreiben können, aber dann können Sie dieses Modell verwenden, um die Gleichung unter Verwendung einer Menge anderer Pakete, kommerzieller Standard- und Open Source-Solver , alles direkt aus JuMP heraus. In dieser Liste finden Sie eine Liste der am häufigsten verwendeten LP-Solver. Sie können sie alle auf einmal testen, ohne Ihre Syntax mit JuMP zu ändern.

    26 February 2017
    Chris Rackauckas
  • Das Problem, das Sie haben, ist eher ein ODER-Problem. Wie ich sehe, haben Sie eine Zielfunktion und einige Einschränkungen. IBM ILOG CPLEX Optimization Studio, auch bekannt als CPLEX, ist eine professionelle Software zur Lösung dieser Fragen. SAS führt auch Optimierungen und Simulationen durch. Ich hoffe, diese Antwort hilft.

    01 July 2012
  • Bitte werfen Sie einen Blick auf lpsolve :

    lp_solve ist ein freier (ganzzahliger) Programmierlöser (siehe LGPL für die GNU Lesser General Public License), basierend auf der überarbeiteten Simplex-Methode und der Branch-and-Bound-Methode für Ganzzahlen. Es enthält vollständige Quellen, Beispiele und Handbücher. lp_solve löst reine lineare, (gemischte) Ganzzahl- / Binär-, halbkontinuierliche und SOS-Modelle (SOS-Modelle).

    blockquote>
    23 July 2012
    prakash