Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

78
Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009

Transcript of Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Page 1: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Inleiding tot Lineair Programmeren

Tom De Decker

27/11/2009

Page 2: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Inhoud

• Situering

• Voorbeeld van een LP-probleem

• Grafische benadering

• Mathematische benadering

• Conclusie

• Meer informatie

• Begrippen

Page 3: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Situering

Lineaire programmering (LP) is een methode die gebruikt wordt voor het optimaliseren van functies, onder bepaalde voorwaarden. LP-problemen komen vaak voor bij het opmaken van productieplannen (zie voorbeeld) maar er zijn tal van andere problemen die via LP aangepakt kunnen worden.Lineaire programmering is een deel van het vakgebied dat “Operationeel Onderzoek” genoemd wordt. Dit studiegebied houdt zich bezig met het onderzoeken van complexe vraagstukken die zich situeren binnen de sfeer van productie en logistiek.

Page 4: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Situering

Operationeel onderzoek is een heel specifiek vakgebied. Het komt niet aan bod in het vak economie uit het secundair onderwijs, en zelfs op de universiteit krijgen slechts een kleine groep mensen (de richting handelsingenieur) deze cursus. Het is dus perfect mogelijk dat je een “economie-student” aanspreekt en dat hij niet weet waarover je het hebt. Hou hier rekening mee bij het opzoeken van informatie, en weet ook dat slechts een kleine groep mensen hier later effectief mee in contact gaat komen. Dat gezegd zijnde is de basis niet erg moeilijk om te begrijpen. LP-problemen zijn gelinkt aan “functieonderzoek” in de wiskunde en vaak worden matrices gebruikt bij het oplossen van de problemen.

Page 5: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Stel je een fabriek voor die 2 soorten goederen produceert: kasten en bureaus. Beide producten kunnen gemaakt worden van ongeveer dezelfde grondstoffen (hout, schroeven, metaal,…), maar voor elk product moeten verschillende handelingen gebeuren om het te maken. Deze handelingen gebeuren via 2 machines, die we machine A en machine B zullen noemen.

Page 6: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

• Om één kast te maken moet men 3u bezig zijn met machine A en 4u met machine B.

• Om één bureau te maken moet men 5u bezig zijn met machine A en 2u met machine B.

Grondstoffen Machine A Machine B Eindproduct

(3 uur) (4 uur)

Grondstoffen Machine A Machine B

Eindproduct

(5 uur) (2 uur)

Page 7: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Het bedrijf verkoopt deze producten tegen een vaste winstmarge. Op elke kast die verkocht wordt maakt het bedrijf 2 euro winst, op elke bureau die men verkoopt wordt 3 euro winst gemaakt. Het hoofddoel van het bedrijf is, natuurlijk, het realiseren van een maximale winst.

= 2 euro = 3 euro

Page 8: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Er is slechts één probleem: het aantal uren dat een machine wekelijks gebruikt kan worden is beperkt. Machine A is slechts 30 uur per week beschikbaar, machine B slechts 20 uur.

Nu is de vraag: hoeveel kasten en hoeveel bureaus moet de onderneming per week produceren om een maximale winst te behalen, zonder het het maximaal aantal machineuren voor elke machine te overschrijden?

Page 9: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Even samenvatten:-2 producten (kasten, bureaus)-2 machines (A, B)-Winstmarge kasten = 2 euro-Winstmarge bureaus = 3 euro-Maximaal gebruik machine A = 30u/week-Maximaal gebruik machine B = 20u/weekGevraagd: bepaal optimale productie voor kasten en bureaus zonder de machines te overbelasten.

Page 10: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Eerst kiezen we onze variabelen. Vermits gevraagd wordt hoeveel kasten en hoeveel bureaus geproduceerd moeten worden zullen we deze (nu nog onbekende) aantallen als variabelen kiezen.

x = aantal geproduceerde kasten

y = aantal geproduceerde bureaus

x

y

Page 11: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Nu kunnen we onze winstfunctie opstellen.Elke kast brengt 2 euro op. De totale winst die we kunnen halen uit de verkoop van kasten zal dus (prijs * hoeveelheid) 2 * x bedragen.Elk bureau brengt 3 euro op. De totale winst die we kunnen halen uit de verkoop van bureaus zal dus (prijs * hoeveelheid) 3 * y bedragen.De totale winst (W) op het einde van de week zal dan de som zijn van deze 2 bedragen:

W = 2*x + 3*y

