Für die lineare Optimierung liefert MapleV das Packet 'simplex'. Die Syntax lautet:
with(simplex) minimize(Zielfunktion, Einschränkungen in Form von Ungleichungen mit <= bzw.>=); maximize(Zielfunktion, Einschränkungen in Form von Ungleichungen mit <= bzw.<=);
Beispiel:
Es werden die Produkte auf den Maschinen produziert. die Gewinnfunktion ist
Die Produktionszeit/Monat auf den Maschinen beträgt:
Das Produkt benötigt auf den Maschinen je 3 Stunden. Das Produkt benötigt auf der Maschine 2 Stunden, auf der Maschine 4 Stunden und auf der Maschine 6 Stunden. Daraus ergibt sich folgende Optimierung:
with(simplex): f:=300*x1+600*x2: einschr1:=3*x1+2*x2<=150: einschr2:=3*x1+4*x2<=160: einschr3:=6*x2<=170: maximize(f,{einschr1,einschr2,einschr3}); evalf(");
Ein Beispiel für Transportprobleme:
Ein Transportunternehmen hat drei Milchwerke (m1,m2,m3) mit Milch von drei Rinderställen (r1,r2,r3) zu beliefern. Der tägliche Bedarf beträgt 1000 l, 2000 l bzw. 2500 l. Die Rinderställe haben eine Tageskapazität von 800 l, 1500 l, 2300 l.
Die Transportkosten pro 1 Liter Milch in DM sind in der folgenden Tabelle aufgeführt:
Die Gesamtkosten sollen minimiert werden.
Es existieren neun Variable (x[1][1], x[1][2] usw. bis x[3][3]), da jedes Milchwerk von jedem Rinderstall beliefert werden kann. Die zu minimierende Größe ist
Die Einschränkungen sind einmal durch die Kapazität der Milchwerke gegeben:
und zum anderen durch die Kapazität der Rinderställe bestimmt:
In MapleV läßt sich dieses Problem wie folgt lösen:
restart: with(simplex): ri:=[1700,1500,2300]: mi:=[1000,2000,2500]: kosten:=array([[0.02,0.015,0.018],[0.01,0.017,0.023],[0.016,0.019,0.02]]); x:=array(1..3,1..3): r := {seq(sum(x[i,'j'],'j'=1..3)=ri[i],i=1..3)} union {seq(sum(x['i',j],'i'=1..3)=mi[j],j=1..3)}; v:={seq(seq(x[i,j],i=1..3),j=1..3)}: z:={}: for i from 1 to 3 do for j from 1 to 3 do z:=z union{x[i,j]*kosten[i,j]}: od; od; z:=convert(z,`+`); minimize(z,r,NONNEGATIVE); assign("); eval(x); z;
Dieses Beispiel kann leicht auf mehr Quellen und Zielorte erweitert werden.