Lineare Optimierung in Python: SciPy für lineare Programmierung

In diesem Beitrag zeige ich wie SciPy.optimize zur Modellierung und Lösung linearer Probleme genutzt werden kann. Optimiert werden soll nachstehendes Problem:

Die linprog-Funktion im SciPy-Modul kann zur Lösung dieses Problem verwendet werden. Hierfür notiere ich das Problem zunächst in Matrix-Vektor Notation. Desweiteren wandle ich das Problem in ein Minimierungsproblem um (das ist die Problemform von der die linprog-Funktion ausgeht):

Jetzt kann ich das Problem in Python lösen:

# Kostenvektor als Liste erstellen
c = [-2,-3]

# Koeffizientenmatrix der Nebenbedingungen definieren
A_ub = [[1,1],
        [2,1]]

# Grenzwerte der Optimierung in Listenform definieren
b_ub =[10,15]

# Grenzwerte der Optimierungsvariablen in Tuples notieren
x1_bounds = (0,None)
x2_bounds = (0,None)

# Problem mit SciPy.optimize.linprog modellieren und lösen
from scipy.optimize import linprog
model_linear = linprog(c=c,
                      A_ub=A_ub,
                      b_ub = b_ub,
                      bounds = [x1_bounds,x2_bounds])

# Resultat ausgeben
print(str(model_linear))
     fun: -30.0
 message: 'Optimization terminated successfully.'
     nit: 1
   slack: array([ 0.,  5.])
  status: 0
 success: True
       x: array([  0.,  10.])

Da die linprog-Funktion von einem Minimierungsproblem ausgeht, wir aber eigentlich ein Maximierungsproblem gelöst haben, ist der Optimalwert 30, und nicht -30.

You May Also Like

Leave a Reply

Leave a Reply

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.