Page 12: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Vervolgens kijken we naar onze beperkingen.

Machine A is slechts 30 uur per week beschikbaar.

Om 1 kast te maken hebben we 3 uur machinetijd nodig van machine A (zie gegevens).

Om 1 bureau te maken hebben we 5 uur machinetijd van nodig van machine A (zie gegevens).

Page 13: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Het aantal uren per week dat we machine A gebruiken om kasten te maken =3 uur per kast * aantal kasten = 3*xHet aantal uren per week dat we machine A gebruiken om bureaus te maken =5 uur per bureau * aantal bureaus = 5*yDe som van deze 2 tijden moet lager zijn dan 30 om de machine niet te overbelasten:

3*x + 5*y <= 30

Page 14: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

We maken dezelfde redenering voor machine B.

Machine B is slechts 20 uur per week beschikbaar.

Om 1 kast te maken hebben we 4 uur machinetijd nodig van machine B (zie gegevens).

Om 1 bureau te maken hebben we 2 uur machinetijd van nodig van machine B (zie gegevens).

Page 15: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Het aantal uren per week dat we machine B gebruiken om kasten te maken =4 uur per kast * aantal kasten = 4*xHet aantal uren per week dat we machine B gebruiken om bureaus te maken =2 uur per bureau * aantal bureaus = 2*yDe som van deze 2 tijden moet lager zijn dan 20 om de machine niet te overbelasten:

4*x + 2*y <= 20

Page 16: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Verdere beperkingen:

Het aantal geproduceerde kasten kan niet negatief zijn: x >= 0

Het aantal geproduceerde bureaus kan niet negatief zijn: y >= 0

Deze laatste 2 beperkingen lijken banaal, maar ze zijn belangrijk om een juiste wiskundige vertaling te geven van je probleem.

Page 17: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

We kunnen onze probleemstelling nu wiskundig herformuleren. Herinner je de vraagstelling:

“Hoeveel kasten en hoeveel bureaus moet de onderneming per week

produceren om een maximale winst te behalen, zonder het het maximaal aantal

machineuren voor elke machine te overschrijden?”

Page 18: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

“hoeveel kasten en hoeveel bureaus?”Bepaal x en y (x >= 0, y >= 0)“een maximale winst realiseren” zodat W = 2*x + 3*y maximaal is“ zonder het maximaal aantal machine-uren te overschrijden”En zodat 3*x + 5*y <= 30

en 4*x + 2*y <= 20

Page 19: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Voorbeeld v/e LP-probleem

Het LP-probleem:

Max(W = 2*x + 3*y)

s.t. 3*x + 5*y <= 30

4*x + 2*y <= 20

x >= 0

y >= 0

Dit noemen we de objectieve functie, soms ook wel “doelfunctie” genoemd. In dit geval wordt gevraagd

om deze te maximaliseren, maar je kan ook minimaliserings-vraagstukken hebben, bvb. wanneer je kosten krijgt ipv winstmarges (je optimum is dan

het punt met de laagste totale kosten).

Dit zijn de restricties. “s.t.” staat voor “subject to”, wat Engels is voor “onder behoud van”.

Bij een lineair programmeringsprobleem zijn zowel de restricties als de objectieve functie lineaire functies (d.w.z., functies van de eerste graad). Als dit niet het geval is, bvb. wanneer de objectieve functie een kwadratische vergelijking is, dan spreekt men van een niet-lineair programmeringsprobleem (NLP).

Page 20: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

We kunnen ons LP-probleem grafisch voorstellen. Op de horizontale as zetten we het aantal geproduceerde kasten (variabele x), op de verticale as het aantal geproduceerde bureaus (variabele y). Omdat x en y groter dan 0 moeten zijn (zie beperkingen) volstaat het om enkel het eerste kwadrant te tekenen.

Elk punt in de grafiek stelt een combinatie voor van kasten en bureaus die geproduceerd kunnen worden.

Page 21: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

In dit punt worden 3 kasten en 4 bureaus geproduceerd

y

x

Page 22: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

We beginnen met onze beperkingen aan te brengen op de grafiek. De ongelijkheden van de restricties stellen in de grafiek halfvlakken voor. Voor de duidelijkheid tekenen we enkel de grenzen van deze halfvlakken (vervang de ongelijkheden door een gelijkheid).

Restricties:Berperking machine A: 3*x + 5*y <= 30Berperking machine B: 4*x + 2*y <= 20Negatieve productie onmogelijk: x >= 0; y >= 0

