Optimering med hjälp av Lego Mathias Henningsson
Vem är jag? Mathias Henningsson Lärare Optimeringslära 1996-2007 Produktionsekonomi 2008- Bokförfattare Optimeringslära övningsbok (Studentlitteratur) Arbetar även med genomförande, utveckling och kvalitet för bla programmet Industriell ekonomi
Optimering för högstadiet/gymnasium 3 Har under årens lopp presenterat detta på högstadieskolor i Katrineholm, Nyköping och Linköping (Berzeliusskolan) Har även haft presentationen för I1 på universitetet Beroende på målgrupp så anpassar man nivån och hur långt man går i presentationen Blandar matematik, ekonomi och datoranvändning
Optimeringslära, exempel med Lego Bord Stolar vinst/bord: 150 kr vinst/stol: 100 kr Består av 2 stora, 2 små Består av 1 stor, 2 små Tillgång: Stora bitar: 6 st Små bitar: 9 st Mål: Maximera vinsten
Modellformulering Variabeldefinition: Modellformulering x 1 x 2 = antalet tillverkade bord = antalet tillverkade stolar max z =150x 1 +100x 2 (Målfunktion) då 2x 1 + x 2 6 (Stora bitar) 2x 1 + 2x 2 9 (Små bitar) x 1, x 2 0 (Variabelbegränsningar)
Stol Grafisk lösning x=(1 3) z =450 Heltalig lösning, ej optimum x=(1,5 3) z =525 Kontinuerligt optimum x=(2 2) z =500 Heltaligt optimum Bord
Möjlighet att köpa in ytterligare material 1 stor bit Vad vill du som mest betala? 2 stora bitar Vad vill du som mest betala? 1 liten bit Vad vill du som mest betala? 2 små bitar Vad vill du som mest betala?
Stol x=(2 2) z =500 x=(1 4) z =550 Om högerledet är 8 blir vinsten 500 Om högerledet är 9 blir vinsten 525 kontinuerligt 500 heltaligt Om högerledet är 10 blir vinsten 550 Marginalintäkten 25 kr/bit 2x 1 + 2x 2 10 2x 1 + 2x 2 8 Bord
Stol x=(1,5 3) z =525 x=(2 2) z =500 2x 1 + x 2 8 x=(2,5 2) z =575 x=(3 1) z =550 2x 1 + x 2 6 2x 1 + x 2 7 Om högerledet är 6 blir vinsten 525 kontinuerligt 500 heltaligt Om högerledet är 7 blir vinsten 575 kontinuerligt 550 heltaligt Om högerledet är 8 blir vinsten 625 kontinuerligt 600 heltaligt Marginalintäkten 50 kr/bit x=(3,5 1) z =625 x=(4 0) z =600 Bord
Resultat från optimeringslösare Kontinuerligt z = 525 x := Bord 1.5 Stol 3 Diskret (Heltalig) z = 500 x:= Bord = 2 Stol = 2 Tillgångsvillkor := SMÅ 25 STORA 50
Större problem Lägg till produkterna, bänk och pall En bänk består av en liten och en stor bit Försäljningspris 80 kronor En pall består av två små bitar Försäljningspris 50 kronor Sedan tidigare En stol består av en stor och 2 små bitar Försäljningspris 100 kronor Ett bord består av 2 stora och 2 små bitar Försäljningspris 150 kronor I lagret finns 14 stora och 20 små bitar
Modellformulering Variabeldefinition: x 1 = antalet tillverkade bord = antalet tillverkade stolar Modellformulering x 2 x 3 = antalet tillverkade bänkar x 4 = antalet tillverkade pallar max z =150x 1 +100x 2 +80x 3 + 50x 4 då 2x 1 + x 2 + x 3 14 (Stora bitar) 2x 1 + 2x 2 + x 3 + 2x 4 20 x 1, x 2, x 3, x 4 0 (Små bitar)
Summationsform max z = då 4 c i x i i=1 4 a i x i 14 i=1 4 d i x i 20 i=1 x i 0 (Stora bitar) (Små bitar) där x i = antal av respektive möbel i=1,...4 c i = 150 100 80 50 ( ) a i = 2 1 1 0 ( ) d i = 2 2 1 2 ( ) max z =150x 1 +100x 2 +80x 3 + 50x 4 då 2x 1 + x 2 + x 3 14 (Stora bitar) 2x 1 + 2x 2 + x 3 + 2x 4 20 x 1, x 2, x 3, x 4 0 (Små bitar)
Matrisform Varje rad är en legobit Varje kolumn är en möbel Bord Stol max z = c T x då Ax b x 0 där x = antal av respektive möbel x = (????) ( ) c = 150 100 80 50 # A = 2 1 1 0 & % ( $ 2 2 1 2' ( ) b = 14 20
Resultat från optimeringslösare z = 1270 x['stol'] 0 x['bänk'] 14 x['bord'] 0 x['pall'] 3 Precis som vi tänkt ut!!! Men så här enkelt är det kanske inte i verkligheten Använd lösare Hur använder vi lösaren på ett effektivt sätt?
Datafil set PRODUKTER := STOL BÄNK BORD PALL; set BITAR := STORA SMÅ; param Tillgång := STORA 14 SMÅ 20; param Intäkt := STOL 100 BÄNK 80 BORD 150 PALL 50; param Atgang : STORA SMÅ := STOL 1 2 BÄNK 1 1 BORD 2 2 PALL 0 2;
Modell set PRODUKTER; set BITAR; max z =150x 1 +100x 2 +80x 3 + 50x 4 då 2x 1 + x 2 + x 3 14 (Stora bitar) 2x 1 + 2x 2 + x 3 + 2x 4 20 x 1, x 2, x 3, x 4 0 (Små bitar) param Intäkt{PRODUKTER}; param Tillgång{BITAR}; param Atgang{PRODUKTER,BITAR}; var x{produkter} >= 0; maximize z: sum{i in PRODUKTER} Intäkt[i]*x[i]; s.t. Tillgångsvillkor{j in BITAR}: sum{i in PRODUKTER} Atgang[i,j]*x[i]<=Tillgång[j];
Ännu större problem Lägg till ytterligare produkter En storsoffa består av 3 stora, 2 stora-smala Försäljningspris 200 kronor En soffa består av 2 stora, 1 stor-smal Försäljningspris 140 kronor En specialsoffa består av 1 stor, 1 liten, 3 liten-smal Försäljningspris 153 kronor En minipall består av 1 liten och en liten-smal Försäljningspris 40 kronor Ett specialbord består av 2 stora och 2 liten-smal Försäljningspris 132 kronor I lagret finns 102 stora, 100 små, 69 Stor-smala och 83 Liten-smala Nu blir det svårt att lösa utan dator..
Matrisform max z = c T x då Ax b x 0 där x = antal av respektive möbel c = 150 100 80 50 200 140 153 40 132 ( ) # 2 1 1 0 3 2 1 0 2& % ( 2 2 1 2 0 0 1 0 0 A = % ( % 0 0 0 0 2 1 0 1 0( % ( $ 0 0 0 0 0 0 3 1 2' b = 102 100 69 83 ( ) Kolumnen för soffa 2 stora och en stor-smal Samma modell, men med annan indata Enkelt att lösa flera liknande problem med ungefär samma modell
Modell set PRODUKTER; set BITAR; param Intäkt{PRODUKTER}; param Tillgång{BITAR}; param Atgang{PRODUKTER,BITAR}; var x{produkter} >= 0; maximize z: sum{i in PRODUKTER} Intäkt[i]*x[i]; s.t. Tillgångsvillkor{j in BITAR}: sum{i in PRODUKTER} Atgang[i,j]*x[i]<=Tillgång[j];
Datafil set PRODUKTER := STOL BÄNK BORD PALL SPECIALBORD MINIPALL SOFFA STORSOFFA SPECIALSOFFA; set BITAR := STORA SMÅ STOR-SMAL LITEN-SMAL; param Tillgång := STORA 102 SMÅ 100 STOR-SMAL 69 LITEN-SMAL 83; param Intäkt := STOL 100 BÄNK 80 BORD 150 PALL 50 SPECIALBORD 132 MINIPALL 40 SOFFA 140 STORSOFFA 200 SPECIALSOFFA 153 ; param Atgang : STORA SMÅ STOR-SMAL LITEN-SMAL := STOL 1 2 0 0 BÄNK 1 1 0 0 BORD 2 2 0 0 PALL 0 2 0 0 SPECIALBORD 2 0 0 2 MINIPALL 0 1 0 1 STORSOFFA 3 0 2 0 SOFFA 2 0 1 0 SPECIALSOFFA 1 1 0 3;
Resultat från optimeringslösare Vinst = 11221 x['stol'] 0 x['bänk'] 1 x['bord'] 0 x['pall'] 35 x['specialbord'] 0 x['minipall'] 2 x['soffa'] 37 x['storsoffa'] 0 x['specialsoffa'] 27
Hur gör lösaren Fundamentalsatsen Optimum finns i minst en hörnpunkt Simplexmetoden som gås igenom i Optimeringslära, grk Bygger på Gausselimination från Linjär algebra Lägger till nya variabler för att erhålla likhetsvillkor Gå runt bland hörnpunkterna och hitta optimum Antalet hörnpunkter är stort 100 variabler, 50 villkor ger miljarder hörnpunkter Måste göra detta på ett smart sätt Simplex använder målfunktionen och lite andra trix 100 variabler, 50 villkor löses på mindre än 1 sek
www.liu.se www.liu.se