Daher bekomme ich für jedes "b" einen anderen Zielfunktionswert. Es kommen auch immer die gleichen Werte heraus, wenn ich das Programm neu aufrufe. Nun das Problem: Ich möchte auf die optimalen Werte der Dualvariablen zugreifen. Diese existieren für jedes i und jedes l. Diese lassen sich anhand constraint 19 herausfinden. Diese werden mir auch ausgegeben. Wenn ich allerdings die Funktion wiederholt aufrufe, dann werden mir andere Werte zurückgegeben und das kann ja absolut nicht sein. Gleicher Code, aber andere Rückgabewerte, wie kann das sein? Ich habe euch mal den Code reinkopiert und hoffe, dass ihr damit was anfangen könnt. Falls ihr den Code für die Übergabearrays braucht, kann ich den gerne auch noch posten. Zur Übersicht zunächst mal das Gurobi Modell:
Code: Alles auswählen
# Model
def berechne_BP_RLP(f, teta, flugkapazität, a, D_tj_RLP, S_tj_RLP, flüge, perioden, produkte, nshowupsamples):
m = Model("RLP")
#Erstelle Entscheidungsvariablen für die akzeptierten BA der jeweiligen Produkte
#decision varibales
accept = m.addVars(perioden, produkte, name="accept")
denie = m.addVars(nshowupsamples, perioden, produkte, name="denie")
m.update()
#Objective (18)
obj = sum(f[j]*accept[t, j] for t,j in accept) - 0.005*sum(teta[j]*denie[l, t, j] for l in nshowupsamples for t in perioden for j in produkte)
m.setObjective(obj, GRB.MAXIMIZE)
#constraint 19
c19 = m.addConstrs(sum(a[i,j]*(S_tj_RLP[l, t, j]*accept[t,j] - denie[l,t,j])
for t in perioden for j in produkte) <= flugkapazität[i] for i in flüge for l in nshowupsamples)
#constraint 20
m.addConstrs(denie[l,t,j] <= S_tj_RLP[l, t, j]*accept[t,j]
for l in nshowupsamples for t in perioden for j in produkte)
#constraint 21
m.addConstrs(accept[t, j] <= D_tj_RLP[t, j] for t,j in accept)
m.optimize()
for i in flüge:
for l in nshowupsamples:
bp[i,l]= c19[i,l].Pi
bpi[i] = bp[i,:].sum()
return bpi[0], bpi[1], bpi[2], bpi[3]
for b in range(12):
myy[b] = berechne_BP_RLP(f, teta, flugkapazität, a, D_tj_RLP[b], S_tj_RLP[200*(b+1)-200:200*(b+1)], flüge, perioden, produkte, nshowupsamples)