Page 23: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Deze combinaties kunnen niet worden geproduceerd, men zou immers machine A overbelasten.

Deze combinaties kunnen niet worden geproduceerd, men zou immers machine B overbelasten.

Enkel de combinaties in dit vlak kunnen geproduceerd

worden

Page 24: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

Wat met de objectieve functie (=de winst)?

Die is dus een dalende rechte met als richtingscoëfficiënt de verhouding tussen de prijzen. De exacte ligging van de rechte kunnen we echter pas bepalen wanneer we winst, en dus de optimale combinatie van x en y, bepaald hebben.

3

W x *

3

2

3

Wx *2- y

x*2 - Wy *3

y*3 x *2 W

Page 25: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Page 26: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

Enkel de punten uit het groene vlak komen dus in aanmerking als oplossing voor ons LP-probleem…maar dat zijn er nog steeds oneindig veel natuurlijk!

We kunnen echter nog een groot aantal oplossingen uitsluiten.

Page 27: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Stel dat we ervoor kiezen om 2 kasten en 3 bureaus te produceren.

De winst (W) is dan2 euro * 2 kasten + 3 euro * 3 bureaus= 13 euro

We kunnen echter meer winst maken door één kast of één bureau extra te produceren, zonder daarbij de restricties te schenden!

W(2,4) = 2*2 + 3*4 = 18 euroW(3,3) = 2*3 + 3*3 = 14 euro

Page 28: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

Door de voorgaande redenering steeds te herhalen bekom je dat de punten binnen de lijnen van de beperkingen steeds verbeterd kunnen worden, tot enkel de lijnen van de restricties zelf overblijven.

Page 29: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

De optimale oplossing ligt ergens op deze rode lijn…maar dat zijn nog steeds oneindig veel punten .

Page 30: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benaderingEven terzijde…Als je in “volledige” kasten en bureaus gaat rekenen dan zou je kunnen zeggen dat enkel de gehele getallen op de rode lijn in aanmerking komen als oplossing. Hoe kan je immers (bvb.) 3,5 kasten en 3 bureaus produceren?

Bij lineair programmeren gaan we er echter vanuit dat de variabelen (=producten) oneindig vaak deelbaar, dus reële getallen, zijn. Dit omdat we anders met discontinue functies moeten werken wanneer we het probleem wiskundig proberen oplossen. Wanneer oplossingen enkel als gehele getallen mogen voorkomen, spreken we van “Integer Programming” (IP). IP-problemen zijn, door de discontinue natuur van de functies, bijzonder lastig om op te lossen.

Om toch met deelbare getallen te kunnen werken kan je stellen dat we in het voorbeeld spreken over “duizenden” kasten en bureaus. Een oplossing van 3,5 kasten in het voorbeeld is staat dan eigenlijk gelijk aan 3500 te produceren kasten.

Page 31: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Laten we nu de objectieve functie erbij halen…

Winstfunctie:W = 2*x + 3*y

Dit is een rechte met richtingscoëfficiënt (-2/3).

Hoe verder de objectieve functie van de oorsprong ligt, hoe hoger de winst.

Page 32: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

Het optimale punt kan gevonden worden door de objectieve functie evenwijdig te verschuiven naar de oorsprong. Het “verste” snijpunt met de rode lijn (en dus ook met de oplossingenruimte) zal dan de beste toegelaten combinatie zijn die de onderneming kan produceren.

Page 33: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Winstfunctie:W = 2*x + 3*y

De oplossing!

Page 34: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

De oplossing ligt dus op het snijpunt van de beide restricties. Dit geen geen toeval.

Bij LP-problemen zal de oplossingenruimte steeds bestaan uit een convexe veelhoek (het groene vlak). De optimale oplossing zal zich steeds op één van de hoekpunten bevinden. Hou echter altijd rekening met al je beperkingen!

Page 35: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

Stel dat kasten slechts 1 euro winst zouden opleveren en dat bureaus 4 euro winst zouden opbrengen. De andere gegevens blijven dezelfde.

De winstfunctie wordt dat:

W = 1*x + 4*y

Page 36: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Grafische benadering

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Winstfunctie:W = 1*x + 4*y

De optimale oplossing ligt nu op een ander hoekpunt van de oplossingenruimte. Herinner je echter dat we bij de beperkingen tevens x >= 0 vermeld hadden opdat we geen “negatieve productie” konden bekomen? x = 0 is de vergelijking van de y-as!

