Linjär programmering är en matematisk disciplin som ägnas åt teori och metoder för att lösa extrema problem på uppsättningar av dimensionellt vektorrum definierat av system av linjära ekvationer och ojämlikheter.
Linjär programmering (LP) är ett specialfall av konvex programmering , som i sin tur är ett specialfall av matematisk programmering . Samtidigt är det grunden för flera metoder för att lösa heltals- och icke-linjära programmeringsproblem . En generalisering av linjär programmering är fraktionerad linjär programmering .
Många egenskaper hos linjära programmeringsproblem kan också tolkas som egenskaper hos polyedrar och kan således formuleras och bevisas geometriskt.
Matematiska studier av enskilda ekonomiska problem, matematisk formalisering av numeriskt material genomfördes redan på 1800-talet . I den matematiska analysen av den utökade produktionsprocessen användes algebraiska relationer, deras analys utfördes med hjälp av differentialkalkyl . Detta gjorde det möjligt att få en allmän uppfattning om problemet.
Ekonomins utveckling krävde kvantitativa indikatorer och på 1920 - talet skapades en intersektoriell balans ( IOB ). Det var han som fungerade som en drivkraft för att skapa och studera matematiska modeller. Utvecklingen av MOB 1924-1925 i Sovjetunionen påverkade ekonomen och statistikern Vasilij Vasilievich Leontievs arbete . Han utvecklade en intersektoriell modell för produktion och distribution av produkter.
1938 började Leonid Vitalievich Kantorovich , under vetenskapligt samråd, studera den rent praktiska uppgiften att utarbeta den bästa planen för lastning av skalmaskiner (plywood trust). Denna uppgift lämpade sig inte för konventionella metoder. Det blev tydligt att uppgiften inte var slumpmässig. [ett]
1939 publicerade Leonid Kantorovich verket "Mathematical Methods of Organization and Planning of Production", där han formulerade en ny klass av extrema problem med restriktioner och utvecklade en effektiv metod för att lösa dem, och därmed lade grunden för linjär programmering.
Studiet av sådana problem ledde till skapandet av en ny vetenskaplig disciplin av linjär programmering och öppnade ett nytt steg i utvecklingen av ekonomiska och matematiska metoder.
1949 utvecklade den amerikanske matematikern George Bernard Dantzig en effektiv metod för att lösa linjära programmeringsproblem (LPP) - simplexmetoden . [ett]
Termen "programmering" måste förstås i betydelsen "planering" (en av översättningarna av engelsk programmering ). Det föreslogs i mitten av 1940-talet av George Danzig, en av grundarna av linjär programmering, innan datorer användes för att lösa linjära optimeringsproblem .
Den inre punktmetoden nämndes första gången av I. I. Dikin 1967 . [2] . Dessa studier fortsatte, inklusive av inhemska forskare. På 1970-talet lyckades V. G. Zhadan erhålla huvudresultaten och utveckla ett allmänt tillvägagångssätt för konstruktionen av inre punktmetoder för att lösa problem med linjär och olinjär programmering, baserad på transformation av utrymmen; föreslå barriärprojektiva och barriär-newtonska numeriska metoder.
Det allmänna (standard) problemet med linjär programmering är problemet med att hitta minimum av en linjär objektiv funktion (linjär form) av formen [3] :
Ett problem där begränsningar i form av ojämlikheter uppstår kallas ett grundläggande linjärt programmeringsproblem (BLP)
Problemet med linjär programmering kommer att ha en kanonisk form om det i huvudproblemet istället för det första systemet av ojämlikheter finns ett ekvationssystem med begränsningar i form av likhet [4] :
Huvudproblemet kan reduceras till ett kanoniskt genom att införa ytterligare variabler.
Linjära programmeringsproblem av den mest allmänna formen (problem med blandade begränsningar: likheter och ojämlikheter, närvaron av variabler fria från begränsningar) kan reduceras till ekvivalenta (med samma uppsättning lösningar) förändringar av variabler och ersättning av likheter med ett par ojämlikheter [5] .
Det är lätt att se att problemet med att hitta maximum kan ersättas med problemet att hitta minimum genom att ta koefficienterna med motsatt tecken.
Tänk på det maximala matchningsproblemet i en tvådelad graf : det finns flera pojkar och flickor, och för varje pojke och flicka är det känt om de gillar varandra. Det är nödvändigt att gifta det maximala antalet par med ömsesidig sympati.
Låt oss introducera variabler som motsvarar paret från den -e pojken och den -e flickan och uppfyller begränsningarna:
med en objektiv funktion , där är lika med 1 eller 0 beroende på om den -e pojken och -e tjejen är trevliga mot varandra. Det kan visas att bland de optimala lösningarna på detta problem finns en heltalslösning. Variabler lika med 1 kommer att motsvara par som ska vara gifta.
Låt det finnas en graf (med riktade kanter) där för varje kant dess kapacitet anges. Och två hörn ges: ett handfat och en källa. Det är nödvändigt att specificera för varje kant hur mycket vätska som kommer att flöda genom den (inte mer än dess kapacitet) för att maximera det totala flödet från källa till sjunka (vätska kan inte uppträda eller försvinna vid alla hörn utom källan respektive sjunka).
Låt oss ta som variabler mängden vätska som strömmar genom den e kanten. Sedan
var är kapaciteten för den th kanten. Dessa ojämlikheter måste kompletteras med jämlikheten mellan mängden inkommande och utgående vätska för varje vertex, med undantag för sänkan och källan. Som en funktion är det naturligt att ta skillnaden mellan mängden utströmmande och inströmmande vätska vid källan.
En generalisering av det tidigare problemet är det maximala flödet av minimikostnad. I detta problem anges kostnaderna för varje kant och det är nödvändigt att välja bland de maximala flödena flödet med lägsta kostnad. Den här uppgiften reduceras till två linjära programmeringsproblem: först måste du lösa problemet med det maximala flödet, och sedan lägga till det här problemet begränsningen , där är värdet på det maximala flödet, och lösa problemet med en ny funktion - kostnaden för flödet.
Dessa problem kan lösas snabbare än med allmänna algoritmer för att lösa linjära programmeringsproblem på grund av den speciella strukturen hos ekvationer och ojämlikheter.
Det är en viss homogen last som måste transporteras från lager till fabriker. För varje lager är det känt hur mycket last som finns i det , och för varje anläggning är dess behov av last känt. Kostnaden för transport är proportionell mot avståndet från lagret till anläggningen (alla avstånd från -: e lagret till -: e anläggningen är kända). Det krävs att man upprättar den billigaste transportplanen.
De avgörande variablerna i detta fall är - mängden gods som transporteras från -: e lagret till -: e anläggningen. De uppfyller begränsningarna:
Objektivfunktionen har formen: , som måste minimeras.
Det finns en storleksmatris . Den första spelaren väljer ett nummer från 1 till , den andra - från 1 till . Sedan kontrollerar de siffrorna och den första spelaren får poäng, och den andra får poäng ( - numret som valts av den första spelaren - den andra). Vi måste hitta den optimala strategin för den första spelaren.
Sätt in den optimala strategin, till exempel den första spelaren, numret måste väljas med sannolikhet . Då är den optimala strategin en lösning på följande linjära programmeringsproblem:
där funktionen ska maximeras . Värdet i den optimala lösningen kommer att vara den värsta förväntan på den första spelarens utdelning.
Den mest kända och mest använda i praktiken för att lösa det allmänna problemet med linjär programmering (LP) är simplexmetoden . Trots att simplexmetoden är en ganska effektiv algoritm som visat goda resultat för att lösa tillämpade LP-problem är det en algoritm med exponentiell komplexitet . Anledningen till detta är den kombinatoriska karaktären hos simplexmetoden, som successivt räknar upp polyederns hörn av tillåtna lösningar samtidigt som man söker efter den optimala lösningen.
Den första polynomalgoritmen , ellipsoidmetoden , föreslogs 1979 av den sovjetiske matematikern L. Khachiyan , och löste därmed ett problem som hade förblivit olöst under lång tid. Ellipsoidmetoden har en helt annan icke-kombinatorisk karaktär än simplexmetoden. Men i beräkningsmässiga termer visade sig denna metod vara föga lovande. Ändå ledde själva faktumet av problemens polynomiska komplexitet till skapandet av en hel klass av effektiva LP-algoritmer - inre punktmetoder , varav den första var N. Karmarkars algoritm som föreslogs 1984 . Algoritmer av denna typ använder en kontinuerlig tolkning av LP-problemet, när istället för att räkna upp hörn av polytopen av lösningar på LP-problemet, görs en sökning längs banor i utrymmet för variabler av problemet som inte passerar genom hörnen av polytopen. Den inre punktmetoden, som, till skillnad från simplexmetoden, kringgår punkter från det inre av toleransområdet, använder icke-linjära logaritmiska barriärfunktionsmetoder som utvecklades på 1960-talet av Fiacco och McCormick.
En annan metod för att lösa LP är att använda Seidel-algoritmen:
Denna metod har asymptotisk komplexitet .
Varje linjär programmeringsproblem [6] i formuläret
det är möjligt på ett visst sätt att jämföra något annat linjärt programmeringsproblem, kallat dubbelt eller konjugat, med det ursprungliga eller direkta. Sambandet mellan de ursprungliga och dubbla problemen ligger främst i det faktum att lösningen av det ena av dem kan erhållas direkt från lösningen av det andra. Låt oss definiera det dubbla problemet med avseende på det ursprungliga linjära programmeringsproblemet
Inledande uppgift | Dubbla problem |
---|---|
Om vektorerna och är tillåtliga lösningar på de primära och dubbla problemen, då , och jämlikhet uppnås om och bara om och är optimala lösningar. Om den objektiva funktionen för ett av paret av dubbla problem inte är begränsad (uppifrån för det ursprungliga, underifrån för det dubbla), är området för genomförbara lösningar för det andra problemet tomt.
Om vektorerna och är de optimala lösningarna för de direkta respektive dubbla problemen, så är följande likheter sanna
Det vill säga, för optimala lösningar på de primära och dubbla problemen, motsvarar icke-spända (strikt ojämlikhet uppfylls) begränsningar nollvariabler, och icke-nollvariabler (inkluderade i stödplanen) motsvarar snäva (icke strikt ojämlikhet är implementerad som jämlikhet) begränsningar. Men det kan finnas noll variabler som motsvarar snäva begränsningar.
Dessa egenskaper hos dubbla lösningar kan avsevärt minska lösningstiden om du måste lösa ett problem med ett antal begränsningar som är mycket större än antalet variabler. Sedan är det möjligt, efter att ha löst det dubbla problemet, att hitta dess stödplan, varefter, efter att ha valt i det direkta problemet endast de begränsningar som motsvarar stödplanen (alla dessa begränsningar måste ansträngas), lösa det vanliga systemet med linjära ekvationer för dem.
Sats. Det dubbla av det dubbla LP-problemet är det primära LP-problemet.
Bevis: Överväg en direkt LP av formen under villkoret . Låt oss associera den dubbla LP-skivan med den och skaffa den under villkoret . Låt oss föra det till en annan form, motsvarande betydelse: under villkoret . Låt oss återigen jämföra den dubbla LP-skivan med den och skaffa den under villkoret . Vi tar den till en likvärdig form och skaffar en LP som är identisk med originalet: under villkoret .
lp_solve är programvara med öppen källkod (LGPL GNU GNU General Public License for Libraries ) för att lösa linjära ekvationer. LpSolve har en IDE , inbyggt C API och många andra API:er för Java, AMPL, MATLAB, Wolfram Mathematica, O-Matrix, Sysquake, Scilab, Octave, FreeMat, Euler, Python, Sage, PHP, R och Microsoft Solver Foundation .
![]() | ||||
---|---|---|---|---|
|
_ | Optimeringsmetoder|
---|---|
En-dimensionell |
|
Noll ordning | |
Första beställning | |
andra beställning | |
Stokastisk | |
Linjära programmeringsmetoder _ | |
Icke -linjära programmeringsmetoder |