2017-04-21 3 views

Antwort

0

Der Vorteil der Verwendung von Pyomo ist, dass es sich um eine Modellierungssprache handelt, die unabhängig vom zugrunde liegenden Solver ist, der zur Lösung des Problems verwendet wird. Zum Beispiel können Sie Ihr Modell schreiben und dann mit glpk lösen. Wenn Sie eine Befehlszeilenoption ändern, können Sie das gleiche Modell mit CPLEX, Gurobi usw. lösen. Es bietet viele Funktionen, z. B. die Unterstützung verteilter Optimierung, und Sie können Ihren eigenen benutzerdefinierten Solver verwenden, wenn Sie möchten (siehe Dokumentation).

Die CPLEX Python API ist am anderen Ende des Spektrums. Es ist keine Modellierungssprache. Es ist eine relativ leichte Schicht, die sich um die zugrunde liegende CPLEX Callable Library (C API) wickelt. Variablen, Constraints usw. werden nach Index oder Name bezeichnet. Es ermöglicht Ihnen, fast alles zu tun, was in der Callable Library möglich ist. In diesem Sinne erhalten Sie den meisten Zugriff auf die CPLEX-Funktionalität (sogar erweiterte Funktionen wie Callbacks).

Eine Option, die irgendwo in der Mitte liegt, ist DOCplex. DOCplex ist eine Open-Source-Modellierungssprache, die von IBM bereitgestellt wird. Sie ermöglicht die Lösung in der Cloud oder lokal. Es unterstützt CPLEX für die mathematische Programmierung, aber auch CP Optimizer für die Constraint-Programmierung.

+0

Danke rkersh! Wissen Sie, wie pyomo im Hinblick auf den Zugriff auf CPLEX-Funktionen mit gams verglichen wird? Zum Beispiel können Sie unter gams den Algorithmus für "Brach and Bound" jedes Mal stoppen, wenn eine neue etablierte Lösung gefunden wird. Kann dies auch unter pyomo gemacht werden? – Salva

+0

Ich bezweifle das. [Hier ist ein Hinweis] (https://groups.google.com/forum/#!topic/pyomo-forum/lJTUjlAjw3s), obwohl es sich um den anderen großen kommerziellen Solver handelt. Dies ist auch etwas, was in Optimierungssprachen auf hoher Ebene, insbesondere Open-Source-Sprachen, nicht üblich ist. Der einzige, den ich kenne, ist [JuMP] (https://jump.readthedocs.io/en/latest/). Aber das ist natürlich keine Python. – sascha