Het nieuwe optimum ligt dus opnieuw op het snijpunt van twee restricties – die van machine A en die die zegt dat er minstens 0 kasten geproduceerd moeten worden.

De oplossingenruimte is nog steeds dezelfde.

Page 37: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Uit voorgaande bespreking hebben we besloten dat de optimale oplossing van een LP-probleem zich steeds op een hoekpunt van de oplossingenruimte zal bevinden. Deze oplossingenruimte (het groene vlak op de figuren) wordt ook wel de “simplex” genoemd.Om de exacte combinatie te vinden die een maximale winst oplevert zullen we dus alle hoekpunten van de simplex moeten vinden en vervolgens voor elk van deze combinaties de waarde van de objectieve functie (de winst uit het voorbeeld) berekenen. De combinatie met de hoogste objectieve functie-waarde zal dan de optimale oplossing van ons probleem vormen.

Page 38: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Er bestaat een algoritme dat het zoeken van deze optimale oplossing mogelijk maakt: de simplex-methode. Deze is gebasseerd op Gauss-transformaties van matrices en het zogenaamd “pivoteren”.Het voordeel van de simplex-methode is dat ze altijd toepasbaar is (ook wanneer we met meer dan 3 variabelen werken, waardoor we het probleem niet meer grafisch kunnen voorstellen!) en dat men gegarandeerd de optimale oplossing zal vinden – daar waar andere methoden soms enkele een “goede” oplossing zullen vinden en niet de beste. Het nadeel is dat ook eenvoudige problemen soms erg veel werk vergen om op te lossen.

Page 39: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Herinner je ons voorbeeld. De probleemstelling hadden we wiskundig als volgt geformuleerd:

Max(W = 2*x + 3*y)s.t. 3*x + 5*y <= 30

4*x + 2*y <= 20x >= 0; y >= 0

We gaan deze set van vergelijkingen omzetten naar een zogenaamde “standaardvorm”. Hierbij zullen we proberen om de beperkingen om te zetten naar gelijkheden, in plaats van ongelijkheden.

Page 40: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

De objectieve functie zetten we om naar een vergelijking waarbij het rechterlid gelijk is aan nul.

W = 2*x + 3*y

<=> W – 2*x – 3*y = 0

Page 41: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Om de restricties om te zetten naar gelijkheden zullen we wat meer kunst- en vliegwerk nodig hebben. We zullen hiervoor enkele nieuwe variabelen moeten invoeren, die we “slack-variabelen” zullen noemen.

“Slack-variabelen” duiden in feite aan hoever een bepaalde oplossing van de beperking verwijderd is. Ons voorbeeld zal dit verduidelijken.

Page 42: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Bekijk de beperking van machine A: 3*x + 5*y <= 30

Het linkerlid van de ongelijkheid zal dus steeds kleiner moeten zijn dan 30. Hoeveel kleiner? Laat ons deze waarde (de zogenoemde “slack”, wat Engels is voor “speling”) voorstellen door een variabele sa. sa is dus de hoeveelheid die je extra nodig hebt opdat het linkerlid (dat steeds kleiner of gelijk aan 30 moet zijn) gelijk te kunnen stellen aan 30. We kunnen dan de beperking van machine A omzetten naar:

sa + 3*x + 5*y = 30

Merk op dat ya steeds >= 0 zal moeten zijn.

Page 43: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

We doen hetzelfde voor de beperking van machine B:4*x + 2*y <= 20

<=> sb + 4*x + 2*y = 20 met sb >=0.

De andere beperkingen (niet-negatief zijn van x, y, sa en sb hoeven niet omgezet te worden naar gelijkheden. De simplex-methode veronderstelt steeds dat alle variabelen (ook slack-variabelen) groter of gelijk aan nul moeten zijn. Wanneer je probleemstelling zegt dat een variabele kleiner dan nul zal moeten zijn, dan kan je dit oplossen door overal het tegengestelde te nemen van deze variabele. Als A <= 0 moet zijn, dat moet immers altijd gelden dat –A >= 0 !

Page 44: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

We hebben nu de standaardvorm van ons probleem:

Max W – 2*x – 3*y + 0*sa + 0*sb = 0

s.t. 3*x + 5*y + 1*sa + 0*sb = 30

4*x + 2*y + 0*sa + 1*sb = 20

x, y, sa, sb >= 0.

We kunnen dit omzetten naar een matrixvorm. Dit noemen we de “simplex-tableau”.

Page 45: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -2 -3 0 0 0

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableau

In de kolommen komen de coëfficiënten van de verschillende variabelen. De rechterleden van de vergelijkingen komen uiterst rechts te staan. Wat die “basis” wil zeggen, daar komen we straks toe.

In de eerste rij komen de coëfficiënten van de objectieve functie:

1*W – 2*x – 3*y + 0*sa + 0*sb = 0In de tweede rij komen de coëfficiënten van de eerste restrictie:

0*W + 3*x + 5*y + 1*sa + 0*sb = 30

In de derde rij komen de coëfficiënten van de tweede restrictie:

0*W + 4*x + 2*y + 0*sa + 1*sb = 20

Page 46: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

De simplex-methode bestaat uit 5 stappen:

1) Kies een basisoplossing2) Kies een variabele om in de basis op te nemen3) Bepaal het pivot-element en de pivot-rij4) Veeg de kolom van de gekozen variabele leeg5) Herhaal stappen 2 t.e.m. 4 tot de optimale oplossing

