Linjär programmering är en modelltyp för att lösa optimeringsproblem med flera trånga
sektorer
Repetition inför momenten
Nätverksmodeller
Transportmodeller
Heltalsprogrammering
Målprogrammering
Linjärprogrammering (LP)
Repetition (L1 kap. 1 & L2 kap. 6)
Linjärprogrammering
Modelltyp för att lösa optimeringsproblem
Teoretisk definition:
En iterativ matematisk teknik för att lösa maximerings- eller minimeringsproblem under begränsningar (bivillkor).
Praktisk företagsekonomisk definition:
Ett sätt att åstadkomma ett modellmässigt optimalt utnyttjande av begränsade resurser (trånga sektorer)
Går ut på att:
Välja värden på ett antal beslutsvariabler (”aktiviteter”) så att ett optimalt (maximalt eller minimalt) värde erhålls på en målfunktion.
Beslutsvariablernas värden måste väljas givet ett antal restriktioner.
Målfunktion och restriktioner måste beskrivas med linjära funktioner (styckvis linjära funktioner).
Linjär programmering
Problemställning:
Exempelvis, sök den produktionsplan som maximerar TTB eller
minimerar kostnader givet begränsningar såsom maskintid, arbetstid, materialtillgång, efterfrågan mm.
Kvantifiera problemet:
1. Definiera beslutsvariablerna
o Vad är den centrala problemställningen?
o Exempelvis, hur mycket skall produceras av vad, när och var?
2. Definiera målfunktion
o Maximera eller minimera?
3. Fastställ restriktionerna, t ex:
o Resursbegränsningar
o Balansekvationer – framförallt när då tiden explicit beaktas i modellen
o Policyrestriktioner – exempelvis limiter i en investeringsportföljen
4. Genomför känslighetsanalys på basis av datorkörning
Linjär programmering
Grundläggande antaganden:
Alla samband uttrycks linjärt eller styckvis linjärt.
Alla variabler är kontinuerliga (heltalsprogrammering, eget moment).
Alla koefficienter är kända med säkerhet.
Endast ett kvantifierbart mål (målprogrammering, eget moment).
Linjär programmering
Ett exempel
Ett företag tillverkar två produkter – X1 och X2
Målsättningen är att välja den produktionsmix av X1 och X2 som
maximerar TTB
Ett optimeringsproblem med flera trånga sektorer
Produktions- resurs etc.
X1 (för- brukning per enhet)
X2 (för- brukning per enhet)
Total resurstill- gång (dag) Arbets-
timmar
2 4 1 600
Process- timmar
6 2 1 800
Efterfrågan X1
Obe- gränsad Efterfrågan
X2
350
TB per enhet 3,00 8,00
• Om flera resurser är begränsande för flera produkter får vi ett optimeringsproblem som normalt endast går att lösa med iterativa metoder
• Modellformulering
:
1. Max 3X1 + 8X2
2. 2X1 + 4X2 < 1 600 (arbetstimmar) 3. 6X1 + 2X2 < 1 800 (processtimmar) 4. X2 < 350 (efterfrågan)
Linjär programmering
Ett exempel
Linjär programmering
Grafisk lösning av exemplet
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 Produkt X1
Produkt X2
Optimal lösning = (X1, X2) = (100, 350) ger maximalt TTB = 3 100
Processtid
Arbetstid Efterfrågan
”Optimalt hörn”
Målfunktionen (Z) är satt till 1200, 2400 och 3100 i figuren (Max Z=3X1+ 8X2)
Linjär programmering
Slack- och Surplus-variabler
Gör om restriktionerna till likheter genom att införa slackvariabler X3, X4 och X5 i restriktionerna:
2X1 + 4X2 + X3 = 1 600 (arbetstimmar) 6X1 + 2X2 + X4 = 1 800 (processtimmar) X2 + X5 = 350 (efterfrågan)
Sätt in optimala värden på X1 (100) och X2 (350) och lös ut X3, X4 och X5:
X3 = 0
X4 = 500 = oanvända processtimmar (slack) X5 = 0
Linjär programmering
Slack- och Surplus-variabler
Generellt gäller att:
om slackvariabler Xi = 0 så är restriktion i bindande
om slackvariabler Xi > 0 så är restriktion i icke-bindande
I exemplet är således restriktion 1 och 3 bindande och restriktion 2 icke-bindande
Antag även följande restriktion i modellen:
X1 > 50
Gör om den restriktion till likhet genom att införa surplusvariabeln X6 i restriktionen, dvs:
X1 – X6 = 50
X6 = 50, dvs. icke-bindande restriktion
Linjär programmering
Grafisk lösning av exemplet med X
1>50
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 Produkt X1
Produkt X2
Oförändrad optimal lösning = (X1, X2) = (100, 350) ger maximalt TTB = 3 100
Processtid
Arbetstid Efterfrågan
”Optimalt hörn”
X1> 50
Målfunktionen (Z) är satt till 1200, 2400 och 3100 i figuren (Max Z=3X1+ 8X2)
Linjär programmering
Lösning
Tillverka X
1= 100 Produkt 1
X
2= 350 Produkt 2
Oanvänd resurs X
3= 0 Arbetstimmar X
4= 500 Processtimmar X
5= 0 Efterfrågan
Optimalt mål- funktionsvärde
3 100 Maximalt TTB
Linjär programmering
Känslighetsanalys
Hur förändras lösningen om vi förändrar
Begränsningarna (högerleden) i restriktionerna
Koefficienterna i målfunktionen
Viktig information ur lösningen
Skuggpriser
Intervall för både koefficienterna i målfunktionen och begränsningarna i restriktionerna.
Betrakta följande möjligheter – en i taget
Ytterligare 100 arbetstimmar blir tillgängliga
Ytterligare 120 processtimmar blir tillgängliga
Linjär programmering
Ytterligare 100 arbetstimmar blir tillgängliga
Optimal lösning = (X1, X2) = (150, 350)
vid 1 700 arbetstimmar (1 600) målfunktionsvärde = 3 250
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 Produkt X1
Produkt X2
Processtid
Efterfrågan
Arbetstid
En ökning av 100 arbetstimmar leder till således en ökning av målfunktionens värde på 150.
Skuggpriset = 150/100 = 1,5
Alla ytterligare arbetstimmar används för att tillverka X1
X2 kan inte tillverkas i större kvantitet p.g.a. restriktion 3
Eftersom vi har 500 oanvända processtimmar kan vi göra 83,33 (500/6) ytterligare X1 innan restriktionen för process- timmar blir bindande. Ytterligare 83,33 av X1 kräver 166,67 arbetstimmar.
Arbetstimmar utöver 166,67 ger ingen ökning av TB.
Skuggpriset = 1,5 gäller således i intervallet [1400, 1766,67]
Linjär programmering
Ytterligare 100 arbetstimmar blir tillgängliga
2X1 + 4X2 < 1 600 (arbetstimmar) 6X1 + 2X2 < 1 800 (processtimmar)
Linjär programmering
Ytterligare 120 processtimmar blir tillgängliga
Optimal lösning = (X1, X2) = (100, 350) vid 1 920 arbetstimmar (1 800)
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900 950 1000
0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 850 900
Produkt X1
Produkt X2
Processtid
Efterfrågan
Arbetstid
En ökning av 120 processtimmar leder inte till någon ökning av målfunktionens värde.
Skuggpriset = 0
Tillgängligheten av processtimmer kan minska med 500 innan den restriktionen blir bindande.
Skuggpriset = 0 gäller således i intervallet [1300, ∞]
Linjär programmering
Ytterligare 120 processtimmar blir tillgängliga
Linjär programmering
Mjukvarustöd
Lingo
Demoversion gratis på www.lindo.com
Mycket användarvänligt (när ”Lindo-syntax” används)
Finns för Windows, Mac och Linux
www.phpsimplex.com/simplex/simplex.htm?l=en
Enkelt online-verktyg
De flesta större programpaket för kvantitativ analys har stöd för lösning av LP-modeller.
http://www.orms-today.org/surveys/LP/LP-survey.html
Linjär programmering
Lösning i Lingo
Linjär programmering
Lösning i Lingo
Linjär programmering
Summering – känslighetsanalys
Reducerad kostnad (Reduced Cost) visar hur mycket sämre målfunktionens värde blir om man i den optimala lösningen ”tvingar in” en enhet av en variabel som har värdet 0 i den optimala lösningen.
Slack eller överskott (Slack or Surplus) visar hur mycket av en resurs som inte används i den optimala lösningen (0 eller > 0) eller hur mycket en
”större eller lika med”- restriktion” överskrids i den optimala lösningen.
Skuggpriset (Dual Prices) för en resurs visar dess alternativvärde, dvs. hur mycket målfunktionens optimala värde skulle förbättras om ytterligare en enhet av resursen fanns tillgänglig (Ceteris paribus)
Intervall för målfunktionskoefficienterna (Objective Coefficient Ranges) visar hur koefficienterna i målfunktionen kan ändras utan att de optimala värdena på beslutsvariablerna förändras (Ceteris paribus)
Intervall för begränsningarna i restriktionerna (Righthand Side Ranges) visar hur tillgången på en begränsad resurs kan ändras utan att resursens skuggpris förändras.
Linjär programmering
Policyrestriktioner
Begränsningar i en LP-modell kan även uttrycka ”policy”- restriktioner. Exempel:
Minst 30 % av den totala produktionen måste bestå av produkt X1:
X1 > 0,3(X1 + X2)
Högst 50 % av TTB får komma från produktion av produkt X2:
8X2 < 0,5(3X1 + 8X2)
Linjär programmering
Flerperiodiska modeller
Tidsdimensionering
Varje aktivitet (t ex produktion, lagring och försäljning) sker en gång per tidsintervall.
Varje aktivitet skall därför representeras av en
beslutsvariabel (eller i de fall då förutsättningarna
inte är variabla av en parameter).
Period t-1 Period t Period t+1
It-2 It-1 It It+1
Pt-1 Pt Pt+1
Dt-1 Dt Dt+1
Restriktioner i LP-modellen (period t): It-1 + Pt = Dt + It.
• En sådan restriktion för varje period.
• Dessutom kan det tillkomma index för olika produkter.
Pt = produktion i period t (antal enheter) Dt = efterfrågan i period t (antal enheter) It = utgående lager i period t (antal enheter)
Linjär programmering
Flerperiodiska modeller
Några komplikationer:
1. Restorder (brist) hanterar genom att lagervariabeln (I) delas upp i två variabler:
I = IL– IB; där IL= lagerstorlek och IB = bristenheter; IL > 0, IB > 0
2. Planeringshorisonten
Prognos av behov lager efter denna tidpunkt måste finnas
3. Fast kostnad
Ger icke-linjära modeller! Löses vanligtvis med heltalsprogrammering.
Linjär programmering
Flerperiodiska modeller
Linjär programmering
Flerperiodiska modeller
Definitioner:
Dt = Efterfrågan i kvartal t (parametervärde).
Rt = Produktion på ordinarie arbetstid i kvartal t.
Ot = Produktion på övertid i kvartal t.
St = Produktion hos kontaktstillverkaren (lego) i kvartal t.
It = lagernivå i slutet av period t (enh.).
I0 = 300
Linjär programmering
Flerperiodiska modeller
Målfunktion (Min tillverkningskostnaden):
Min 20R1+20R2+20R3+20R4+25O1+25O2+25O3+25O4+ 28S1+28S2+28S3+28S4+3I1+3I2+3I3+3I4
Linjär programmering
Flerperiodiska modeller
Restriktioner:
I0 = 300
I0 + R1 + O1 + S1 - I1 = 900 I1 + R2 + O2 + S2 – I2 = 1500 I2 + R3 + O3 + S3 – I3 = 1600 I3 + R4 + O4 + S4 – I4 = 3000
R1 < 1000 R2 < 1200 R3 < 1300 R4 < 1300
Restriktioner:
O1 < 100 O2 < 150 O3 < 200 04 < 200
S1 < 500 S2 < 500 S3 < 500 S4 < 500
Linjär programmering
Flerperiodiska modeller
Heltalsprogrammering
Binära heltal
Binära heltal
En variabel Xi är en binär heltalsvariabel om den endast kan anta värdet 0 eller 1.
Särskilt användbar när val mellan olika alternativ och när fasta kostnader modelleras.
Blandad heltalprogrammering är LP-modell där både kontinuerliga variabler och heltalsvariabler finns med.
Definieras särskilt i mjukvaran (LINGO) som används.
I Lingo: Int <variabelnamn>
Heltalsprogrammering
Bemanningsproblem
Läkare 1 Läkare 2 Läkare 3 Läkare 4 Läkare 5 Läkare 6
Specialitet 1
Specialitet 2
Specialitet 3
Specialitet 4
Specialitet 5
Specialitet 6
Ett mindre sjukhus ska bemanna läkarjouren för den kommande veckan. På sjukhuset finns sex klinker med olika specialiteter. De sex läkare som finns tillgänglig för jour-verksamheten under vecka har kompetens inom följande specialiteter.
Målet är att med hjälp av så få läkare som möjligt bemanna jouren så att alla specialiteter är representerade.
Formulera en LP-modell som löser sjukhusets planeringsproblem.
Heltalsprogrammering
Bemanningsproblem
Min L1+L2+L3+L4+L5+L6 ST
L1+L4>=1 !Specialitet 1 L1+L5>=1 !Specialitet 2 L2+L3>=1 !Specialitet 3 L1+L6>=1 !Specialitet 4 L2+L3+L6>=1 !Specialitet 5 L4>=1 !Specialitet 6 END
INT L1 INT L2 INT L3 INT L4 INT L5 INT L6
Objective value: 3.000000
Variable Value Reduced Cost L1 1.000000 1.000000 L2 0.000000 1.000000 L3 1.000000 1.000000 L4 1.000000 1.000000 L5 0.000000 1.000000 L6 0.000000 1.000000
Linjär programmering
Styckvis linjär funktion
(Kapitel 19 i L1)
Styckvis konvex linjär funktion:
Exempel kostnaden för nyanställning:
I målfunktionen:
Restriktioner:
t (cH1WH1t + cH2WH2t) WHt = WH1t + WH2t 0 < WH1t < WH*
0 < WH2t