Freie Software lp-lösen, die lineare Programmierprobleme löst. Die Prozedur zum Ausführen auf dem Mac-Terminal und die Prozedur zum Aufrufen von Python waren nirgendwo organisiert, daher werde ich darauf hinweisen. Da ich nach der Installation nicht wusste, wie ich es verwenden soll, werde ich am Ende den Python-Code als einfaches Beispiel schreiben.
Mac OS X El Capitan 10.11.6 Python 2.7.12
$ brew tap homebrew/science
$ brew install lp_solve
Laden Sie zunächst die neueste Version der Datei von https://sourceforge.net/projects/lpsolve/files/lpsolve/ herunter. Die folgenden zwei Dateien sind erforderlich. (Spätestens ab dem 10. Oktober 2016: 5.5.2.5)
lp_solve_5.5.2.5_source.tar.gz
lp_solve_5.5.2.5_Python_source.tar.gz
Entpacken Sie diese ($ tar xfvz) und kopieren Sie sie unter / extra in lp_solve_5.5.2.5_Python_source.tar.gz in /lp_solve_5.5 in lp_solve_5.5.2.5_source.tar.gz.
Wenn die Verzeichnishierarchie so aussieht ↓ lp_solve_5.5/ ├ lp_solve ├ lpsolve55 ├ extra ├ : └ demo
In lp_solve / und lpsolve55 /,
$ sh ccc.osx
Wird besorgt. Zu diesem Zeitpunkt tritt je nach Umgebung eine große Anzahl von Fehlern auf, die erforderlichen Dateien werden jedoch generiert. Wenn Sie lp_solve / → lpsolve55 / und sh ccc.osx ausführen, sollten Sie sehen, dass lpsolve55 / bin generiert wird. Kopieren Sie liblpsolve55.a und liblpsolve55.dylib in / lpsolve55 / bin / osx64 /, falls generiert, in / usr / loca / lib.
Führen Sie abschließend setpy.py in /lp_solve_5.5/extra/Python aus. Ändern Sie jedoch vorher den folgenden Teil in setpy.py.
setpy.py
:
:
windir = getenv('windir')
if windir == None:
WIN32 = 'NOWIN32'
LPSOLVE55 = '../../lpsolve55/bin/ux32' #→ lpsolve55/bin/Auf osx64 behoben
else:
WIN32 = 'WIN32'
LPSOLVE55 = '../../lpsolve55/bin/win32'
setup (name = "lpsolve55",
version = "5.5.0.9",
description = "Linear Program Solver, Interface to lpsolve",
author = "Peter Notebaert",
:
:
Nach dem Speichern befindet sich der Rest im Terminal
$ python setpy.py install
Dann ist die gesamte Installation abgeschlossen.
Wenn Sie hier den Fehler "Eine gefundene Datei "alloc.h" erhalten, schreiben Sie die angegebene Zeile (wahrscheinlich #include \ <malloc.h>) in #include \ <stdlib.h> um. Löschen Sie stdlib.h, wenn es bereits enthalten ist. (Referenz: malloc.h unter OS X)
Lassen Sie uns überprüfen, ob es normal mit Python funktioniert.
$python
Python 2.7.12 (default, Aug 3 2016, 23:22:34)
[GCC 4.2.1 Compatible Apple LLVM 7.3.0 (clang-703.0.31)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from lpsolve55 import *
>>> lpsolve()
lpsolve Python Interface version 5.5.0.9
using lpsolve version 5.5.2.5
Usage: ret = lpsolve('functionname', arg1, arg2, ...)
>>>
Wenn es so aussieht, ist es ein Erfolg.
Zum Beispiel, wenn Sie das folgende Problem lösen möchten
Zielfunktion
min -400x1 -300x2 + 100x3
Zwang
s.t. \qquad\qquad\qquad\qquad\qquad\\
60x1 +40x2 + 10x3 \le 3800\\
30x1 +20x2 -40 x3 \ge 1200\\
5 \ge x1 \ge -\infty \\
20 \ge x2, x3\\
int\ x1,x2,x3
Fügen Sie wie folgt Einschränkungsausdrücke hinzu.
from lpsolve55 import *
# 0,3 → Der Einschränkungsausdruck ist 0 Zeilen, die Variable ist 3. Machen Sie diese LP
lp = lpsolve('make_lp',0,3)
#Hinzufügung der Zielfunktion "min": -400x1 -300x2 +100x3」
lpsolve('set_obj_fn', lp, [-400, -300, 100] )
#Einschränkungsausdruck hinzugefügt "60x1+40x2 +10x3 =< 3800」, 「LE」 = 「<=」、 「GE」 = 「>=」、 「EQ」 = 「=」
lpsolve('add_constraint', lp, [60,40,10], LE, 3800)
# 30x1 +20x2 -40x3 => 1200
lpsolve('add_constraint', lp, [30,20,-40], GE, 1200)
#Untergrenzeneinstellung von Variablen,"Infinite"Express Unendlichkeit mit
lpsolve('set_lowbo',lp,1,-Infinite)
#Obergrenze Einstellung von Variablen, mehrere Einstellungen können gleichzeitig in der Liste eingestellt werden
lpsolve('set_upbo',lp,[5,20,20])
#Ganzzahlige Einschränkung, 0-1 Einschränkung ist"set_binary"
lpsolve('set_int'lp,[1,2,3])
# const.lp wird generiert und gibt die Formulierung aus
lpsolve('write_lp',lp,'const.lp')
#Das Problem lösen
lpsolve('solve',lp)
#Optimale Lösungsausgabe, Variablen zuweisbar. Typ ist Liste
print lpsolve('get_variables',lp)
Grob habe ich die Befehle angeordnet, von denen ich glaube, dass ich sie oft benutze. Weitere Befehle finden Sie in der lp_solve API-Referenz. Ich studiere auch.
~~ Was mich derzeit interessiert, ist, ob es eine Funktion gibt, mit der die Berechnung von lp_solve irgendwann gestoppt werden kann. Zum Beispiel suche ich nach etwas wie "Wenn es nicht in den 20ern endet, werde ich an diesem Punkt eine vorläufige Lösung ausgeben." ~~
(Ergänzung: 07.10.2016) Es gab.
lpsolve('set_timeout',lp,TIME) #-Auf 1 setzen. ZEIT für 1 Minute= 59
Es ist möglich mit.
Linearer Planlöser Installieren Sie den lpsolve-Treiber für Python lp_solve API reference INSTALL LPSOLVE FOR PYTHON
PuLP ist eine flexiblere mathematische Optimierungsbibliothek in Python. Diese Artikel von @SaitoTsutomu sind sehr hilfreich. Bitte sehen Sie zusammen. Mathematisches Modell von Anfang an Python in Optimierung Cheet Sheet für Mathematical Optimization Modeler (PuLP) (Python)