gevonden is.

In wat volgt zullen we deze stappen één voor één doorlopen en verduidelijken.

Page 47: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering1) Kies een basisoplossing

Dit is een willekeurige startoplossing die de restricties niet schendt.

In ons voorbeeld kunnen we onmiddelijk een eenvoudige oplossing vinden: x = 0 en y = 0. Er is dan geen productie en de waarde van de objectieve functie (de winst) is dan gelijk aan 0. Ook zullen de machines zeker niet overbelast worden. Door de manier waarop we onze simplex-tableau opgesteld hebben staat deze startoplossing meteen klaar.

De eerste kolom (basis) toont de variabelen die “in de basis opgenomen zijn”. In dit geval zijn dit enkel de slackvariabelen. Variabelen die geen deel uitmaken van de basis worden dan verondersteld 0 te zijn. Aangezien x en y gelijk zijn aan nul zal er veel ruimte zijn tussen de huidige oplossing en de beperkingen (de machineuren die we mogen gebruiken). Hoeveel ruimte? Dat kunnen we aflezen in de rechterkolom (RL) van de tableau.

Page 48: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -2 -3 0 0 0

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableau

In onze startoplossing zijn x en y gelijk aan 0, wat betekent dat ze geen deel uitmaken van de basis. Enkel de slackvariabelen maken dus deel uit van de basis.

De coëfficiënten van de variabelen die deel uitmaken van de basis vormen samen steeds een eenheidsmatrix in de tableau.

De waarde van de basisvariabelen kan je steeds in de “RL” kolom aflezen. Zoals de tableau er nu staat zitten we dus bij de oplossing x = 0, y = 0 (want beide niet in basis), sa = 30 en sb = 20. Dit is logisch, want als de productie 0 is hebben we al onze machine-uren over!

Page 49: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering2) Kies een variabele om in de basis op te nemen

Vervolgens kiezen we een variabele waarvan we de waarde willen wijzigen.

Logischerwijs zal je eerst meer gaan produceren van het product dat het meeste opbrengt (in dit geval bureaus, variabele y). In algemene termen kies je dus de variabele die de grootste (positieve) invloed heeft op je objectieve functie. In de tableau herken je deze variabele door in de rij van de doelfunctie te kijken welke variabele de meest negatieve coëfficiënt heeft.

Klinkt dit onlogisch? Bedenk je dan dat we bij het omzetten van onze vergelijkingen naar de standaardvorm de termen van x en y van lid hebben moeten verwisselen in de objectieve functie.

Wanneer alle coëfficiënten in de rij van de doelfunctie positief zijn, dan hebben we onze optimale oplossing gevonden. We kunnen deze dan aflezen uit de kolommen “basis” en “RL”.

Page 50: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -2 -3 0 0 0

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableauIn de rij van de doelfunctie heeft variabele y de meest negatieve coëfficiënt. We kiezen dus om variabele y op te nemen in de basis.

Page 51: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering3) Bepaal het pivot-element en de pivot-rij

Nu we weten welke variabele we willen opnemen in de basis, zullen we moeten proberen om met de cöefficiënten van de nieuwe basisvariabelen een eenheidsmatrix te vormen in de simplex-tableau. Daartoe zullen we door elementaire rij-bewerkingen toe te passen op de kolom van de gekozen variabele proberen schoonvegen. Maar, met welke rij zullen we deze bewerkingen dan uitvoeren?

