Något om Linjärprogrammering och Mathematica

Transcription

Något om Linjärprogrammering och Mathematica
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.
LPSolve1.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
Minimize1.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.
Maximize6 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!
Minimize320 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
Tablepmin 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!
Minimize2 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".