kanonische Form LP
max c^T*x
Ax ≤ b
x ≥ 0
x: Entscheidungsvariable
A: Koeffizientenmatrix
b: rechte Seite
c^T: Zielfunktionskoeffizient
-> jedes LP kann in diese Form gebracht werden
Gurobi Programm Grundstruktur
from gurobipy import *
def solve (...):
model = Model ( "Modellname" )
model.modelSense = GRB.MINIMIZE
# Variablen erzeugen :
xKaufen = {}
for speise in speisen :
xKaufen [ speise ] = model . addVar ( obj = kosten [ speise ] , name = ( ’ x_ ’ + speise ))
model.update()
model.addConstr(#nebenbedingungen)
model.optimize()
return modelGurobi Variable definieren
xKaufen [ speise ] = model.addVar ( obj = kosten [ speise ] , name = ( ’ x_ ’ + speise ))
lb: untere Schranke der Variable, Standard: 0.0
ub: obere Schranke der Variable, Standard: GRB.INFINITY
obj: Zielfunktionskoeffizient der Variable, Standard: 0.0
name: Name der Variable
Standardform LP
max c^T*x
Ax = b
x ≥ 0
x: Entscheidungsvariable
A: Koeffizientenmatrix
b: rechte Seite
c^T: Zielfunktionskoeffizient
Kann aus kanonischer Form durch Schlupfvariablen gewonnen werden.
Schlupfvariable
Wandelt eine Ungleichung in eine Gleichung um:
a+b≤c <=> a+b+s=c mit s≥0
Vorgehen Simpex Algorithmus
Was ist wenn im Simplexalgorithmus beim Ratiotest nur negative Ergebnisse rauskommen?
Unbeschränktes LP
entartete Ecke
die Basis wird durch zu viele Ecken überbestimmt
Wann ist die Basis eines Simplextableus nicht zulässig?
Big-M:
- alle Zielfunktionswerte negativ, aber w ist noch Teil der Basis
Basen eines Polyeders
Wann drehen sich beim Dualisieren die Vorzeichen um und wann nicht ?
max->min: Umdrehen
min->max: nicht Umdrehen
nur für die 0-Bedingung!
Wann ist die gegebene, zulässige Lösung eines LPs optimal?
Die Lösung erfüllt die Gleichungen des primalen und dualen LPs mit Gleichheitszeichen.
Gegeben: x* Vektor Lösung für primales LP; gesucht y* Vektor Lösung für Duales LP
BSP: x=(1,0,1)-> erste und dritte gleichung des dualen lps müssen mit gleichheit erfüllt sein; Gleichungssystem aufstellen und y´s rausrechnen.
Prüfen ob y die letzte Nebenbedingung auch erfüllt