Om deze rij te bepalen delen we het RL van elke rij door de coëfficiënt van de in stap 2 gekozen variabele. De rij waar de uitkomst het laagste is, zal dan gebruikt worden om de kolom in kwestie schoon te vegen. We noemen deze rij de “pivot-rij”, en de coëfficiënt van de in de basis op te nemen variabele uit die rij wordt het “pivot-element” genoemd.

Page 52: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -2 -3 0 0 0

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableauIn stap 2 kozen we ervoor om variabele y in de basis op te nemen.

We delen de waarde van het RL uit de 2e rij door de coëfficënt van variabele y uit dezelfde rij: 30 / 5 = 6

We doen hetzelfde voor de 3e rij: 20 / 2 = 10

Omdat 6 kleiner is dan 10 kiezen we rij 2 als pivot-rij. De coëfficiënt van y in die rij (=5) wordt dan het pivot-element.

Page 53: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering4) Veeg de kolom van de gekozen variabele leeg

Dit wil zeggen dat we in de kolom van de gekozen variabele:- De coëfficiënten van de niet-pivot-rijen op nul moeten krijgen door bij deze rijen een veelvoud van de pivotrij op te tellen.- De pivot-rij moeten delen door het pivot-element.

Door deze transformaties door te voeren zal de kolom van de gekozen variabele enkel nog uit nullen bestaan, behalve op de plaats van het pivot-element, waar een één zal komen te staan.

De variabele die in de pivot-rij in de basis zat, zal door deze transformaties de basis verlaten. De variabele die we in stap 2 gekozen hebben zal zijn plaats innemen in de basis. We kunnen dan een nieuwe oplossing aflezen uit de simplex-tableau.

Page 54: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -2 -3 0 0 0

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableau

In stap 3 kozen we de 2e rij als pivot-rij, met 5 als pivot-element.

Om de coëfficiënt van y in rij 1 op nul te krijgen, zullen we rij 2, vermenigvuldigd met (3/5), bij rij 1 moeten optellen. (want: -3 + 5*(3/5) = 0)

Page 55: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 3 5 1 0 30

1 -2 -3 0 0 0

Rij 1:

+ (3/5) * Rij 2

(3/5)*

= 1 -1/5 0 3/5 0 18

Page 56: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

sa 0 3 5 1 0 30

sb 0 4 2 0 1 20

1e simplex-tableau

Om de coëfficiënt van y in rij 3 op nul te krijgen, zullen we rij 2, vermenigvuldigd met (-2/5), bij rij 3 moeten optellen. (want: 2 + 5*(-2/5) = 0)

Page 57: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 3 5 1 0 30

0 4 2 0 1 20

Rij 3:

+ (-2/5) * Rij 2

(-2/5)*

= 0 14/5 0 -2/5 1 8

Page 58: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

sa 0 3 5 1 0 30

sb 0 14/5 0 -2/5 1 8

1e simplex-tableau

Om de coëfficiënt van y in rij 2 op één te krijgen, zullen we rij 2 moeten delen door het pivot-element (want: 5/5 = 1).

Page 59: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 3/5 1 1/5 0 6

0 3 5 1 0 30

Rij 2 / 5:

(1/5)*

=

Page 60: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

y 0 3/5 1 1/5 0 6

sb 0 14/5 0 -2/5 1 8

2e simplex-tableau

Door het uitvoeren van deze transformaties vormen de kolommen met de coëfficiënten van y en sb nu samen een eenheidsmatrix.

De kolom met de coëfficiënten van sa kan geen deel meer uitmaken van een eenheidsmatrix.

Variabele y vervangt variabele sa in de basis.

We bekomen een nieuwe oplossing van ons LP-probleem:

x = 0 (niet in de basis), y = 6, sa = 0 (niet in de basis), sb = 8.

De waarde van de objectieve functie bedraagt 18 (aflezen in RL).

Page 61: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benaderingEven terug naar de grafiek…

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Winstfunctie:W = 2*x + 3*y

De basisoplossing van onze simplex-tableau was x = 0, y = 0.

De slack was dan maximaal (sa = 30, sb = 20), we hadden immers al onze machine-uren nog over.

Na één iteratie van de simplex-methode bekwamen we een oplossing vanx = 0, y = 6.

De slack-variabele sa verdween dan uit de basis: ze werd nul omdat we in dit punt reeds maximaal gebruik maken van machine A.

Page 62: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Via de simplex-methode zijn we dus “versprongen” van de oplossing (0,0), op het snijpunt van restricties x >= 0 en y >= 0, naar de oplossing (0,6), op het snijpunt van restricties x >= 0 en 3*x + 5*x <= 30 (machine A).

