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.
Wirtschaftsingenieur mit Interesse an Optimierung, Simulation und mathematischer Modellierung in R, SQL, VBA und Python
Leave a Reply