reset; option omit_zero_rows 1; # fuer Ausgaben ohne Nullen option randseed''; # immer frische Zufallszahlen option solver cplex; set Spieler := {'Rainer','Son','Nico','Elisa','Xian','Mariya','Matthias','Nicole','Oliver', 'Tim','Carlos','Lars','Benedict','Theresa','Niso','Jan','Mathias','Carl','Janot'}; param tor {i in Spieler} := Uniform(0,100); # Staerke param abwehr {i in Spieler} := Uniform(0,100); # je param mittel {i in Spieler} := Uniform(0,100); # Bereich param sturm {i in Spieler} := Uniform(0,if i='Rainer' then 120 else 100); # Torriecher durch Erfahrung! var B {Spieler} binary; # ob Spieler i auf der Ersatzbank sitzt var T {Spieler} binary; # ob Spieler i Torwart ist var A {Spieler} binary; # ob Spieler i in der Abwehr eingesetzt wird var M {Spieler} binary; # ob Spieler i im Mittelfeld spielt var S {Spieler} binary; # ob Spieler i Stuermer ist var E {i in Spieler} = T[i]+A[i]+M[i]+S[i]; var Y2 binary; var Y7 binary; var Y8 binary; var Y10 binary; var Y11 binary; var Y12 binary; maximize zfkt: sum{i in Spieler} (T[i]*tor[i] + A[i]*abwehr[i] + M[i]*mittel[i] + S[i]*sturm[i] + 0.1*B[i]*(tor[i] + abwehr[i] + mittel[i] + sturm[i])); subject to spi {i in Spieler}: E[i]+B[i]<=1; # Eindeutigkeit fuer alle i subject to tr : sum{i in Spieler} T[i] =1; subject to abw: sum{i in Spieler} A[i] =4; subject to mit: sum{i in Spieler} M[i]>=3; subject to stu: sum{i in Spieler} S[i]>=1; subject to mus: sum{i in Spieler}(M[i]+S[i])=6; subject to ban: sum{i in Spieler} B[i] =5; subject to nb1: B['Rainer']=0; # Rainer nicht auf der Bank subject to nb2: E['Tim'] >= E['Carlos']; # wenn Carlos spielt dann spielt auch Tim subject to nb3: E['Lars']+E['Benedict'] = 2*Y2; # entweder Lars und Benedict spielen oder keiner von beiden subject to nb4: A['Elisa'] + A['Matthias'] <= 1; # Elisa und Mattias spielen nicht beide Abwehr subject to nb5a: M['Nico'] + M['Oliver'] + M['Theresa']>= 1; # einer von Nico, Oliver und Theresa spielt im Mittelfeld subject to nb5b: M['Nico'] + M['Oliver'] + M['Theresa']<= 2; # aber nicht alle 3 subject to nb6: T['Xian'] <= 1-S['Jan']; # wenn Xian im Tor dann Jan nicht Sturm subject to nb7a: S['Mariya'] <= Y7; # wenn Mariya im Sturm dann Carl auf Bank und Mathias im Mittelfeld subject to nb7b: B['Carl'] >= Y7; subject to nb7c: M['Mathias']>= Y7; subject to nb8a: S['Niso']+S['Janot']<= 2*Y8; # wenn Niso Sturm oder Janot Sturm dann Carl Abwehr subject to nb8b: B['Carl']>=Y8; subject to nb9: A['Nicole']+M['Nicole']<=M['Son']+S['Niso']; # wenn Nicole Abwehr oder Mittel dann Son Mittelfeld oder Niso Sturm subject to nb10a:S['Rainer']<=Y10; # wenn Rainer Sturm dann mind. 2 Stuermer subject to nb10b:sum{i in Spieler} S[i]>=2*Y10; subject to nb11a:S['Rainer']=1-Y11; # wenn Rainer nicht Sturm dann Oliver nicht Abwehr subject to nb11b:A['Oliver']<=1-Y11; subject to nb12a:T['Theresa']<=Y12; # wenn Theresa im Tor dann Matthias oder Mathias auf Bank (aber nicht beide) subject to nb12b:Y12<=B['Matthias']+B['Mathias']; subject to nb12c:B['Matthias']+B['Mathias']<=2-Y12;# Zum Austoben subject to test: T['Theresa']=1; # Hier alternative Modellierungen: subject to nb3_: E['Lars']=E['Benedict']; # entweder Lars und Benedict spielen oder keiner von beiden subject to nb4_: A['Elisa'] + A['Matthias'] <= 1; # Elisa und Mattias spielen nicht beide Abwehr subject to nb5_:1<=M['Nico'] + M['Oliver'] + M['Theresa']<=2; # einer von Nico, Oliver und Theresa spielt im Mittelfeld, aber nicht alle 3 subject to nb6_: T['Xian'] + S['Jan'] <= 1; # wenn Xian im Tor dann Jan nicht Sturm subject to nb7_:2*S['Mariya'] <= B['Carl']+M['Mathias']; # wenn Mariya im Sturm dann Carl auf Bank und Mathias im Mittelfeld subject to nb8_: S['Niso']+S['Janot'] <= 2*B['Carl']; # wenn Niso Sturm oder Janot Sturm dann Carl Abwehr subject to nb9_: A['Nicole']+M['Nicole']<=M['Son']+S['Niso'];# wenn Nicole Abwehr oder Mittel dann Son Mittelfeld oder Niso Sturm subject to nb10_: S['Rainer']+1<= sum{i in Spieler} S[i]; # wenn Rainer Sturm dann mind. 2 Stuermer subject to nb11_: S['Rainer']>=A['Oliver']; # wenn Rainer nicht Sturm dann Oliver nicht Abwehr solve; display B,T,A,M,S; display B; display T; display A; display M; display S; end;