Door, vertrekkende van onze nieuwe simplextableau, stappen 2 t.e.m. 4 van de methode te herhalen, kunnen we verder “springen” naar een nieuwe (betere?) oplossing.

Page 63: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

y 0 3/5 1 1/5 0 6

sb 0 14/5 0 -2/5 1 8

2e simplex-tableau

2) Kies een variabele om in de basis op te nemen.

Welke zou jij kiezen?

We kiezen variabele x, want die heeft de meest negatieve coëfficiënt in de rij van de objectieve functie.

Page 64: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

y 0 3/5 1 1/5 0 6

sb 0 14/5 0 -2/5 1 8

2e simplex-tableau

3) Bepaal het pivot-element en de pivot-rij.

Welke rij zou jij nemen?

6/(3/5) = 10

8/(14/5) = 40/14

= 2,86

We kiezen de derde rij omdat de waarde van het RL, gedeeld door de coëfficiënt van x in deze rij, hier het laagst is.

Page 65: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 -1/5 0 3/5 0 18

y 0 3/5 1 1/5 0 6

sb 0 14/5 0 -2/5 1 8

2e simplex-tableau

4) Veeg de kolom van de gekozen variabele leeg

Welke transformaties moet je hiervoor doorvoeren?

Rij 1 + (1/14)*Rij 3

(want: -1/5 + (1/14)*(14/5) = 0)

Rij 2 + (-3/14)*Rij 3

(want: 3/5 + (-3/14)*(14/5) = 0)

Rij 3*(5/14)

(want: (14/5)*(5/14) = 1)

Page 66: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 14/5 0 -2/5 1 8

1 -1/5 0 3/5 0 18

Rij 1:

+ (1/14) * Rij 3

(1/14)*

= 1 0 0 0,57 0,07 18,57

Page 67: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 14/5 0 -2/5 1 8

0 3/5 1 1/5 0 6

Rij 2:

+ (-3/14) * Rij 3

(-3/14)*

= 0 0 1 0,29 -0,21 4,29

Page 68: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

0 1 0 -0,14 0,36 2,86

0 14/5 0 -2/5 1 8

Rij 3 * 5/14:

(5/14)*

=

Page 69: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 0 0 0,57 0,07 18,57

y 0 0 1 0,29 -0,21 4,29

x 0 1 0 -0,14 0,36 2,86

3e simplex-tableau

Variable sb heeft plaats moeten maken in de basis voor variabele x. Variabele x en y vormen samen een eenheidsmatrix. Ze maken nu beide deel uit van de basis.

We kunnen de oplossing waarin we ons nu bevinden aflezen in de tableau:

x = 2,86y = 4,29

De doelfunctie heeft een waarde van 18,57.

Page 70: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

Basis W x y sa sb RL

W 1 0 0 0,57 0,07 18,57

y 0 0 1 0,29 -0,21 4,29

x 0 1 0 -0,14 0,36 2,86

Kunnen we deze oplossing nog verbeteren?

2) Kies een variabele om in de basis op te nemen.

Welke zou jij kiezen?

Geen enkele van de coëfficiënten in de rij van de objectieve functie heeft nog een negatieve waarde. We kunnen dus geen verbetering van de waarde van de doelfunctie meer bekomen. We hebben (eindelijk) de optimale oplossing van ons LP-probleem gevonden!

Page 71: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benadering

De gevonden oplossing is: x = 2,86 ; y = 4,29. De waarde van de doelfunctie die met deze oplossing overeen stemt is 18,57.

We moeten dus 2,86 (kan je ook bekijken als 2860) kasten en 4,29 (of 4290) bureaus produceren om een maximale winst van 18,57 (18570) euro te bereiken.

Je kan de winst ook berekenen door de gevonden waarden voor x en y in te vullen in de doelfunctie:2 euro * 2,86 kasten + 3 euro *4,29 bureaus = 18,59 euro (de afwijking met de gevonden W is het gevolg van een afrondingsfout voor de waarden van x en y).

Page 72: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Mathematische benaderingVergelijk met de grafische benadering:

12

11

10

9

8

7

6

5

4

3

2

1

0 1 2 3 4 5 6 7 8 9 10 11 12

y

x

Restrictie machine A:3*x + 5*y = 30

Restrictie machine B:4*x + 2*y = 20

Winstfunctie:W = 2*x + 3*y

