falsche Matrixberechnung

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
schuesra
User
Beiträge: 26
Registriert: Donnerstag 4. Oktober 2018, 17:40

Mir wird die Matrix bp in Periode 5 falsch erstellt. Mir wird hier 20,21,22,23 ausgegeben. Ich hab das Problem jetzt so vereinfacht, dass das Erstellen von bp nicht mehr abhängig von dem Inhalt der ersten Schleife abhängig ist. Ich verstehe einfach nicht wie es zu den Werten kommt. Suche jetzt schon seit 15 Stunden nach dem Grund und werde langsam wahnsinnig...
Hier der Code:
Anfragen =np.array([1,4,5,2,7,0,9,11,4,7])
bp = np.arange(40).reshape(10,4)
peter=np.array([100,100,100,100])

a = np.array([ [1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0],
[0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0],
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 1.0, 1.0] ])
v=[]
for t in range(10):
if t==0:
x = [] #ist die Liste x leer
myy = berechne_bidpreise1(f, teta, flugkapazität, a, p, q, t, x)
if t in reoptperiods and t != 0:
x = np.zeros((t,12)) #wird eine 0er Matrix mit axis[0]= Anzahl der bisherigen Perioden hergestellt
for t in range(t): #für alle Perioden bis zur aktuellen Reoptimierung
if v[t]==1: #wenn die Ba in Periode t angenommen wird, dann...
x[t,Anfragen[t]] = 1
myy = berechne_bidpreise1(f, teta, flugkapazität, a, p, q, t, x)
for i in range(4):
bp[t,i]=a[i,Anfragen[t]]*peter
v.append(1)

Output:
bp[5,0]:20
bp[5,1]:21
bp[5,2]:22
bp[5,3]:23


Alle anderen Perioden werden richtig berechnet....
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Code gehört in code-Tags, damit man ihn auch lesen kann. Du benutzt undefinierte Funktionen und Variablen, so dass man nicht nachvollziehen kann, was Du da eigentlich machst.
In Zeile 16 überschreibst Du die Variable `t` mit einem anderen Wert. Abkürzungen und einbuchstabige Variablen sind genau aus diesem Grund schlecht. Was soll myy oder bp oder v oder peter denn bedeuten? Da `v` nur 1en enthält, ist diese Liste ziemlich nutzlos. Der Sonderfall t=0 ist keiner und kann mit dem zweiten if-Block abgearbeitet werden.
Antworten