|
|
De simplex-methode. |
©
h.hofstede (h.hofstede@hogeland.nl) |
|
|
Misschien is het handig als je de
les over de randwandelingen eerst leest.....
Deze les gaan we dat randwandelen automatiseren.
Neem het volgende voorbeeld: |
|
|
|
|
|
|
|
Voor een feestavond
op school gaat de feestcommissie zelf cocktails maken. Om het
eenvoudig te houden gaan ze twee soorten cocktails maken uit de
basisdranken wodka en sinaasappelsap en champagne.
Dit zijn de twee cocktails: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
De hoeveelheden zijn
in cl.
Men heeft een hoeveelheid van 11 liter wodka en 12 liter
sinaasappelsap en 15 liter champagne in voorraad.
Hoeveel cocktails kan men maximaal maken? |
|
|
|
|
|
|
|
De oplossing is
eenvoudig:
Stel dat we S (sweet orange) en H (heavy breeze) cocktails gaan maken.
sinaasappelsap: 15S + 5H ≤ 1200
wodka: 5S + 10H ≤ 1100
champagne: 15S + 10H ≤ 1500
Doelstellingsfunctie: D = S + H maximaliseren
Dat geeft het toelaatbare gebied hiernaast, en een randwandeling levert
het maximale aantal van 130 cocktails in punt P (40 sweet orange
en 90 heavy breeze).
En daarmee is de randwandeling
ten einde. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Laten we dit proces gaan
automatiseren.... |
|
|
|
|
|
Daarvoor introduceren
we eerst drie nieuwe variabelen, die aangeven hoeveel er NIET gebruikt
wordt. Stel:
• x = ongebruikte centiliters sinaasappelsap.
• y = ongebruikte centiliters wodka.
• z = ongebruikte centiliters champagne.
Deze variabelen heten spelingsvariabelen (engels:
slack variables).
Dat heeft het grote voordeel dat we bovenstaande ongelijkheden kunnen
veranderen in vergelijkingen, kijk maar: |
|
|
|
|
|
|
|
D
- S
- H = 0
15S + 5H + x = 1200
5S + 10H + y = 1100
15S + 10H + z = 1500
(met de aantekening dat alle variabelen, S, H, x, y, z
groter of gelijk aan nul moeten zijn) |
|
|
|
|
|
Het voordeel? |
vergelijkingen kun je bij elkaar
optellen en van elkaar aftrekken |
|
|
|
|
|
|
We zoeken dus een
oplossing voor dit stelsel van 4 vergelijkingen. Omdat er meer
variabelen dan vergelijkingen zijn, zijn er natuurlijk oneindig veel
oplossingen, maar we zijn op zoek naar degene waarbij D maximaal is. |
|
|
|
|
|
Stel nu dat we
beginnen met de situatie dat S = H = 0, en dus x = 1200,
y = 1100 en z = 1500
Al deze gegevens (vergelijkingen en beginwaarden) kunnen we als volgt in een zogenaamd
simplex-tableau
zetten (klinkt gewichtig, maar is niets anders dan een
overzichtelijke tabel): |
|
|
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
-1 |
-1 |
0 |
0 |
0 |
0 |
x |
0 |
15 |
5 |
1 |
0 |
0 |
1200 |
y |
0 |
5 |
10 |
0 |
1 |
0 |
1100 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
|
|
|
|
|
|
Ik hoop dat je ziet
dat daar gewoon die vier vergelijkingen nog een keer staan.
De variabelen in de eerste kolom heten de basisvariabelen,
en dat zijn de variabelen die in de gegeven situatie NIET nul zijn (dus
alle variabelen die niet in de eerste kolom staan zijn nul).
We begonnen in de situatie S = H = 0, en x =
1200, y = 1100, z = 1500. Dat komt overeen met hoekpunt
(0,0) in het toelaatbare gebied. Er zijn nog geen cocktails genmaakt; en dat kun je ook zien aan die rode nul van het simplex-tableau (rechts in de
D-vergelijking staat nul). |
|
|
|
|
|
Oké, tot zover nog
niet veel speciaals gebeurd.
Maar nu gaan we die eigenschap van vergelijkingen (dat je ze kunt
combineren) op een handige manier gebruiken.
Kijk eens naar die bovenste vergelijking van tableau 1.
Daar staat D - S - H = 0
Die nul staat daar nogal sneu aan de rechterkant. Maar als we nou die S
of die H groter maken (basisvariabele gaan maken) dan wordt D
groter.
Als we S groter gaan maken, dan wandelen we als hert ware in ons
toelaatbare gebied van de oorsprong naar rechts.
Merk op dat, als je de waarden rechts in de S-kolom deelt door de
overeenkomstige getallen in de S-kolom zelf, je precies de punten op de
S-as in het toelaatbare gebied krijgt. |
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
|
D |
1 |
-1 |
-1 |
0 |
0 |
0 |
0 |
x |
0 |
15 |
5 |
1 |
0 |
0 |
1200 |
1200/15
= 80 |
y |
0 |
5 |
10 |
0 |
1 |
0 |
1100 |
1100/5
= 220 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
1500/15
= 100 |
|
We kiezen nu de kleinste niet-negatieve van die drie (want we
mogen niet buiten het toelaatbare gebied komen), in dit geval de 80.
Het bijbehorende element uit de S-kolom is 15, en dat noemen we het
pivot-element (draai-element): |
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
-1 |
-1 |
0 |
0 |
0 |
0 |
x |
0 |
15 |
5 |
1 |
0 |
0 |
1200 |
y |
0 |
5 |
10 |
0 |
1 |
0 |
1100 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
|
|
|
|
|
|
Door handig
vergelijkingen (rijen) te combineren gaan we nu proberen de S-kolom te
veranderen in 0 - 1 - 0 - 0
Deel de tweede rij door 15: |
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
-1 |
-1 |
0 |
0 |
0 |
0 |
x |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
y |
0 |
5 |
10 |
0 |
1 |
0 |
1100 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
|
|
|
|
|
|
Tel deze tweede rij bij de bovenste op: |
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
-2/3 |
1/15 |
0 |
0 |
80 |
x |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
y |
0 |
5 |
10 |
0 |
1 |
0 |
1100 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
|
|
|
|
|
|
Trek de tweede rij
5 keer van de derde af: |
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
-2/3 |
1/15 |
0 |
0 |
80 |
x |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
y |
0 |
0 |
25/3 |
-1/3 |
1 |
0 |
700 |
z |
0 |
15 |
10 |
0 |
0 |
1 |
1500 |
|
|
|
|
|
|
Trek de tweede rij 15
keer van de onderste af: |
|
|
|
|
|
tableau 1 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
-2/3 |
1/15 |
0 |
0 |
80 |
x |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
y |
0 |
0 |
25/3 |
-1/3 |
1 |
0 |
700 |
z |
0 |
0 |
5 |
-1 |
0 |
1 |
300 |
|
|
|
|
|
|
Bedenk goed dat hier
nog steeds vier geldige vergelijkingen staan!!
De tweede rij (pivot-rij) geeft nu de vergelijking S +
1/3H +
1/15x
= 80
Maar omdat die S in de andere vergelijkingen niet meer voorkomt, kun je nu ook
S wel als basisvariabele schrijven.
We draaien als het ware S en x. Dat geeft dan tableau 2: |
|
|
|
|
|
tableau 2 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
-2/3 |
1/15 |
0 |
0 |
80 |
S |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
y |
0 |
0 |
25/3 |
-1/3 |
1 |
0 |
700 |
z |
0 |
0 |
5 |
-1 |
0 |
1 |
300 |
|
|
|
|
|
|
Merk alsjeblieft op
dat er door dat draaien niets aan de vergelijkingen is veranderd.
In het toelaatbare
gebied is er het volgende gebeurd: |
|
|
|
|
|
|
Welke kolom?
We kozen ervoor om
vanaf (0, 0) de variabele S te laten toenemen, dus zijn we opzij
gewandeld naar het volgende hoekpunt van het toelaatbare gebied. Zo zijn
we aangeland in punt (80,0) met D = 80 (rechtsboven in het simplex
tableau)
Als we in het begin voor de H-kolom in plaats van de S-kolom hadden
gekozen dan waren we omhoog gewandeld naar het punt (0, 110), dat
snap je vast wel.
Het is het handigst om de kolom te kiezen met het grootste negatieve
getal in de D-rij, want dan neemt D het snelst toe. In ons geval waren
beiden -1, dus maakte het niet uit.
Hoe verder?
In de bovenste rij zien we nu nog steeds een negatief getal -2/3
in de H-kolom staan. Dat betekent dat we D nog groter kunnen
maken. Deel de kolom rechts door de coëfficiënten uit de H-kolom en je
krijgt: |
|
|
|
|
|
tableau 2 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
|
D |
1 |
0 |
-2/3 |
1/15 |
0 |
0 |
80 |
S |
0 |
1 |
1/3 |
1/15 |
0 |
0 |
80 |
80/1/3
= 240 |
y |
0 |
0 |
25/3 |
-1/3 |
1 |
0 |
700 |
700/25/3
= 84 |
z |
0 |
0 |
5 |
-1 |
0 |
1 |
300 |
300/5
= 60 |
|
|
|
|
|
|
Het kleinste
niet-negatieve getal is 60, dus we kiezen het onderste element uit de
H-kolom als nieuw pivot-element.
Op dezelfde manier als hierboven gaan we nu de H-kolom veranderen in
0 - 0 - 0 - 1, zodat we H en z kunnen gaan draaien. Ik geef niet
alle tussenstappen, maar direct tableau 3, met H en z gedraaid: |
|
|
|
|
|
tableau 3 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
0 |
- 1/15 |
0 |
2/15 |
120 |
S |
0 |
1 |
0 |
2/15 |
0 |
-1/3 |
60 |
y |
0 |
0 |
0 |
4/3 |
1 |
-5/3 |
200 |
H |
0 |
0 |
1 |
-1/5 |
0 |
1/5 |
60 |
|
|
|
|
|
|
Het nieuwe aantal
cocktails is 120. We zien aan de basisvariabelen van de eerste kolom dat
alleen de hoeveelheid y nog niet volledig is benut. Verder zien
we in de S-rij en H-rij dat de hoeveelheden S en H op het moment gelijk
zijn aan 60 en 60. |
|
|
|
|
|
|
|
|
|
|
|
In het toelaatbare
gebied zijn we intussen gewandeld naar punt Q. Aan het feit dat we in Q
nog onder de grenslijn zitten die van 110 naar 220 loopt kun je trouwens
ook zien dat de y-hoeveelheid nog niet volledig is
benut.
Oké: de bovenste rij in tableau 3 laat zien dat
er nog een negatief getal bij x staat, dus D kan nog verder
vergroot worden. |
|
|
|
|
|
tableau 3 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
|
D |
1 |
0 |
0 |
- 1/15 |
0 |
2/15 |
120 |
S |
0 |
1 |
0 |
2/15 |
0 |
-1/3 |
60 |
60/2/15
= 450 |
y |
0 |
0 |
0 |
4/3 |
1 |
-5/3 |
200 |
200/4/3
= 150 |
H |
0 |
0 |
1 |
-1/5 |
0 |
1/5 |
60 |
60/-1/5 = -300 |
|
|
|
|
|
|
Het pivot-element
wordt het derde element uit de x-kolom. Dat is het kleinste
niet-negatieve getal in die gele kolom.
Dat geeft het volgende tableau: |
|
|
|
|
|
tableau 4 |
basis |
D |
S |
H |
x |
y |
z |
rechts |
D |
1 |
0 |
0 |
0 |
1/20 |
7/60 |
130 |
S |
0 |
1 |
0 |
0 |
-1/10 |
1/6 |
40 |
x |
0 |
0 |
0 |
1 |
3/4 |
-5/4 |
150 |
H |
0 |
0 |
1 |
0 |
3/20 |
-1/4 |
90 |
|
|
|
|
|
|
En nu zijn we klaar:
de bovenste rij bevat alleen nog maar positieve getallen, dus de waarde
van D kan niet verder vergroot worden. We zien uit dit laatste tableau
dat S = 40 en H = 90 en D = 130
Verder zien we dat van de x-hoeveelheid nog 150 cl
ongebruikt is, dus we houden 1,5 liter sinaasappelsap over.
15S + 5H = 15 • 40 + 5 • 90 = 1050 en dat is inderdaad 150 onder de
maximale 1500 cl sinaasappelsap.
Dat hoort allemaal bij punt P in het toelaatbare gebied. |
|
|
|
|
|
|
|
|
|
|
|
Je kunt je
voorstellen dat dit typisch een werkje is voor een computerprogramma.
Hier volgt een stroomschema voor zo'n programma. Het vat meteen nog eens
samen wat we nou allemaal gedaan hebben. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OPGAVEN |
|
|
|
|
|
1. |
examenvraagstuk Wiskunde A, VWO, 1983. |
|
|
|
|
|
|
Een bedrijf maakt vier modellen
vliegtuigjes. Er worden twee uitvoeringen van een sportvliegtuig
gemaakt: de Super (S) en de Economy (E). Daarnaast worden er twee
versies gemaakt van een zweefvliegtuig: één echt zweefvliegtuig, de
Zwever (Z), en één met hulpmotor: de Motorzwever (M).
Het schema voor de productie staat in de figuur hieronder. Daaruit
blijkt onder anderen dat er naast het onderdelenmagazijn 5
productiehallen zijn die alle een maximale capaciteit hebben. Zo
heeft hal I een productiecapaciteit van 10000 uur.
De productietijden per model per hal staan ook in het schema
vermeld: bijvoorbeeld het in elkaar zetten van een 'Economy' 40 uur.
Tenslotte is ook de winst af te lezen uit het schema: bij de
'verkoop' blijkt de winst op een 'Super' f 6000,- te
bedragen. |
|
|
|
|
|
|
|
|
|
|
|
|
|
a. |
Stel een simplex-tableau op
voor de berekening van de maximale winst (Je hoeft de berekening
zelf niet uit te voeren). |
|
|
|
|
|
|
De berekening wordt door een
computer uitgevoerd. De laatste drie tableaus die de computer levert
zien er als volgt uit (1e kolom: Super, 2e
kolom: Economy, 3e kolom: Motorzwever, 4e
kolom: Zwever):
het simplex tableau ziet er
zó uit: |
|
|
|
|
|
|
0.00
0.00
0,00
1.00
0.00
0.00 |
1.00
0.00
0.00
0.00
0.00
0.00 |
0.00
0.00
1.00
0.00
0.00
0.00 |
0.00
25.00
0.00
0.00
2.00
3.00 |
0.03
1.65
-0.06
0.00
0.04
0.08 |
0.00
1.00
0.00
0.00
0.00
0.00 |
0.00
-1.50
0.05
0.00
-0.15
-0.19 |
-0.08
-1.50
0.05
0.07
-0.20
-0.17 |
0.00
0.00
0.00
0.00
1.00
0.00 |
62.50
3425.00
52.50
150.00
480.00
-1409.38 |
|
|
De waarde van de
doelstellingsfunctie is 1409.38 |
|
|
|
het simplex tableau ziet er
zó uit: |
|
0.00
0.00
0,00
1.00
0.00
0.00 |
1.00
0.00
0.00
0.00
0.00
0.00 |
0.00
0.00
1.00
0.00
0.00
0.00 |
0.00
1.00
0.00
0.00
0.00
0.00 |
0.03
0.07
-0.06
0.00
-0.09
-0.12 |
0.00
0.04
0.00
0.00
-0.08
-0.12 |
0.00
-0.06
0.05
0.00
-0.03
0.00 |
-0.08
-0.06
0.05
0.07
-0.08
0.00 |
0.00
0.00
0.00
0.00
1.00
0.00 |
62.50
137.00
52.50
150.00
206.00
-1820.38 |
|
|
De waarde van de
doelstellingsfunctie is 1820.38 |
|
|
|
|
|
|
het simplex tableau ziet er
zó uit: |
|
0.00
0.00
0,00
1.00
0.00
0.00 |
1.00
0.00
0.00
0.00
0.00
0.00 |
1.67
1.20
20.00
-1.33
1.60
-0.18 |
0.00
1.00
0.00
0.00
0.00
0.00 |
-0.07
0.00
-1.10
0.07
-0.18
-0.11 |
0.00
0.04
0.00
0.00
-0.08
-0.12 |
0.08
0.00
1.00
-0.07
0.05
-0.02 |
0.00
0.00
1.00
0.00
0.00
0.00 |
0.00
0.00
0.00
0.00
1.00
0.00 |
150.00
200.00
1050.00
80.00
290.00
-1830.00 |
|
|
De waarde van de
doelstellingsfunctie is 1830.00
De optimale oplossing is nu gevonden.Aan de hand van deze
tableaus moeten de directeuren een beslissing nemen over de te
produceren aantallen toestellen.
De ene directeur (A) wil per se het productieschema uitvoeren dat
tot maximale winst leidt. De andere directeur (B) oppert de
mogelijkheid om te produceren volgens het middelste tableau: de
winst is wat minder, maar alle vier modellen worden
geproduceerd. |
|
|
|
|
|
|
a. |
Bepaal aan de hand van de
simplex-tableaus hoeveel stuks er van ieder model gemaakt moeten
worden, als directeur A zijn zin krijgt en hoeveel als directeur B
zijn zin krijgt. |
|
|
|
|
|
|
b. |
Bepaal bij ieder van de
onder b) genoemde productiemogelijkheden de gemiddelde winst
per vliegtuig. |
|
|
|
|
|
|
|
|
|
|
|
©
h.hofstede (h.hofstede@hogeland.nl) |