x = 2,86 en y = 4,29…dat zou wel eens kunnen kloppen!

Page 73: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Conclusie

Lineare programmering (LP) is een techniek die toelaat om reële optimaliseringsvraagstukken wiskundig te vertalen en aan te pakken. De techniek wordt vaak gebruikt bij het bepalen van productiequota, maar ook bij het oplossen van transportvraagstukken en voorraadbeheer.LP-problemen zijn van nature uit niet eenvoudig om op te lossen. Via het simplex-algoritme, dat gebruikt maakt van Gauss-transformaties op de matrixvorm van het probleem, kan men toch op (relatief) eenvoudige wijze de optimale oplossing construeren. Waneer er slechts 2 of 3 variabelen zijn, kan men deze oplossing ook grafisch verifiëren.

Page 74: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Meer informatie

• http://www.isa.ewi.tudelft.nl/~melissen/Onderwijs/IN4142%20Operations%20Research/sheets/sheets2.doc

Word-bestand over de theoretische onderbouw van de simplex-methode.

• http://www.wisfaq.nl/top.htm?url=http://ingenieur.kahosl.be/personeel/greet.vandenberghe/Datastructuren/LineairProgrammeren.pdf

Presentatie over lineair programmeren met enkele uitgewerkte voorbeelden.

• http://www.wiskundeonline.nl/LP_lees_mij_eerst.htmNederlandse website waarin de basis van lineair programmeren en het gebruik van simplex-tableaus haarfijn wordt uitgelegd.

Page 75: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Begrippen

Bij het opzoeken van informatie zal je veel begrippen tegen komen die niet aan bod kwamen in deze presentatie. Wat volgt zijn enkele beknopte definities van termen die veel gebruikt worden in de literatuur omtrent LP.

Page 76: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Begrippen• Feasible region: de verzameling van de oplossingen die de

beperkingen niet schenden. In feite een andere naam voor “de simplex” dus. Grafisch: het groene vlak uit het voorbeeld.

• Infeasible region: gebied met combinaties die de restricties schenden. Grafisch: de gele vlakken uit het voorbeeld.

• Infeasible problem: wanneer een probleem niet oplosbaar is, bijvoorbeeld omdat de restricties geen overlappend gebied hebben met toegelaten oplossing (bvb. Als x > 5 moet zijn maar tegelijkertijd ook < 3).

• Unbound (onbegrensd): wanneer er onvoldoende beperkingen zijn, of wanneer de simplex niet langs alle zijden begrensd is door restricties. De doelfunctie kan dan onbeperkt toenemen, er is geen optimale oplossing.

Page 77: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Begrippen• Redundancy: wanneer een restrictie onnodig is omdat de simplex reeds in

een vlak ligt dat (omwille van een andere beperking) volledig omhuld ligt door de restrictie (bvb. x < 5 én x < 3: de eerste restrictie is redundant).

• Dualiteit, duaal probleem: elk LP-probleem kan voorgesteld worden door een ander (duaal) probleem met dezelfde oplossing. Bvb., een maximaliseringsvraagstuk van de winst zou je ook kunnen opvatten als een minimaliserings-vraagstuk van de kosten.

• Big M: Voor sommige vraagstukken moet men in de beperkingen een kunstmatige variabele invoeren. Opdat een gevonden oplossing aanvaardbaar zou zijn, moet deze kunstmatige variabele gelijk zijn aan 0. Om dit te garanderen wordt in dat geval in de doelfunctie de kunstmatige variabele vermenigvuldigd met het getal ‘M’, wat “monstrously large number” wil zeggen. Heb je bvb. een doelfunctie max.(x+y) en een variabele q waarvan je wil dat deze 0 wordt, dan kan je de doelfunctie veranderen in max.(x+y-M*q). Doordat je M zo groot veronderstelt, zal je algoritme automatisch neigen naar een oplossing waar q = 0 is. (Voor een voorbeeld, zie http://www.wiskundeonline.nl/LP_Big_M.htm).

Page 78: Inleiding tot Lineair Programmeren Tom De Decker 27/11/2009.

Begrippen

• Schaduwprijs, shadow price: de waarde die de objectieve functie zou stijgen wanneer het rechterlid van één van de beperkingen met één eenheid verhoogd zou worden. In ons voorbeeld: wanneer machine A of B één uur langer gebruikt zou mogen worden, dan zou de verhoging van de winst die hieruit resulteert de schaduwprijs zijn van dat ene machine-uur.