HH/ITE/BN Linjärprogrammering och Mathematica 1 Något om Linjärprogrammering och Mathematica Bertil Nilsson 2015-08-15 kor 1070 6 max 3 får får får får då får kor får kor 7kor 1 6 kor kor 12 7 0 0 1 4 90 2 3 60 8 g1 g2 g3 g4 g5 g6 g7 5 5 580 1 6 40 4 3 2 4 50 4 2 10 6 6 73 20 1 2 x 2.0 1.5 1.0 4 0.5 2 6 0.00 7 30 får 10 8 y 1 2 3 2x x 2y 0 y 0 y y 2z z 6 4 2 z 5 x 2 0 z 3 z 1 0 2 Linjärprogrammering och Mathematica HH/ITE/BN ť Förord På följande sidor presenteras en elementär "streetwise guide" till Linjärprogrammering (LP) med flitig användning av Mathematica. Framställningen är fåordig, fri från pedanteri men i någon mening fullständig. Det man väsentligen behöver veta om begrepp, terminologi, beteckningar och teori för att modellera och lösa problem i framtida kurser och yrkesliv som ingenjör, naturvetare eller lärare klarläggs och typiska exempel ges. ť Inledning och terminologi Dagens samhälle ställer höga krav på effektivitet. Inom näringsliv och industri blir detta speciellt tydligt. Frågor som ''hur utnyttjar vi vår maskinpark mest effektivt?'', ''hur planerar vi våra transporter så att restider och bränsleförbrukning minimeras?'' och ''var bör vi lokalisera nya lagerlokaler?'' är där vanligt förekommande. Modern matematik ger förutsättningar att besvara dessa frågor. Effektiva datorprogram har utvecklats med matematik som bas och tillsammans med allt snabbare och billigare datorer ges idag ovärderligt stöd åt strategi och beslutsfattande. Denna typ av planeringsarbete där man tar hjälp från matematiken benämns operationsanalys. Eftersom det nästan alltid ligger ekonomiska intressen bakom den här typen av verksamhet är det av största vikt att frågeställningarna kan utredas snabbt och effektivt. Det centrala inom operationsanalysen är att någon form av optimeringsberäkning utförs (latin "optimus" - att göra något så bra som möjligt) , det vill säga man hittar den handlingsplan som minimerar eller maximerar en storhet (t.ex. kostnad eller tidsåtgång) givet att de villkor som beskriver processen är uppfyllda. Med handlingsplan menas här t.ex. hur många artiklar av en viss vara som ska produceras eller hur man ska schemalägga flygplan. En annan benämning som används är matematisk programmering (eng. mathematical programming). Gränsdragningen mellan begreppen operationsanalys och matematisk programmering är oskarp. En av många använd skiljelinje är att matematisk programmering innefattar optimering rent allmänt, medan operationsanalys innefattar just olika typer av planeringsarbeten. Innan beräkningsarbetet kan utföras måste den aktuella frågeställningen formuleras i matematiska termer, det vill säga man måste bygga en matematisk modell av den verkliga processen. Ansvaret för detta har ingenjören eller operationsanalytikern. Vilka förenklingar av verkligheten som bör göras i modellen måste bedömas genom att väga önskad noggrannhet i det slutliga resultatet mot beräkningstider för den algoritm som ska användas. Många gånger är det omöjligt att göra en exakt modell, verkligheten är helt enkelt för komplex för att den ska gå att beskriva på ett överskådligt sätt. Man får då ofta nöja sig med en linjär modell, det vill säga en modell där alla förhållanden mellan de ingående storheterna både i det man vill optimera och i de villkor man måste beakta beskrivs med linjära samband. Man har därmed formulerat sin frågeställning som ett linjärprogrammeringsproblem. I många fall är detta fullt tillfredsställande, det vill säga man har formulerat ett problem som både ger tillräcklig noggrannhet och ger rimliga beräkningstider. Men vi börjar med några exempel från vardagslivet. Exempel: Lille Bo fick sin önskeroman i julklapp. När han lagt sig på kvällen beslutar han sig för att läsa i precis 3 timmar. Romanen läser han ut på 2 timmar och så finns ju den fina tegelstenen Analys i en variabel som räcker länge och faktiskt ger 50 högre läsupplevelse jämfört med romanen. Hur skall han fördela timmarna mellan böckerna för att maximera sin läsupplevelse? Lösningsförslag: Antag att han läser tr timmar i romanen och ta timmar i analysboken så har vi från problemtexten att 1. Maximal tillgänglig lästid är 3 timmar 2. Romanen räcker i 2 timmar tr tr ta 3. tr 0, ta 2. 3, 4. Negativ lästid befattar han sig inte med 0. Nu vill Bo maximera sin läsupplevelse. Eftersom denna är proportionell mot lästiderna och Analysboken ger 50% högre läsupplevelse har han att maximera den sammanlagda läsupplevelsen tr 1.5ta . Vi har alltså ett optimeringsproblem. Funktionen f tr , ta tr 1.5ta som skall maximeras kallas mål- eller objektfunktion (eng. objective function). Tiderna tr och ta kallas designvariabler (eng. design variables). Nu kan inte tiderna väljas hur som helst utan begränsas av villkoren 1-4 ovan. Dessa kallas då för bivillkor (eng. constraints). De naturliga bivillkoren 3 och 4 är så kallade positivitetskrav (eller egentligen icke-negativitetskrav) som av historiska skäl inte alltid brukar räknas in bland bivillkoren utan anses självklara. Vi ansluter oss inte till detta. Det typiska för vårt optimeringsproblem är att både objektfunktion och alla bivillkor är linjära. Man talar då om Linjärprogrammering (LP) (eng. linear programming) eller att man har ett LP-problem. Egentligen borde det heta Linjäroptimering men traditioner är inte lätta att bryta. HH/ITE/BN Linjärprogrammering och Mathematica 3 Vi sammanfattar problemet på standardform max tr tr tr då tr ta 1.5ta ta 3 2 0 0 Eftersom bivillkoren är linjära kommer de var och en att dela upp vår värld i två halvor, så kallade halvrymder, en otillåten och en tillåten att vistas i. Snitttet eller skärningen mellan de tillåtna halvorna, det vill säga den mängd som tillhör alla bivillkor, blir ett konvext polygonområde och kallas tillåtet område eller simplex (eng. feasible region). (I en konvex mängd ska alla punkter på sammanbindningslinjen mellan två godtyckliga punkter i mängden också tillhöra mängden. Polygon är en månghörning med räta kanter. Alltså är triangel och rektangel exempel på konvexa polygonområden.) Det är i detta område vi kan och ska söka lösningen! Nu är det bara två (design)variabler i detta exempel så vi kan enkelt återge varje bivillkor grafiskt. Vi ser att världen delas in i en icke tillåten del och en grön tillåten. Den röda gränslinjen får man genom att rita den räta linje som erhålles då olikheten byts mot likhet. ta 4 ta 4 ta 4 ta 4 3 3 3 3 2 2 1 1 1 2 3 4 tr 1 2 tr ď 0 2 1 ta tr Ď 3 1 tr Ď 2 1 1 1 2 3 4 tr 1 1 ta ď 0 1 2 3 4 tr 1 1 2 3 4 tr 1 1 Genom att så till slut ta snittet av dem alla får vi det tillåtna området där vi ska söka lösningen! ta 4 3 2 1 1 1 2 3 4 tr 1 Vi ser att det tillåtna området är begränsat (eng. bounded), det vill säga det omsluts av bivillkorslinjerna. Skärningspunkterna mellan bivillkorslinjerna kallas hörnpunkter (eng. corner points) till det tillåtna området. I samma figur kan vi också rita in objektfunktionen för konstanta värden, så kallade nivåkurvor (eng. level curves). Jämför isobarer på en väderkarta, längs dessa är trycket konstant. Även nivåkurvorna blir på grund av lineariteten räta linjer och parallella med varann. Vi fullbordar så den grafiska betraktelsen av ett LP-problem genom att rita in nivåkurvorna tr 1.5ta 1, tr 1.5ta 2, tr 1.5ta 3, , tr 1.5ta 7. Beteckningen gi är lite av tradition i branchen liksom hi för likhetsbivillkor. max tr tr tr då tr ta 1.5ta ta 3 2 0 0 ta 3.0 1 3 4 2.5 g1 g2 g3 g4 6 2 7 2.0 5 1.5 2 1.0 2 0.5 3 4 Vi återkommer till hur man löser optimeringsproblemet i nästa avsnitt. 1 2 3 3 41 tr 0.5 1.0 1.5 2.0 2.5 3.0 4 Linjärprogrammering och Mathematica HH/ITE/BN Exempel: En cykeltillverkare kan tillverka två olika cykelmodeller, Standard och deLuxe. Han lever dessutom i den lyckliga världen att alla cyklar han tillverkar säljs. Standard ger en nettovinst på 300 kr medan den lyxiga deLuxe ger hela 700 kr. För att överleva måste han åtminstone tillverka en Standard om dagen. Men fler än 5 st orkar han dock inte med. Av samma skäl kan han inte heller tillverka mer än 4 st av den lite mer pyntade modellen deLuxe. Hur som helst så orkar han inte göra fler än 8 cyklar om dagen. Av marknadspolitiska skäl vill han inte heller tillverka fler lyxiga deLuxe än Standard. Hjälp nu honom att planera sin tillverkning så att vinsten maximeras. Standard DeLuxe Lösningsförslag: Antag att han tillverkar x1 st cyklar av modell Standard och x2 st av modell deLuxe om dagen. Vi har då direkt handlarens vinst som objektfunktion f x1 , x2 300x1 700x2 . Bivillkoren hittar vi genom att översätta mening för mening i problemtexten. 1. Minst en Standard om dagen 1. x1 2. Maximalt 5 Standard om dagen 3. Maximalt 4 deLuxe om dagen x1 x2 5. 4. 4. Maximalt 8 cyklar om dagen x1 x2 5. Inte fler deLuxe än Standard x2 x1 . 8. 6, 7. Negativt antal cyklar befattar vi oss inte med, det vill säga positivitetskrav x1 0, x2 0. Därmed kan vi formulera LP-problemet på standardform, en objektfunktion och 7 bivillkor. Bara linjära samband som sig bör. Läsaren uppmanas på det bestämdaste att verifiera bivillkorslinjer, det tillåtna området och nivåkurvor i figuren till höger! x2 56 max 300x1 700x2 x1 1 g1 g2 x1 5 g3 x2 4 då x1 x2 8 g4 g5 x2 x1 g6 x1 0 x2 0 g7 1 4000 4 000 43 5 3 2 1 3 4 3 2 1000 6 1 1 675 200 7 1 2 3 4 75 x1 5 Vi återkommer till hur man löser optimeringsproblemet i nästa avsnitt. Exempel: Stina älskar fåglar. Hon har sju exemplar av Rupicola rupicola guldtupp i sitt vardagsrum. Hon föder upp dem på två sorters fröblandningar BasFrö och BusFrö vilka kostar 8 respektive 12 kr hg. Stina vet att speciellt tre typer av vitaminer V1 , V2 och V3 är viktiga för fåglarna och BasFrö BusFrö V1 4 1 V2 3 2 V3 1 3 att varje fågel behöver dagligen 4, 6 respektive 3 enheter av dessa. Fröblandningarnas innehåll av de tre vitaminerna i enheter per hg framgår av tabellen. Formulera det LP–problem som bestämmer hur många hg av varje fröblandning Stina ska köpa in dagligen så alla fåglarna får sitt vitaminbehov tillgodosett och inköpskostnaden minimeras. Gör en grafisk representation med bivillkor och det tillåtna området. Lösningsförslag: Antag att hon behöver köpa in BasFrö hg av BasFrö-blandningen och BusFrö hg av BusFrö-blandningen. Vi har då direkt Stinas kostnad som objektfunktion f BasFrö, BusFrö 8BasFrö 12 Busfrö. Totalt har Stina sju hungriga näbbar att mätta, så bivillkoren möblerar vi genom att kombinera vitamintabellen med fåglarnas dagsbehov angivna i problemtexten. Läsaren uppmanas på det bestämdaste att verifiera formuleringen samt bivillkorslinjer, det tillåtna området och nivåkurvor i figuren till höger! HH/ITE/BN Linjärprogrammering och Mathematica BusFrö 20 4 2 1 225 min 8 BasFrö 4 BasFrö 3 BasFrö då BasFrö BasFrö BusFrö 12 BusFrö BusFrö 7 4 2 BusFrö 7 6 3 BusFrö 7 3 0 0 5 325 375 2 15175 g1 g2 g3 g4 g5 275 10 3 5 4 100 50 5 4 5 1 10 2 132 15 35 BasFrö 20 Observera att vi här har ett minimeringsproblem och att det tillåtna området är obegränsat (eng. unbounded). Vi återkommer till hur man löser optimeringsproblemet i nästa avsnitt. ť Lite teori och lösningsmetoder Vi ser att exemplen i föregående avsnitt är specialfall av en standardiserad LP-formulering (eng. standard LP-form) med n designvariabler och m bivillkor. min f x1 , x2 , , xn a11 x1 a12 x2 a21 x1 a22 x2 då am1 x1 am2 x2 c1 x1 c2 x2 a1n xn b1 a2n xn b2 amn xn cn xn min f då bm där f är objektfunktionen och bivillkoren. Man brukar kalla för objektfunktionskoefficienterna (eng. vector of objective coefficients), för bivillkorsmatrisen (eng. constraint matrix) och för högerledet (eng. right-hand side of constraints). Formuleringen rymmer även maximering, ty max f min f . På samma sätt kan -olikhet införas genom att motsvarande rad multipliceras med 1 på båda sidor om med resultat att olikheten då byter riktning. Slutligen kan likhetsbivillkor behandlas genom att denna rad införes två gånger, en gång med och en med . I seriösa datorprogram för LP-lösare ska man naturligtvis inte behöva hålla på med sådant manipulerande. En punkt som uppfyller bivillkoren kallas en tillåten lösning (eng. feasible solution), eftersom den ligger i det tillåtna området. Vi söker nu den optimala lösningen (eng. optimal solution). Vi har tidigare sett att det tillåtna området kan vara begränsat, obegränsat eller rent av tomt (eng. empty) om bivillkoren är helt motstridiga så att snittet är tomt. Då saknar naturligtvis LP-problemet lösning. Vi ska argumentera i 2D för att om problemet har en optimal lösning så inträffar detta alltid i en hörnpunkt som då kallas optimal punkt (eng. optimal point or extreme point) och objektfunktionen antar där optimalt värde (eng. optimal value). De bivillkor som möts i optimala punkten kallas aktiva (eng. active constraints) och ett bivillkor som inte medverkar till att bygga upp det tillåtna området kallas överflödigt eller redundant (eng. redundant). För ändamålet riggar vi upp ett begränsat område och några nivåkurvor. Mot bakgrund av all linearitet förstår vi att när vi ökar eller minskar objektfunktionens värde så kommer den "sista" nivåkurvan i det tillåtna området att lämna detta i en hörnpunkt. Dessa två fall är indikerade i figuren nedan till vänster med en blå och en röd boll och motsvarar alltså optimal punkt vid en minimering respektive maximering av objektfunktionen. Enda gången detta inte gäller är då ett bivillkor gränsande till "optimal punkt" är parallell med nivåkurvorna, se figur nedan till höger. Då har vi två hörn som kandidater till optimal punkt! Dessa är indikerade med röda bollar. Eftersom innebörden av en nivåkurva är att objektfunktionens värde är konstant längs en sådan kan vi som optimal punkt då välja vilken som helst av de två hörnpunkterna eller någon godtycklig punkt på det mellanliggande stycket av randen, markerad fet mörkgrön. Så grundregeln håller, optimal punkt hittar man alltid i ett hörn till det tillåtna området! x2 x2 x1 x1 6 Linjärprogrammering och Mathematica HH/ITE/BN En mera rigorös övertygelse kan formuleras så här: Antag att det finns en punkt som är inre punkt eller randpunkt till det tillåtna , q för alla q hörnpunkter. Eftersom det tillåtna området är området och som minimerar , det vill säga i , i 1, q q konvext kan skrivas som en linjärkombination av hörnpunkterna i 1Αi i , där i 1Αi 1. Då får vi q i 1Α i i q i 1Αi q i 1Α i i q i 1Αi vilket är en motsägelse. Det finns alltså inget bättre än hörnpunkter! I figurerna ovan har vi även ritat in gradienten till objekfunktionen. Detta är en vektor som är vinkelrät mot nivåkurvorna och pekar ut i vilken riktning nivåkurvorna ökar. Lägg märke till att det inte är självklart att objektfunktionen ökar med ökande värde på designvariablerna, den kan lika gärna öka när man närmar sig origo, t.ex. f x1 , x2 x1 x2 . Gradienten brukar skrivas på två sätt och definieras av den andra likheten med hjälp av partiella derivator grad f def f f f x1 , f x2 , , f xn c1 , c2 , , cn På grund av lineariteten kan den alltså enkelt avläsas som koefficienterna i objektfunktionen. Exempel: Bestäm några gradienter f x1 , x2 2x1 f x1 , x2 x1 f tr , ta f x1 , x2 tr 3x2 4x2 f 1.5ta f 300x1 f f 700x2 f f f f f x1 f x1 f tr , , , f x1 , f x2 f x2 f ta 2, 3 1, 4 f x2 1, 1.5 Exemplet ovan med lille Bo 300, 700 Exemplet ovan med cykeltillverkaren Mot bakgrund av lineariteten hos såväl objektfunktion som bivillkor kan vi sammanfatta. Om det tillåtna området till ett LP-problem är icke-tomt och begränsat så antar objektfunktionen både ett maximum och ett minimum och detta antas i hörn i det tillåtna området. Ett sådant hörn kallas optimal punkt och objektfunktionen antar optimalt värde där. Om däremot det tillåtna området är obegränsat finns fortfarande möjlighhet att objektfunktionen antar ett maximum eller ett minimum, om så görs detta också i ett hörn, optimal punkt. Avslutningsvis saknar LP-problemet lösning om det tillåtna området är tomt. Detta ger oss en enkel strategi för att lösa ett LP-problem! Inspektera alla hörnpunkter till det tillåtna området och beräkna objektfunktionens värde där, sedan är det bara att bland dessa välja den optimala lösningen. Vi provar på två av de LP-problem vi redan stiftat bekantskap med. Exempel: Lille Bo igen. Lös LP-problemet! Lösningsförslag: Vi tar vid där vi slutade. max tr tr tr då tr ta 1.5ta ta 3 2 0 0 ta 3.0 1 3 4 2.5 g1 g2 g3 g4 6 2 7 2.0 5 1.5 2 1.0 2 0.5 3 4 1 2 3 3 41 tr 0.5 1.0 1.5 2.0 2.5 3.0 Vi går moturs runt det tillåtna området och besöker hörnpunkterna. Bestäm designvariablernas värde där genom att lösa ett ekvationssystem som erhålles genom att ersätta olikhet med likhet i de bivillkor som möts i hörnpunkten. Slutligen beräknas objektfunktionens värde i hörnet. Uppdatera och bokför under resans gång den hörnpunkt som maximerar objektfunktionen. HH/ITE/BN Linjärprogrammering och Mathematica Skärning mellan g1 och g2 Skärning mellan g1 och g3 Skärning mellan g3 och g4 Skärning mellan g2 och g4 tr tr tr tr tr ta tr ta Färdig! Vi har hittat optimal punkt tr , ta ta 2 ta 0 0 0 2 0 3 3 g1 g2 g1 g3 g3 g4 g2 g4 7 tr , ta 2, 1 f 2, 1 2 1.5 1 3.5 tr , ta 0, 3 f 0, 3 0 1.5 3 4.5 ... Max tr , ta 0, 0 f 0, 0 0 1.5 0 0 tr , ta 2, 0 f 2, 0 2 1.5 0 2 0, 3 ! Lille Bo ska med andra ord ägna all tillgänglig lästid åt Analysboken Detta kunde vi enkelt insett genom att inspektera den grafiska representationen ovan. Om man har många bivillkor kan man hålla nere handarbetet väsentligt genom att först göra ett visuellt studium av nivåkurvor och bivillkor i den grafiska representation. Då brukar det bli få hörnpunkter att besöka. Men hur som helst Vid två designvariabler och handräkning måste man alltid börja med att göra en grafisk representation! Detta ger nödvändig överblick för att kunna genomföra lösningen! Exempel: Stinas guldtuppar igen. Lös LP-problemet! Lösningsförslag: Vi tar vid där vi slutade. BusFrö 20 4 2 1 225 min 8 BasFrö 4 BasFrö 3 BasFrö då BasFrö BasFrö BusFrö 12 BusFrö BusFrö 7 4 2 BusFrö 7 6 3 BusFrö 7 3 0 0 325 375 2 g1 g2 g3 g4 g5 15175 275 10 3 5 4 100 50 5 4 5 1 10 2 132 15 35 BasFrö 20 Vis av erfarenheterna från föregående exempel börjar vi med att studera den grafiska representationen. Eftersom vi söker minimum av objektfunktionen räcker det att besöka hörnet som är skärningspunkt mellan bivillkoren g2 och g3 . 3 BasFrö 2 BusFrö 7 6 BasFrö 3 BusFrö 7 3 g2 g3 BasFrö, BusFrö 12, 3 f 12, 3 8 12 12 3 132 Min Färdig! Vi har hittat optimal punkt BasFrö, BusFrö 12, 3 ! Nu vet Stina hur många hg av varje fröblandning som ska inhandlas för att minimera kostnaden. Vi kan i figuren också notera att g1 inte finns med som aktivt bivillkor vid optimal punkt med följd att vitamin V1 serveras i överflöd. Lägg märke till att vi har ett obegränsat tillåtet området, objektfunktionen har inget maximum utan inköpen kan bli hur dyra som helst! Till slut kommer då både Stina och hennes guldtuppar att drunkna i frö! Då antalet designvariabler och bivillkor ökar är handräkning utesluten. Vi får koncentrera oss på LP-formuleringen, vilket kan vara nog så besvärligt, och överlämna själva lösandet till ett datorprogram. Det finns flera sådana och de används mycket flitigt i diverse tillämpningar i industrin. Att lösa LP-problem sköt fart under andra världskriget tillsammans med att den första datorn såg dagens ljus, och den metod som är vanligast idag och härstammar från den tiden är Simplexmetoden. Men det finns också andra moderna metoder som är snabbare på framför allt riktigt stora problem, se vidare under Lite historik i ett senare avsnitt. Vi ska inte alls fördjupa oss i hur Simplexmetoden arbetar, det faller utanför ramen för denna kurs. Det enda man behöver känna till är att den är robust och utnyttjar den egenskap vi nämnt, nämligen att optimal punkt infaller i ett hörn. Simplexmetoden väljer på ett fiffigt sätt ut vilket nytt hörn den ska hoppa till så att objektfunktionen hela tiden minskar/ökar, den besöker alltså långt ifrån alla hörn i det tillåtna området. I Mathematica finns de generella optimeringsfunktionerna Maximize[objektfkn,bivillkor,designvars], NMaximize[], Minimize[]och NMinimize[], där de utan N på sig ger analytiska lösningar. Dessa funktioner klarar av att hitta globalt optimum för godtycklig objektfunktion under godtyckliga bivillkor. De har inga förutfattade meningar om värdet på designvariablerna, så till exempel tradionella positivitetskrav måste anges explicit i bivillkoren där olika typer av olikheter , och = kan blandas friskt. Speciellt känner de igen och löser LP-problem effektivt. I numeriska sammanhang skiljer man vanligtvis inte på om 8 Linjärprogrammering och Mathematica HH/ITE/BN man använder stränga olikheter eller ej, så istället för de lite mer "omständiga" och från palette ( <= och >= direkt på tangentbordet) kan man tryggt använda de lite mer direktåtkomliga < och > på tangentbordet. Naturligtvis klarar funktionerna även av att hantera det ofta mycket viktiga kravet på enbart heltalslösningar för några eller alla designvariabler. Detta läggs enkelt till bland bivillkoren som {designvariabler} Integers. Att ha krav på heltalslösningar är naturligt eftersom LP-formuleringar ofta handlar om frågeställningar kring kostnad och resurstilldelning, då är t.ex. antal personer, maskiner eller bilar vanliga designvariabler. Att vid stora LP-problem helt enkelt avrunda designvariabler till heltal är en mycket riskabel operation, vanligtvis brukar man då hamna i konflikt med ett eller flera bivillkor. Om vi har standard LP-formulering, det vill säga objektfunktionen är given som en vektor och bivillkoren på matrisform , finns även den lite mer ortodoxa LinearProgramming[c,A,b]. Men, huvudalternativet blir nästan alltid de fyra tidigare nämnda, eftersom olika typer av olikheter , och = kan blandas friskt och att man direkt kan mata in sin LP-formulering från modelleringen utan riskabla omlastningar av termer för att möblera och så att det passar LinearProgramming. Att använda de i Mathematica inbyggda LP-lösarna är mycket enkelt. Strängt taget gäller det bara att skriva av sin formulering rätt. Som vanligt tillåts även en sekvens av olikheter, t.ex. x1 0 x1 1 kan skrivas 0 x1 1. Vi börjar med lille Bo och ser att svaret kommer ut på självdokumenterande form, {objektfkn,designvariabler} i optimal punkt, precis som vi är vana vid från FindMaximum och FindMinimum. Se tidigare bilder över situationerna. Maximize tr 1.5 ta , tr ta 3, tr 2, tr 0, ta 0 , tr , ta 4.5, tr 0., ta 3. Sedan Stina och hennes sju guldtuppar. AntalGuldtuppar 7; Minimize 8 BasFrö 12 BusFrö, 4 BasFrö 1 BusFrö 3 BasFrö 2 BusFrö 1 BasFrö 3 BusFrö BasFrö 0, BasFrö , BasFrö, BusFrö 132, BasFrö 12, BusFrö AntalGuldtuppar 4, AntalGuldtuppar 6, AntalGuldtuppar 3, 0 3 Så nu äntligen över till cykeltillverkaren som väntar otåligt Maximize 300 x1 700 x2 , x1 1, x1 5, x2 4000, x1 4, x2 4, x2 x1 , x1 x2 8, x1 0, x2 0 , x1 , x2 4 Han ska alltså tillverka 4 cyklar av varje modell. Vinsten blir då 4000 kr om dagen! Här fick vi heltalslösning som vi önskade, men om vi ändrar lite på villkoret x1 x2 8 till x1 x2 7 får vi inte detta längre. x2 56 5 1 4 000 43 4000 3 1 3 52 2 Maximize 300 x1 7 3500, x1 2 700 x2 , x1 7 , x2 2 1 4 746 51 1 1, x1 2000 1000 5, x2 2 3 4, x2 4 x1 , x1 73 x1 5 x2 7, x1 0, x2 0 , x1 , x2 HH/ITE/BN Linjärprogrammering och Mathematica 9 I allmänhet är det inte så enkelt som att "avrunda". Problemet med halva cyklar avhjälps istället genom att införa heltalskrav bland bivillkoren. Vi tvingas nu röra oss i det begränsade rummet av heltal istället för reella tal. I figuren nedan är de möjliga heltalslösningarna markerade med mörkgröna prickar. Vi ser att optimal punkt inte sammanfaller med ett hörn. Naturligtvis hittar Mathematica den optimala heltalslösningen. x2 56 4 1 5 000 43 4000 3 1 3 42 2 Maximize 300 x1 700 x2 , x1 1, x1 5, x2 3300, x1 4, x2 1 4 756 5 1 1 4, x2 200 1000 x1 , x1 2 x2 3 73 x1 5 4 7, x1 0, x2 0, x1 , x2 Integers , x1 , x2 3 Avslutningsvis kan nämnas att i en fortsatt analys är det bland annat av intresse att utreda frågeställningar av typen Vad händer med lösningen då objektfunktionens koefficienter varieras? Vad händer med lösningen då bivillkorsmatrisens koefficienter varieras? Vad händer med lösningen då högerledets koefficienter varieras? Vad händer med lösningen då man lägger till eller tar bort bivillkor? Vad händer med lösningen då designvariabler läggs till eller tas bort? Detta brukar kallas störningsanalys eller känslighetsanalys och är mycket viktigt. För att till exempel öka vinsten utan att höja priserna måste de aktiva bivillkoren modifieras vilket oftast är behäftat med kostnader. En studie av gradienter i optimala punkten ger en indikation på om det är möjligt och hur man då ska agera för att göra den mest ekonomiskt gynsamma förändringen av produktionsapparaten. Det finns en omfattande teori kring detta och i en mer omfattande framställning introduceras begrepp som duala problemet och skuggpriser. Eftersom LP-lösarna i Mathematica är så lättanvända kan en enkel och kanske praktiskt tillräcklig känslighetsanalys helt enkelt bestå av att man "leker" lite med koefficienterna och kör igen. Som exempel på detta låter vi i följande sekvens studera vad som händer i ursprungssituationen om priset på deLuxe sänks. Först dagens förutsättningar och prissättning i repris. x2 56 4 1 3000 43 5 4000 3 2 1 3 44 3 2 1 6 2000 1000 756 Maximize 300 x1 700 x2 , x1 1, x1 5, x2 4000, x1 4, x2 4, x2 71 1 x1 , x1 2 x2 3 8, x1 4 0, x2 75 x1 5 0, x1 , x2 Integers , x1 , x2 4 Om priset på deLuxe sänks till 300 kr kommer naturligtvis vinsten att minska och objektfunktionens nivåkurvor att ändra lutning för att bli parallella med bivillkoret x1 x2 8. Vi kan då som optimal punkt välja vilken som helst av de två aktuella hörnpunkterna 4, 4 och 5, 3 . 10 Linjärprogrammering och Mathematica HH/ITE/BN x2 56 1500 42500 1 5 43 3 2 1 3 1000 3 44 2 2000 Maximize 300 x1 300 x2 , x1 1, x1 5, x2 2400, x1 4, x2 1 6 756 71 1 4, x2 500 2 x1 , x1 3 x2 75 x1 5 4 8, x1 0, x2 0, x1 , x2 Integers , x1 , x2 4 Om så priset på deLuxe sänks ytterligare ner till 200 kr kommer optimal produktion att ändras från 4, 4 till 5, 3 och vinsten till 2100 kr. x2 56 1000 4 1 5 43 4 3 2 2000 3 41 3 500 2 Maximize 300 x1 200 x2 , x1 1, x1 5, x2 2100, x1 5, x2 1 6 756 71 1 2 x1 , x1 x2 4, x2 3 150 75 x1 5 4 8, x1 0, x2 0, x1 , x2 Integers , x1 , x2 3 ť En liten enkel grafisk LP-lösare i 2D Vi ska här meka ihop en enkel funktion som klarar av att göra en minimalistisk grafisk representation och lösning. Som testexempel vid framtagningen tar vi följande enkla LP-problem x2 222 13 1010 max 2x1 x2 x1 2x2 3x1 x2 då x1 0 x2 0 14 88 20 30 g1 g2 g3 g4 28 6 18 44 30 26 1 241 12 2 2 43 obj 2 x1 x2; bv x1 2 x2 lc 2 Range 20 xr x1, 0.1, yr x2, 0.1, 20, 3 x1 ; 10.1 ; 10.1 ; x2 30, x1 0, x2 2 6 4 6 16 8 4 x1 2 20 10 0 ; Nu över till den grafiska representationen som även får bli vår lilla LP-lösare. Vi börjar med det tillåtna området. HH/ITE/BN Linjärprogrammering och Mathematica RegionPlot And bv, Evaluate xr , Evaluate yr , PlotStyle Frame False, Axes True 11 Opacity 1 , Green , 10 8 6 4 2 2 4 6 8 10 Sedan bivillkorslinjerna ContourPlot Evaluate . Head Equal & bv , Evaluate xr , Evaluate yr , ContourStyle Thickness 0.01 , Red , Frame False, Axes True 10 8 6 4 2 2 4 6 8 10 Slutligen nivåkurvorna. ContourPlot Evaluate objfkn & lc , Evaluate xr , Evaluate yr , ContourStyle Blue 10 8 6 4 2 0 0 2 4 6 8 10 Nu är det bara att paketera det hela i en funktion LPSolve som gör en grafisk presentation jämte en tabell med hörnpunkter sorterade efter fallande värde på objektfunktionen. Varje rad innehåller de inblandade aktiva bivillkoren, hörnpunktens koordinater (designparametrarna) samt objektfunktionens värde. Att sätta etiketter på de röda och blå linjerna samt gröna nummer på hörnpunkterna kräver lite Mathematicapornografi utöver det vanliga och överlämnas till den intresserade läsaren att fördjupa sig i. LPSolve obj , bv , lc , xr , yr , xg : Module g1, g2 , g3, g4, bx, th , g1 RegionPlot And bv, Evaluate xr , Evaluate yr , PlotStyle Green, Frame False ; Do AppendTo g2, ContourPlot Evaluate bv i, 1 bv i, 2 , Evaluate xr , Evaluate yr , Contours 0 , ContourStyle Thickness 0.01 , Red , ContourShading False, ContourLabels Red, Text i, 1, 2 , Background White & ; Do bx Reduce Rationalize Flatten bv i, 1 bv i, 2 , bv j, 1 bv j, 2 , bv ; If Head bx And, th Join th, i, j , xr 1 , yr 1 , obj . Solve bx , j, i 1, Length bv , i, Length bv ; g3 ContourPlot obj, Evaluate xr , Evaluate yr , Contours lc, ContourShading None, ContourStyle Blue, ContourLabels Blue, Text 3, 1, 2 , Background White & th Join Range Length th , Sort th, 1 3 2 3 & ; g4 Graphics Darker Green , Text 1 , 3 , Background White & th ; DisplayForm GridBox Show g1, g2, g3, g4, Graphics xg . Opacity Opacity 1 , Method "AxesInFront" False , Axes True, AxesLabel xr 1 , yr 1 , MatrixForm th, TableHeadings None, "nr", "biv", "punkt", "objfkn" Vi provar på vårt modellproblem. ; 12 Linjärprogrammering och Mathematica HH/ITE/BN LPSolve obj, bv, lc, xr, yr x2 22 2 13 1010 30 26 14 88 28 6 1 18 44 nr 1 2 3 4 241 12 biv 1, 2 2, 4 1, 3 3, 4 punkt objfkn 8, 6 22 10, 0 20 0, 10 10 0, 0 0 2 2 43 6 2 4 4 x1 2 20 10 16 8 6 Vi ser i tabellen att hörn nr 1 är optimal hörnpunkt. Inblandade bivillkor är 1, 2 , koordinaterna (designparametrarna) är 8, 6 och objektfunktionens värde är 22. Lille Bo vill också vara med. LPSolve tr 1.5 ta , tr ta 3, tr 2, tr 0, ta 0 , 0.2 Range 0, 10 , tr , 0.1, 3 , ta , 0.1, 3 ta 3.0 13 4.2 6.2 2 7.2 2.5 2.0 nr 1 2 3 4 5.2 2.2 1.5 1.0 2 biv 1, 3 1, 2 2, 4 3, 4 punkt objfkn 0, 3 4.5 2, 1 3.5 2, 0 2. 0, 0 0. 0.5 443 0.2 0.5 1.0 1.2 1.5 3 2 2.0 2.5 3.2 41 tr 3.0 ť Blandade exempel för resten Exempel: En skräddare kan tillverka kostymer och klänningar. Varje kostym fordrar 1 m2 bomullstyg och 3 m2 ylletyg och till varje klänning åtgår 2 m2 av varje tygslag. Skräddaren har tillgång till 80 m2 bomullstyg och 120 m2 ylletyg. Hur många kostymer och klänningar skall han sy om varje kostym och klänning kan säljas för 300 kr och han vill maximera inkomsten? Lösningsförslag: Om vi låter Skräddaren sy xm st kostymer och xg st klänningar får vi efter översättning av problemtexten följande LP-problem och tillhörande lösning. Formuleringen görs enkelt läsbar samtidigt som vi anropar vår egen LP-snutt. Det är lämpligt att räkna vinsten i 100-tals kronor. 300 LPSolve x m xg , x m 2xg 80, 3xm 2xg 120, xm 100 20 Range 20 , xm , 0.1, 50 , xg , 0.1, 50 xg 50 3 1602 240 280 200 40 31 260 100 30 140 1 220 2060 1 180 10 20 43 40 10 20 80 30 120 2 40 4 xm 50 nr 1 2 3 4 biv 1, 2 2, 4 1, 3 3, 4 punkt 20, 30 40, 0 0, 40 0, 0 objfkn 150 120 120 0 0, xg 0 , HH/ITE/BN Linjärprogrammering och Mathematica 13 Efter att tittat i figuren och tabellen förstår vi att optimal punkt är nr 1 och g1 och g2 är aktiva bivillkor vid optimalt hörn 20, 30 . Vinsten är 150 100 kr. Mathematica håller med 300 Maximize x m xg , x m 2xg 80, 3xm 2xg 120, xm 0, xg 0 , x m , xg 100 150, xm 20, xg 30 Exempel: Fredrik har 10 kkr över att investera i aktier. Han inbillar sig att bankens analytiker har koll på aktieutveckling över tiden och gör därför ett besök. Rådet blir att investera i två aktier, en riskfylld A med 10 avkastning årligen och en lugnare B med 7 avkastning årligen. Men analytikern nöjer sig inte med detta utan tycker att fördelningen ska vara högst 6000 kr i A, minst 2000 kr i B och absolut minst lika mycket i aktie A som B. Hur ska han handla för att maximera avkastningen? Lösningsförslag: Om vi låter Fredrik köpa aktier A för a kkr och aktier B för b kkr får vi efter översättning av problemtexten följande LP-problem och lösning. LPSolve 0.1 a 0.07 b, a b 10, a 6, b 2, a b, a 0.1 Range 20 , a, 0.1, 7 , b, 0.1, 6 b 60.4 5 0.7 0, b 0 , 42 1.1 1 0.9 2 5 1 4 nr 1 2 3 4 1 30.2 0.5 23 4 0.8 1 3 3 0.6 26 6 7 biv 1, 2 1, 4 2, 3 3, 4 punkt objfkn 6, 4 0.88 5, 5 0.85 6, 2 0.74 2, 2 0.34 1 5 64 0.1 1 2 0.3 3 4 5 a Efter att tittat i figuren och tabellen förstår vi att optimal punkt är nr 1 och g1 och g2 är aktiva bivillkor vid optimalt hörn 6, 4 . Mathematica håller med Maximize 0.1 a 0.88, a 6., b 0.07 b, a b 10, a 6, b 2, a b, a 0, b 0 , a, b 4. Exempel: Hos en handelsträdgård kan man köpa konstgödsel av två slag, A och B. I tabellen anges deras pris kr kg och det procentuella innehållet av kväve N , fosfor P och kalium K samt de mängder i kg av de tre ämnena som, enligt jordanalys, minst behöver tillföras din golfbana. Formulera och lös inköps– problemet så att kostnaden minimeras. N P K Pris A 19 7 15 1.75 B 21 5 14 1.50 Behov 750 250 600 Lösningsförslag: Låt x A och xB vara mängderna i kg av A respektive B som ska inhandlas. Ur tabell med procent, priser och behov får vi följande LP-formulering och dess lösning. LPSolve1.75 xA 19 1.50 xB , 21 xA 100 7 xB 100 750, 5 xA 100 15 xB 100 250, 14 xA 100 xB 100 1000 Range 20 , xA , 1000, 3000 , xB , 1000, 3000 600, xA 0, xB 0, 14 Linjärprogrammering och Mathematica xB 3000 3 2 HH/ITE/BN 9000 6000 1 2500 8000 5000 2000 3 1500 nr 1 2 biv 2, 4 3, 5 3 2, 3 punkt 0, 5000 4000, 0 50 000 23 objfkn 7500. 7000. 45 000 , 23 6739.13 7000 4000 1500 2000 12 3 x A 3000 2500 Efter att tittat i figuren och tabellen förstår vi att optimal punkt är nr 3 och g2 och g3 är aktiva bivillkor. Mathematica håller med om inköp och kostnad Minimize1.75 xA 1.50 xB , 19 21 100 6739.13, x A 7 xA xB 100 2173.91, xB 5 15 xA 750, 100 xB 14 xA 250, 100 100 xB 600, xA 0, xB 0, xA , xB 100 1956.52 En sann miljövän noterar att g1 är redundant så det kommer att ske en övergödning av kväve. Avslutningsvis har vi om vi inte får bryta förpackningar utan måste köpa hela kg. 175 15 xA 100 19 xA 100 xB , Minimize 10 21 7 5 750, xB 100 15 xA 100 250, xB 100 x A , xB Integers, xA , xB 2173, xB 1958 14 xA 100 xB 600, xA 0, xB 0, 100 26 959 , xA 4 Exempel: BagarBertas konditori har koncentrerat sig på två goda kakor; bondkakor och vaniljhorn. De helt dominerande ingredienserna är mjöl, socker och smör. Till 60 bondkakor åtgår 450 g mjöl, 350 g socker och 200 g smör. Motsvarande siffror för 75 vaniljhorn är 400 g, 150 g respektive 125 g. Formulera och lös LP–problemet som maximerar Bertas vinst under förutsättning att hon har tillgång till 20 kg mjöl, 13 kg socker och 12 kg smör samt att hon säljer allt hon bakar med nettovinsten 6 kr för en bondkaka och 3 kr för ett vaniljhorn. Vilken ingrediens finns i överflöd? Lösningsförslag: Om vi låter Berta baka xb st bondkakor och xv st vaniljhorn får vi efter överssättning av problemtexten följande LP-problem med lösning. Kan vara lämpligt att räkna vinsten i 1000-tals kronor. 6 xb 3 xv LPSolve , 1000 450 xb 60 400 350 20 000, xv 75 3 20 200 13 000, xv 60 5 Range 20 , xb , xv 4000 4 15 2 1 150 xb 75 1, 4000 , xv , 60 1, 4000 35 3000 30 2000 nr 1 5 1000 45 1 25 10 2 1 3 5 xb 1000 2000 3000 4000 biv 1, 2 punkt 52 800 29 , 34 500 29 objfkn 4203 290 125 xb xv 75 12 000, xb 0, xv 0, HH/ITE/BN Linjärprogrammering och Mathematica 15 Vi ser att optimal punkt är nr 1 och g1 och g2 är aktiva bivillkor. Bivillkor g3 är redundant och indikerar att smör finns i överflöd. 52 800 , 29 Men Berta vill ju inte sälja "söndriga" kakor xb 34 500 29 xv eller xb 1820.69, xv 1189.66 , så lite skarpare med heltalskrav har vi slutligen lösningen på hennes funderingar, i rena kronor. Maximize6 xb 3 xv , 450 400 60 xv 1819, xv 150 xb 20 000, 75 x b , xv 14 490, xb 350 xb 60 200 xv 75 125 xb 13 000, 60 xv 12 000, xb 0, xv 0, 75 Integers, xb , xv 1192 Exempel: Widget & Son tillverkar dekalerna Sad Smiley och Happy Smiley. Vinsten per låda är 3 respektive 7 P engar . För att personalen inte skall bli för glad måste den åtminstone tillverka en låda med Sad Smiley om dagen, men inte fler än sex för att undvika depression. Av samma skäl krävs att det tillverkas fler lådor Happy Smiley än Sad Smiley. För att begränsa glädjespridningen har man även satt ett tak på sju lådor Happy Smiley om dagen. Hur som helst orkar man bara tillverka tolv lådor med dekaler om dagen. Hjälp Widget & Son med produktionsplaneringen så att vinsten maximeras under förutsättning att personalen håller sig frisk. Vad blir då vinsten? Lösningsförslag: Låt xs vara antalet lådor med Sad Smiley och xh antalet lådor med Happy Smiley. Å så här blir dé LPSolve 3 xs 7 xh , xs 1, xs 6, xs xh , xs xh 12, xh 10 Range 10 , xs , 0.1, 10 , xh , 0.1, 10 xh 1070 6 1 4 2 90 60 8 5 5 640 580 1 4 3 2 50 4 2 2 20 2 6 4 0, xh 0 , 3 4 106 6 73 1 7, xs 8 nr 1 2 3 4 5 6 biv 4, 5 3, 4 2, 4 2, 3 1, 5 1, 3 punkt objfkn 5, 7 64 6, 6 60 6, 6 60 6, 6 60 1, 7 52 1, 1 10 730 xs 10 Slutligen låter vi Mathematica få sista ordet Maximize 3 xs 64, xs 5, xh 7 xh , xs 1, xs 6, xs xh , xs Lösningsförslag: Låt xij Array x, 4, 3 1, 1 2, 1 3, 1 4, 1 x x x x 1, 2 2, 2 3, 2 4, 2 7, xs 0, xh 0 , xs , xh x x x x nät ryssja långrev ålhålan 1 2 4 gäddviken 4 3 1 gösrännan 4 2 1 abborrgrundet 3 2 1 x i, j vara antalet redskap av typ j som ska placeras på fångstplats i och Η effiktivitetsmatrisen enligt tabell x x x x 12, xh 7 Exempel: En fiskare förfogar över 10 nät, 10 ryssjor och 5 långrevar. Han känner till 4 fångstplatser, nämligen ålhålan, gäddviken, gösrännan och aborrgrundet med plats för 3, 8, 8 respektive 6 redskap. Erfaren som han är har han naturligtvis samlat statistik över hur effektiva de olika redskapen är på respektive fångstplats. Tabellen anger effektivitetstalen, där 4 innebär bäst fiske och 1 sämst. Hur ska redskapen placeras för att fångsten ska bli så stor som möjligt med avseende på de angivna effektivitetstalen? X xh 1, 3 2, 3 3, 3 4, 3 16 Linjärprogrammering och Mathematica 1 4 4 3 Η 2 3 2 2 HH/ITE/BN 4 1 ; 1 1 Det är 12 designvariabler xij så grafisk lösning är utesluten. Låt nu r j , j 1, , 3 vara antal tillgängliga redskap av de tre typerna och fi , i 1, , 4 vara det utrymme som finns på de fyra olika fångstplatserna. Givetvis används bara hela(!) redskap. Vi får då LPformuleringen och sedan direkt till Mathematica. max 4 i 1 3 j 1 Ηij xij 4 i 1 xij då 3 j 1 xij xij r j , j g j fi , i 0 gX 0 g xij objfkn gi Total Η X, 2 x 1, 1 2 x 1, 2 4 x 1, 3 4 x 2, 1 3 x 2, 2 x 2, 3 biv Thread X. 1, 1, 1 3, 8, 8, 6 , Thread X . 1, 1, 1, 1 10, 10, 5 Thread Flatten X 0 , Flatten X Integers Flatten 4 x 3, 1 2 x 3, 2 x 3, 3 3 x 4, 1 2 x 4, 2 x 4, 3 gj gi gX 0 Heltal , x 1, 1 x 1, 2 x 1, 3 3, x 2, 1 x 2, 2 x 2, 3 8, x 3, 1 x 1, 1 x 2, 1 x 3, 1 x 4, 1 10, x 1, 2 x 2, 2 x 3, 2 x 1, 1 0, x 1, 2 0, x 1, 3 0, x 2, 1 0, x 2, 2 0, x 2, 3 x 4, 2 0, x 4, 3 0, x 1, 1 x 1, 2 x 1, 3 x 2, 1 x 2, 2 x x 3, 2 x 3, 3 8, x 4, 1 x 4, 2 x 4, 3 6, x 4, 2 10, x 1, 3 x 2, 3 x 3, 3 x 4, 3 5, 0, x 3, 1 0, x 3, 2 0, x 3, 3 0, x 4, 1 0, 2, 3 x 3, 1 x 3, 2 x 3, 3 x 4, 1 x 4, 2 x 4, 3 Vi har 12 designvariabler och så här många bivillkor Length biv 20 Avslutningsvis svaret på fiskarens funderingar fångst, placering 80, x 1, 1 x 2, 3 0, x 1, 2 0, x 3, 1 Maximize objfkn, biv, Flatten X 0, x 1, 3 8, x 3, 2 3, x 2, 1 0, x 3, 3 0, x 2, 2 0, x 4, 1 8, 2, x 4, 2 2, x 4, 3 2 Eller på samma matrisform som han är van vid X . placering 0 0 8 2 0 8 0 2 3 0 0 2 Exempel: Ett snickeri i Siljansbygden kan tillverka fyra olika sorters souvenirer av trä kallade Mora, Nisse, Dala respektive Hästen. Fabrikationen går till så, att en grov tillsågning sker i snickerifabriken, varefter de går ut till trätäljare för definitiv utformning. Slutligen dekoreras de. Tidsåtgången i minuter och vinst för varje modell samt tillgänglig tid i timmar/vecka för varje avdelning framgår av nedanstående tabell. Råvaror finns i obegränsad mängd. Hur bör man planera tillverkningen för att optimera vinsten? Mora Nisse Dala Hästen Tillgänglig tid h Snickeri 2 2 4 4 100 Trätäljning 20 20 40 50 180 Dekorering 14 18 20 30 122 Vinst kr st 4 6 8 9 Lösningsförslag: Låt snickeriet tillverka xM , xN , xD , xH st av respektive souvenir vars tillverkningstider samlas i T. HH/ITE/BN Linjärprogrammering och Mathematica X x M , x N , xD , xH ; T 2 2 4 4 20 20 40 50 ; 14 18 20 30 Med 4 designvariabler är grafisk lösning är utesluten. Låt x j vara designvariablerna och Τi , i 17 1, , 3 tillgänglig tid i timmar för de tre avdelningarna så får vi LP-formuleringen med heltalskrav och sedan direkt till Mathematica. max 4xM 6xN 4 j 1 Tij x j då objfkn 8 xD 9xH 60 Τi , i xM , x N , x D , x H xM , x N , x D , x H 0 gi gX g 0 4, 6, 8, 9 .X 9 xH biv 8xD 4 xM 6 xN Thread T.X 60 100, 180, 122 Thread X 0 , X Integers Flatten , gi gX 0 Heltal 4 xD 4 xH 2 xM 2 xN 6000, 40 xD 50 xH 20 xM 20 xN 10 800, 20 xD 30 xH 14 xM 18 xN 7320, xM 0, xN 0, xD 0, xH 0, xM xN xD xH Alltså 4 designvariabler och så här många bivillkor Length biv 8 Äntligen svaret på Dalasnickeriets produktionslayout. Maximize objfkn, biv, X 2640, xM 0, xN 240, xD 150, xH 0 Snickeriet bör koncentrera sig på att tillverka 240 st av modell Nisse och 150 st av modell Dala samt släcka ljuset för Mora och Hästen ;-) Exempel: En byggherre står i begrepp att bygga 3 sorters hyreshus med byggkostnad och förväntad hyresintäkt netto per månad enligt tabell. Minst 50 av husen ska vara av typ A och högst 20 ska vara av typ C. Totala investeringen får inte överstiga 4000 Mkr. Hur ska han bygga för att maximera vinsten räknat över en 10–årsperiod? Typ Kostnad Mkr Intäkt Mkr A 2 0.05 B 5 0.15 C 8 0.3 Lösningsförslag: Låt byggherren bygga x A , xB , xC st av respektive hyreshus. X x A , xB , xC ; Här har vi 3 designvariabler så grafisk lösning är utesluten. Vi får LP-formuleringen med heltalskrav eftersom halva hus är svåra att hyra ut. Objektfunktionen räknat i Mkr är hyresintäkter under tio år utan uppräkning för ränta minus byggkostnad. Sedan direkt till Mathematica. max 10 12 0.05x A 0.15xB 0.3xC 2x A 5xB 8xC 2x A 5xB 8xC 4000 Max investering x A 0.5 x A xB xC Minst 50 av typ A då xC 0.2 x A xB xC Max 20 av typ C Heltalskrav x A , xB , xC 10 12 objfkn 5 xA 15 xB 30 xC 100 6 5 5 xA 15 xB 30 xC 2 xA 5 xB 8 xC 2 xA 5 xB 8 xC 18 Linjärprogrammering och Mathematica biv 2, 5, 8 .X 4000, HH/ITE/BN Max investering 1 xA Total X , Minst 50 Total X , Max 20 av typ A 2 1 xC av typ C 5 X Integers Heltal 1 2 x A 5 xB 8 xC 4000, x A 2 1 xA xB xC , xC 5 xB xA xC , x A x B xC Modellstorleken är 3 designvariabler och så här många bivillkor Length biv 4 Så här ska byggherren ska planera byggnationen samt total vinst. Maximize objfkn, biv, X 11 216, x A 496, xB 288, xC 196 Exempel: Ett företag har 3 fabriker som tillverkar samma produkter. Dessa skall sändas till företagets 5 lager för vidare distribution till kunder. Tabellen nedan visar tillgänglig mängd vid de olika fabrikerna, vilken mängd som efterfrågas vid de olika lagren samt kostnaden i kr för att transportera en enhet mellan respektive fabrik och lager. Lager A Lager B Lager C Lager D Lager E Tillgänglig mängd Fabrik X Fabrik Y Fabrik Z Efterfrågad mängd 42 34 46 11 42 42 44 13 44 40 42 7 40 46 48 17 44 48 46 24 19 28 25 72 Formulera och lös uppgiften att minimera transportkostnaden. Lösningsförslag: Låt xij x i, j vara antalet produkter som sänds från fabrik i till lager j och Kij transportkostnadsmatrisen enligt tabell X Array x, 3, 5 x 1, 1 x 2, 1 x 3, 1 K x 1, 2 x 2, 2 x 3, 2 x 1, 3 x 2, 3 x 3, 3 x 1, 4 x 2, 4 x 3, 4 x 1, 5 x 2, 5 x 3, 5 42 42 44 40 44 34 42 40 46 48 ; 46 44 42 48 46 Här har vi 15 designvariabler xij så grafisk lösning är utesluten. Låt nu fi , i fabrikerna och l j , j 1, 1, , 3 vara antal tillgängliga produkter i de tre , 5 efterfrågan i de fem lagren. Vi får då LP-formuleringen med heltalskrav och sedan direkt till Mathematica. max 3 i 1 4 j 1 Kij xij 5 j 1 xij då 3 i 1 xij xij xij objfkn 0 fi , i gi l j , j g j gX 0 Heltal Total K X, 2 42 x 1, 1 42 x 1, 2 44 x 1, 3 40 x 1, 4 44 x 1, 5 34 x 2, 1 42 x 2, 2 40 x 2, 3 46 x 2, 4 48 x 2, 5 46 x 3, 1 44 x 3, 2 42 x 3, 3 48 x 3, 4 46 x 3, 5 HH/ITE/BN biv Linjärprogrammering och Mathematica Thread X. 1, 1, 1, 1, 1 19, 28, 25 , Thread X . 1, 1, 1 11, 13, 7, 17, 24 , Thread Flatten X 0 , Flatten X Integers Flatten 19 gi gj gX 0 Heltal x 1, 1 x 1, 2 x 1, 3 x 1, 4 x 1, 5 19, x 2, 1 x 2, 2 x 2, 3 x 2, 4 x 2, 5 28, x 3, 1 x 3, 2 x 3, 3 x 3, 4 x 3, 5 25, x 1, 1 x 2, 1 x 3, 1 11, x 1, 2 x 2, 2 x 3, 2 13, x 1, 3 x 2, 3 x 3, 3 7, x 1, 4 x 2, 4 x 3, 4 17, x 1, 5 x 2, 5 x 3, 5 24, x 1, 1 0, x 1, 2 0, x 1, 3 0, x 1, 4 0, x 1, 5 0, x 2, 1 0, x 2, 2 0, x 2, 3 0, x 2, 4 0, x 2, 5 0, x 3, 1 0, x 3, 2 0, x 3, 3 0, x 3, 4 0, x 3, 5 0, x 1, 1 x 1, 2 x 1, 3 x 1, 4 x 1, 5 x 2, 1 x 2, 2 x 2, 3 x 2, 4 x 2, 5 x 3, 1 x 3, 2 x 3, 3 x 3, 4 x 3, 5 Vid sidan om 15 designvariabler är det också många bivillkor Length biv 24 Slutligen svaret på transportoptimeringen kostnad, sänd Minimize objfkn, biv, Flatten X 2986, x 1, 1 0, x 1, 2 2, x 1, 3 0, x 1, 4 17, x 1, 5 0, x 2, 1 11, x 2, 2 10, x 2, 3 7, x 2, 4 0, x 2, 5 0, x 3, 1 0, x 3, 2 1, x 3, 3 0, x 3, 4 0, x 3, 5 24 Eller på samma matrisform som han är van vid från transportkostnadsmatrisen X . sänd 0 2 0 17 0 11 10 7 0 0 0 1 0 0 24 Exempel: Två städer, A och B, producerar 500 ton respektive 400 ton hushållsavfall per dag. Avfallet måste först brännas vid någon av anläggningarna C eller D, båda med kapaciteten 500 ton/dag. Kostnaden vid C är 320 kr/ton och vid D 240 kr/ton. Vid förbränningen förvandlas 1 ton avfall till 200 kg slagg vilket måste dumpas vid någon av slutstationerna (ss) E eller F. Varje slutstation kan ta emot som mest 150 ton slagg/dag. Transportkostnaden är 150 kr per ton och mil, både för avfallet och slaggen. Avståndet, i mil, mellan de olika platserna framgår av tabellerna nedan. Anläggning C Anläggning D Stad A Stad B 7 8 Anläggning C Anläggning D 1 9 ss E ss F 1 3 3 2 Formulera och lös problemet att på billigaste sätt ta hand om hushållsavfallet. Lösningsförslag: Låt xij vara antalet ton som transporteras från i j. Med hjälp av text och tabell formulerar vi LP-problemet rakt in i näbbet på Mathematica. Kontrollera riktigheten! Minimize320 xAC 150 7 xAC xAC xAD xBC 240 xAD xAD 8 xBC xBD 9 xBD xCE 3 xCF 3 xDE 2 xDF , 500, 400, xBC xBD xAC xBC 500, xAD xBD 500, 200 200 xAC xBC xCE xCF , 1000 1000 200 200 xAD xBD xDE xDF , 1000 1000 xCE xDE 150, xCF xDF 150, xAC 0, xAD 0, xBC 0, xBD 0, xCE 0, xCF 0, xDE 0, xDF , xAC , xAD , xBC , xBD , xCE , xCF , xDE , xDF 845 000, xAC 0, xAD 500, xBC 400, xBD 0, xCE 80, xCF 0, xDE 0, xDF 100 0 20 Linjärprogrammering och Mathematica HH/ITE/BN Nu är det bara att sätta igång och köra enligt följande schema till kostnaden ovan Anläggning C Anläggning D ss E ss F Stad A 0 500 Anläggning C 80 0 Stad B 400 0 Anläggning D 0 100 Exempel: Limföretaget Lim AB tillverkar 3 olika sorters lim: LimIt, LimAll och Standard. Råvarorna Klix, Kladd och Fästis används i olika proportioner vid tillverkningen beroende på vilket lim som skall framställas. I nedanstående tabell redovisas minimirespektive maximigränser för hur mycket av ett visst råmaterial som måste/får ingå i en viss limsort. LimIt LimIt LimAll LimAll Standard Standard max max max min min min 0 50 40 60 25 75 Råvara Klix Kladd 25 35 0 100 0 25 Fästis 25 50 40 60 0 30 För att tillverka 1 kg lim åtgår 1 kg råvara. Inköpspriset för råvarorna är respektive 100, 75, 125 kr/kg. Försäljningspriset för respektive limsort är 400, 380, 320 kr/kg. Av olika anledningar måste limföretaget köpa lika mycket av Klix som av Fästis. Vidare kan företaget ej tillverka mer än 100 kg lim. Hur skall företaget planera sin produktionspolicy då målet är att maximera vinsten? Formulera och lös företagets problem. Lösningsförslag: Låt xij vara mänden av råvara i och som ingår i produkt j. Bilda också de två matriserna som formulerar recepten. Kör på och kontrollera riktigheten! X Array x, 3, 3 1 pmin 100 50 60 75 35 100 25 ; 50 60 30 1 pmax 100 objfkn ; 0 40 25 25 0 0 ; 25 40 0 Total X. 400, 380, 320 300 x 1, 1 280 x 1, 2 220 x 1, 3 X . 100, 75, 125 325 x 2, 1 305 x 2, 2 245 x 2, 3 3 biv 275 x 3, 1 255 x 3, 2 195 x 3, 3 3 Tablepmin i, j x k, j x i, j pmax i, j x k, j , k 1 i, 3 , j, 3 , k 1 3 x 1, j x 3, j 0, j 1 3 3 x i, j 100, i 1j 1 Thread Flatten X 0 Flatten 1 0 2 x 1, 1 x 1, 1 x 2, 1 x 3, 1 , 2 x 3, 2 x 1, 2 x 1, 2 x 2, 2 x 3, 2 , 5 3 x 1, 3 x 2, 3 x 3, 3 x 1, 3 4 1 x 1, 3 x 2, 3 x 3, 3 , 4 7 x 1, 1 x 2, 1 4 x 2, 3 2 x 1, 2 5 0 x 2, 2 5 1 0 3 x 1, 2 x 3, 3 x 1, 1 x 2, 1 x 3, 1 , 0 x 2, 2 x 1, 2 x 2, 2 x 3, 2 , 20 1 1 1 x 1, 3 x 2, 3 x 3, 3 , x 1, 1 x 2, 1 x 3, 1 x 3, 1 x 1, 1 x 2, 1 x 3, 1 , 4 4 2 3 x 2, 2 x 3, 2 x 3, 2 x 1, 2 x 2, 2 x 3, 2 , 5 3 x 1, 3 x 2, 3 x 3, 3 , x 1, 1 x 1, 2 x 1, 3 x 3, 1 x 3, 2 x 3, 3 0, 10 1, 2 x 1, 3 x 2, 1 x 2, 2 x 2, 3 x 3, 1 x 3, 2 x 3, 3 100, x 1, 1 0, x 1, 1 x x 1, 2 0, x 1, 3 x 3, 1 0, x 2, 1 x 2, 1 0, x 2, 2 0, x 2, 3 0, x 3, 1 0, x 3, 2 0, x 3, 3 0 HH/ITE/BN Linjärprogrammering och Mathematica 21 Här har vi 9 designvariabler och så här många bivillkor Length biv 20 Nu är det bara att blanda så vinsten blir maximal vinst, blanda 60 125 Maximize objfkn, biv, Flatten X 65 , x 1, 1 65 , x 1, 2 2 0, x 1, 3 0, x 2, 1 35, x 2, 2 0, x 2, 3 0, x 3, 1 2 , x 3, 2 0, x 3, 3 0 2 och inse att det är dax att sluta med LimAll och Standard! X . blanda 65 2 0 0 35 0 0 65 2 0 0 Exempel: Ett dataföretag har uppskattat antalet servicetimmar som måste utföras under de närmaste fem månaderna Månad Behov servicetimmar Januari 6000 Februari 7000 Mars 8000 April 9500 Maj 11 500 Servicen utförs av anställda tekniker som i början av Januari är 50 till antalet. Varje tekniker kan arbeta upp till 160 timmar per månad. För att täcka det framtida behovet av tekniker måste nya tekniker (praktikanter) utbildas. Denna utbildning tar en månad och kräver 50 timmars handledning av en utbildad tekniker. En utbildad tekniker har en månadslön på 15000 kr (oavsett antalet arbetstimmar under månaden) och en praktikant har en månadslön på 7500 kr. I slutet av varje månad slutar 2 st av teknikerna för arbete inom något annat företag. Formulera bemanningsproblemet som ett LP-problem vars lösning kommer att minimera den totala lönekostnaden för den givna perioden, givet att antalet servicetimmar måste tillgodoses. Lösningsförslag: Kör på och kontrollera riktigheten! xi yi antal praktikanter som utbildas månad i, i 1, , 5. antal tekniker som finns tillgängliga i början av månad i, i tid biv 6000, 7000, 8000, 9500, 11 500 ; y1 50, Table 160 yi 50 xi tid i , xi Table yi 2 xi yi 1 , i, 4 1, , 5. 0, yi 0, xi , yi Flatten Integers , i, 5 , y1 50, 160 y1 50 x1 6000, x1 0, y1 0, x1 y1 , 160 y2 50 x2 7000, x2 0, y2 0, x2 y2 , 160 y3 50 x3 8000, x3 0, y3 0, x3 y3 , 160 y4 50 x4 9500, x4 0, y4 0, x4 y4 , 160 y5 50 x5 11 500, x5 0, y5 0, x5 y5 , x1 y1 2 y2 , x2 y2 2 y3 , x3 y3 2 y4 , x4 y4 2 y5 5 Minimize 15 000 yi 7500 xi , i 1 biv, Flatten Table 4 530 000, x1 0, y1 50, x2 xi , yi , i, 5 8, y2 48, x3 11, y3 54, x4 11, y4 63, x5 0, y5 72 Till ovanstående minimala lönekostnad har vi alltså följande utveckling av tekniker och nya praktikanter samt vilken kapacitet 150yi 50xi dessa har. Vi ser att det är lite mycket överkapacitet i början men optimeringen ser till att allt bättre och bättre anpassa kapacitet efter behov. 22 Linjärprogrammering och Mathematica Månad HH/ITE/BN Behov servicetimmar Tekniker Praktikanter Kapacitet servicetimmar Januari 6000 50 0 8000 Februari 7000 48 8 7280 Mars 8000 54 11 8090 April 9500 63 11 9530 Maj 11 500 72 0 11 520 Exempel: En storavdelning på ett sjukhus ska göra ett rullande veckoschema för sjuksköterskornas nattskift. Antalet sjuksköterskor som behövs varje natt ges av vidstående tabell. Varje sjuksköterska arbetar tre nätter i rad och är sedan ledig fyra nätter. Bestäm en plan för bemanningen som uppfyller behovet och minimerar antalet sjuksköterskor. Är det överkapacitet någon natt ? Natt Behov Sön 24 Mån 20 Tis 18 Ons 18 Tor 22 Fre 28 Lör 24 Lösningsförslag: Kör på och kontrollera riktigheten! Låt xi , i 1, X , 7 vara antalet sjuksköterskor som börjar arbeta natt nr i. x1 , x2 , x3 , x4 , x5 , x6 , x7 ; Rullande schema. Kolonn ett sju är söndag lördag natt. Rad ett är de antal sjuksköterskor som börjar på söndag natt och arbetar tre nätter och sedan lediga fyra nätter. Rad två de som börjar måndag natt, och så vidare. schema x1 x1 x1 0 0 0 0 0 x2 x2 x2 0 0 0 0 0 x3 x3 x3 0 0 0 0 0 x4 x4 x4 0 ; 0 0 0 0 x5 x5 x5 x6 0 0 0 0 x6 x6 x7 x7 0 0 0 0 x7 Uppfyll bemanningskraven biv Thread Total schema 24, 20, 18, 18, 22, 28, 24 Thread X 0 , X Integers Flatten x1 x6 x7 24, x1 x2 x7 20, x1 x2 x5 x6 x7 24, x1 0, x2 0, x3 0, x4 , x3 18, x2 x3 x4 18, x3 x4 x5 22, x4 x5 0, x5 0, x6 0, x7 0, x1 x2 x3 x4 x5 x6 x7 Sök optimal bemanning, det vill säga hur många som behöver börja natt i. antalAnställda, bemanning 52, x1 10, x2 6, x3 4, x4 8, x5 Minimize Total X , biv, X 10, x6 10, x7 4 Det behövs minst 52 sjuksköterskor på avdelningen och så här många är i tjänst natt i. Total schema . bemanning 24, 20, 20, 18, 22, 28, 24 En jämförelse visar att det är överkapacitet endast på tisdag natt. Exempel: En snickare besöker en brädgård i syfte att inhandla 25 st bräder av längden 2 m och 35 st av längden 3 m. Brädgården som inte är speciellt välsorterad kan bara erbjuda längderna 4 m och 5 m. Hur ska det inhandlas och sågas så att spillet minimeras? x6 28, HH/ITE/BN Linjärprogrammering och Mathematica 23 Lösningsförslag: Typiskt brädgårdsproblem. Låt x4i och x5 j vara de sätt som man kan såga upp en bräda av längden 4 m respektive 5 m på. Gör två tabeller med antal av önskad längd och spill. 4m: x41 x42 x43 Antal 2 m Antal 3 m Spill m 1 0 2 2 0 0 0 1 1 5m: x51 x52 x53 x54 Antal 2 m Antal 3 m Spill m 1 0 3 2 0 1 0 1 2 1 1 0 Vi kan nu direkt formulera och skicka LP-problemet rakt in i näbbet på Mathematica. Här krävs både likhetsbivillkor och heltal i lösningen. Kontrollera riktigheten! Minimize2 x41 0 x42 1 x41 1 x43 2 x42 0 x43 3 x51 1 x51 1 x52 2 x52 2 x53 0 x54 , 0 x53 1 x54 Spillet 25, Önskat antal av 2 m 35, Önskat antal av 3 m 0 x41 0 x42 1 x43 0 x51 0 x52 1 x53 1 x54 x41 0, x42 0, x43 0, x51 0, x52 0, x53 0, x54 0, x41 , x42 , x43 , x51 , x52 , x53 , x54 Integers , x41 , x42 , x43 , x51 , x52 , x53 , x54 10, x41 0, x42 0, x43 10, x51 0, x52 0, x53 0, x54 25 Snickaren skall alltså köpa 10 st av längden 4 m och såga alla enligt x43 , 25 st av längden 5 m och såga alla enligt x54 . Spillet blir då 10 m. Vid mer omfattande beställning och välsorterad brädgård är handpåläggning utesluten. Systematiken framgår tydligt så det är lämpligt att generera (tabellerna och) LP-formuleringen med hjälp av Mathematica. Gör det gärna som övning!! Okej då Definiera vad vi vet. Eftersom vi ämnar göra processen helautomatisk är dessa tre listor de enda vi behöver ändra på till längd och innehåll då vi får en ny beställning till brädgården. tillgängliga 4, 5 ; önskade 2, 3 ; antal 25, 35 ; Nu börjar vi. Maximalt antal önskade man kan få ut av någon tillgänglig. Max tillgängliga nmax Floor Min önskade 2 Maximalt antal sågrecept man kan få för varje tillgänglig. Varje rad talar om hur många av de önskade som erhålls. r Tuples Range 0, nmax , Length önskade 0 0 0 1 1 1 2 2 2 0 1 2 0 1 2 0 1 2 Många rader i sågrecepten ovan är ointressanta, t.ex. 0, 0 , eller omöjliga för en eller flera av de tillgängliga. Spola därför igenom sågrecepten ovan för varje tillgänglig och spara de som är ok i en tabell med recept. För varje recept sparar vi också spillet och en designvariabel x i, j , där i är tillgänglig bräda nr i och j är radindex i recepttabellen. Nu är det bara att köra igång! X recept spill ; m 0; Do Do If Plus r j 0, If tillgängliga i r j .önskade, AppendTo X, x i, m ; AppendTo recept, r j ; AppendTo spill, tillgängliga i ; , j, 1, Length r ; , i, 1, Length tillgängliga r j .önskade 24 Linjärprogrammering och Mathematica HH/ITE/BN Så här blev den slutliga tabellen med sågrecept. Om vi tar och lägger våra första handgjorda tabeller ovan under varandra, döper om variablerna samt sorterar om raderna lite grann så har vi direkt överensstämmelse. Join x x x x x x x 1, 1 1, 2 1, 3 2, 4 2, 5 2, 6 2, 7 X , recept , spill 0 1 2 0 1 1 2 1 0 0 1 0 1 0 1 2 0 2 3 0 1 Nu är det bara att lösa det uppdukade LP-problemet. Visst är det smidigt Minimize X.spill, Thread X.recept Thread X 0 , X Integers , X 10, x 1, 1 10, x 1, 2 0, x 1, 3 antal , 0, x 2, 4 0, x 2, 5 0, x 2, 6 25, x 2, 7 0 Med samma resultat som ovan. Med vår systematiska namnsättning är det nu enkelt, x i, j tillgänglig bräda nr i och såga dessa enligt receptet på rad j. Alltså x 1, 1 x 2, 6 10 25 10 st 4 m sågas enligt 0, 1, 1 25 st 5 m sågas enligt 1, 1, 0 2 m st 10 0 25 1 25 3 m st 10 1 25 1 35 k innebär att man ska ta k st av Spill m 10 1 25 0 10 ť Lite historik Linjärprogrammeringsproblem är i dag ett av de vanligaste problemen som uppkommer i samband med matematisk modellering. Varje dag löses mängder av LP-problem, ofta mycket stora med kanske flera hundra tusen designvariabler och bivillkor. Förmodligen är det den matematiska tillämpning, frånsett finita elementmetoden för hållfasthetsberäkningar, som utnyttjar mest datortid världen över. Av detta inses lätt att varje förbättring av lösningsalgoritmer och dess implementeringar i datorprogram kan spara mycket pengar. Detta skäl i sig skulle kunna vara tillräckligt för att sysselsätta många, men det finns också en annan mer teoretisk aspekt på LP-problemet. Hur mycket ökar tidsåtgången (antalet räkneoperationer) för att lösa ett LP-problem då antalet variabler ökar? Bekant är att simplexmetoden har exponentiell tillväxt, det vill säga att lösningstiden T an om n är antalet designvariabler. För att hålla beräkningstider under kontroll är det alltid önskvärt är att ha algoritmer som har polynomiell tillväxt, T nk . Jämför Gauss eliminationsmetod där T n3 . George Dantzig Leonid Kantorovich John von Neumann Leonid Khachiyan Narendra Karmarkar 1914 2005 1912 1986 1903 1957 1952 2005 1957 Simplexmetoden går tillbaka till 1940-talet, då George Dantzig presenterade embryot. Naturligtvis var det militära ändamål i USA som gjorde att hans grupp fick medel att koncentrera sig på uppgiften. Snarlikt angreppssätt har krediterats i efterhand åt ryssen Leonid Kantorovich (1939), som vid denna tidpunkt hade svårt att publicera sig. Det dröjde nästan 20 år innan hans arbete uppmärksammades. År 1975 fick han tillsammans med T.C. Koopmans från USA det så kallade nobelpriset i ekonomi för "bidrag till teorin för optimal resursanvändning". Under slutet av 40-talet och början av 50-talet fick Dantzig hjälp av John von Neumann, en av 1900talets stora matematiker, att slipa simplexmetoden till den form vi känner den idag. Tilläggas bör att von Neumann, som biprodukt i ett arbete 1937, redan hade gjort det mesta jobbet. Men den teoretiska frågan om det finns någon algoritm för att lösa allmänna LP-problem inom polynomiell tid levde kvar. Svaret kom inte förrän 1979 från armeniern Leonid Khachiyan. Det visade sig dock att implementeringar av denna så kallade ellipsoidmetod vid praktiska problem i allmänhet var långsammare än simplexmetoden, som oftast visar sig vara snabbare än vad de teoretiska resultaten anger. Däremot kan man lätt konstruera problem så att simplexmetoden har exponentiell tidsåtgång. Men Khachiyans HH/ITE/BN Linjärprogrammering och Mathematica 25 arbete visade att det existerade en polynomiell algoritm och detta var mer än tillräckligt för att hetsjakten skulle sätta igång världen över. År 1984 publicerade indiern Narendra Karmarkar, verksam vid Bell Laboratories i USA, en artikel innehållande de teoretiska resultaten om polynomiell tillväxt hos en ny LP-algoritm. Förutom de teoretiska resultaten hade också Karmarkar implementerat algoritmen. Vid testkörningar visade den sig vara betydligt effektivare än simplexmetoden, framför allt vid stora LP-problem. Han stack ut hakan ordentligt när han deklarerade stora tidsvinster. Eftersom effektiva LP-lösare är av ekonomiskt intresse och har stor efterfrågan i företagsvärlden kom händelsen att röna stor uppmärksamhet även utanför matematiska kretsar. Det är inte varje dag som man skriver om matematik på New York Times förstasida. Till skillnad från simplexmetoden, där startlösningen är ett hörn på polyedern av tillåtna lösningar, startar Karmarkar i sin algoritm med en startlösning strikt inuti motsvarande konvexa polyeder. Simplexalgoritmen stegar sig fram på ett fiffigt sätt från hörn till hörn för att finna en bättre lösning. I Karmarkars algoritm däremot blir nästa steg att projicera gradienten av objektfunktionen på polyedern och härefter söka sig i denna projicerade riktning nästan ut till randen av området. Här väljs nästa lösning eller punkt i den induktiva processen att finna ett optimum. Därefter transformeras det gamla området till ett nytt område på så sätt att den senast erhållna punkten blir "centrum" i det nya området, varefter processen fortsätter på samma sätt tills dess önskad noggrannhet i lösningen uppnåtts. ť Lite mer om Optimering och Mathematica Om man är intresserad av Optimering i allmänhet och hur till exempel Simplexmetoden och Karmarkars metod fungerar och implementeras i en dator hänvisas till skriften "Något om Tillämpad optimering och Mathematica".
© Copyright 2024