Simplexmetoden er en algoritme til at løse et optimeringsproblem ved lineær programmering ved at optælle hjørnerne af et konveks polyeder i et flerdimensionalt rum.
Essensen af metoden: konstruktionen af grundlæggende løsninger, hvorpå den lineære funktionelle monotont falder, indtil situationen, hvor de nødvendige betingelser for lokal optimalitet er opfyldt.
I arbejdet med L. V. Kantorovich "Matematiske metoder til organisering og planlægning af produktion" (1939) blev principperne for en ny gren af matematikken, som senere blev kendt som lineær programmering, først fremsat. [en]
Historisk set blev det generelle problem med lineær programmering først stillet i 1947 af George Bernard Dantzig , Marshall Wood og deres samarbejdspartnere i US Air Force Department. På det tidspunkt undersøgte denne gruppe muligheden for at bruge matematiske og relaterede metoder til militære og planlægningsmæssige problemer. Senere blev en forskningsgruppe kaldet Project SCOOP organiseret i luftvåbnet for at udvikle disse ideer. Den første vellykkede løsning af et lineært programmeringsproblem på en SEAC-computer blev udført i januar 1952 [2] .
Problemet med lineær programmering er, at det er nødvendigt at maksimere eller minimere nogle lineære funktioner på et multidimensionelt rum under givne lineære begrænsninger.
Bemærk, at hver af de lineære uligheder på variabler afgrænser et halvt rum i det tilsvarende lineære rum. Som et resultat begrænser alle uligheder nogle konvekse polyeder (muligvis uendelig), også kaldet et polyederkompleks . Ligningen W ( x ) = c , hvor W ( x ) er en maksimeret (eller minimeret) lineær funktional, genererer et hyperplan L(c) . Afhængighed af c genererer en familie af parallelle hyperplaner. Så får det ekstreme problem følgende formulering: det er nødvendigt at finde det største c , således at hyperplanet L(c) skærer polyederen i det mindste i ét punkt. Bemærk, at skæringspunktet mellem et optimalt hyperplan og et polyeder vil indeholde mindst ét toppunkt, og der vil være mere end ét, hvis skæringspunktet indeholder en kant eller en k -dimensionel flade. Derfor kan det maksimale af det funktionelle søges ved polyederens toppunkter. Princippet for simpleksmetoden er, at der vælges et af polyederens toppunkter, hvorefter bevægelsen langs dens kanter fra toppunkt til toppunkt begynder i retning af at øge værdien af det funktionelle. Når overgangen langs kanten fra det aktuelle toppunkt til et andet toppunkt med en højere værdi af det funktionelle er umuligt, vurderes det, at den optimale værdi af c er fundet.
Beregningssekvensen ved simpleksmetoden kan opdeles i to hovedfaser :
I nogle tilfælde er den oprindelige løsning desuden indlysende, eller dens definition kræver ikke komplekse beregninger, for eksempel når alle begrænsninger er repræsenteret af uligheder på formen "mindre end eller lig med" (så er nulvektoren absolut en mulig løsning , selvom det højst sandsynligt er langt fra det mest optimale). I sådanne problemer kan den første fase af simplex-metoden helt udelades. Simplexmetoden er henholdsvis opdelt i enkeltfaset og tofaset .
Overvej følgende lineære programmeringsproblem :
Lad os nu stille dette problem i en tilsvarende forbedret form. Det er nødvendigt at maksimere Z , hvor:
Her er x variable fra den oprindelige lineære funktional, x s er nye variable, der supplerer de gamle på en sådan måde, at uligheden bliver til lighed, c er koefficienterne for den oprindelige lineære funktional, Z er den variabel, der skal maksimeres. Halvrummene og ved skæringspunktet danner et polyeder, der repræsenterer sættet af mulige løsninger. Forskellen mellem antallet af variable og ligninger giver os antallet af frihedsgrader. Kort sagt, hvis vi betragter toppunktet af et polyeder, så er dette antallet af kanter, som vi kan fortsætte med at bevæge os langs. Så kan vi tildele en værdi på 0 til dette antal variable og kalde dem "ikke-grundlæggende" . I dette tilfælde vil de resterende variable blive beregnet entydigt og vil blive kaldt "basic" . Det samme sæt af disse variable kaldes basis . Det resulterende punkt vil være toppunktet i skæringspunktet mellem hyperplanerne svarende til de ikke-grundlæggende variable. For at finde den såkaldte. den indledende tilladelige løsning (den toppunkt, hvorfra vi vil begynde at bevæge os), vil vi tildele værdien 0 til alle indledende variabler x , og vi vil betragte dem som ikke-grundlæggende, og alle nye vil blive betragtet som grundlæggende. I dette tilfælde beregnes den oprindelige tilladte løsning entydigt: .
Nu præsenterer vi trinene i algoritmen. På hvert trin vil vi ændre sæt af basis- og ikke-grundlæggende vektorer (bevæge sig langs kanterne), og matricen vil se sådan ud:
hvor er koefficienterne for vektoren svarende til grundvariablene (variabler svarer til 0), er kolonnerne svarende til grundvariablerne. Matrixen dannet af de resterende kolonner er angivet med . Hvorfor matricen vil have denne form, vil blive forklaret i beskrivelsen af algoritmens trin.
Første skridt .
Vi vælger den oprindelige gyldige værdi, som angivet ovenfor. Ved det første trin , identitetsmatrixen, da de grundlæggende variabler er . er en nulvektor af samme årsager.
Andet trin
Lad os vise, at i udtrykket kun ikke-grundlæggende variable har en koefficient, der ikke er nul. Bemærk, at fra udtrykket er de grundlæggende variabler entydigt udtrykt i form af ikke-grundlæggende, da antallet af grundvariable er lig med antallet af ligninger. Lad være grundlæggende og være ikke-grundlæggende variable ved en given iteration. Ligningen kan omskrives som . Lad os gange det med til venstre: . Vi har således udtrykt grundvariablene i form af ikke-basisvariable, og i udtrykket svarende til venstre side af ligheden har alle grundvariable enhedskoefficienter. Derfor, hvis vi tilføjer lighed til lighed , så vil alle grundvariable i den resulterende lighed have en nulkoefficient - alle grundvariable på formen x vil blive reduceret, og grundvariable på formen x s vil ikke indgå i udtrykket .
Lad os vælge en kant, som vi vil bevæge os langs. Da vi ønsker at maksimere Z , er det nødvendigt at vælge en variabel, der vil mindske udtrykket mest
.
For at gøre dette vælger vi en variabel, der har den største negative koefficient i modul [3] . Hvis der ikke er sådanne variabler, det vil sige, at alle koefficienterne for dette udtryk er ikke-negative, så er vi kommet til det ønskede toppunkt og fundet den optimale løsning. Ellers vil vi begynde at øge denne ikke-grundlæggende variabel, det vil sige bevæge os langs kanten, der svarer til den. Lad os kalde denne variabel input .
Tredje trin
Nu skal vi forstå, hvilken grundvariabel der først vil gå til nul, når inputvariablen øges. For at gøre dette er det nok at overveje systemet:
For faste værdier af ikke-basisvariable er systemet entydigt løseligt med hensyn til basisvariablerne, så vi kan bestemme, hvilken af basisvariablerne, der vil være den første til at nå nul, når inputtet stiger. Lad os kalde denne variabel output . Det vil betyde, at vi har ramt et nyt højdepunkt. Lad os nu bytte de indgående og udgående variable - den indgående vil "indtræde" i basisvariablen, og den udgående variabel vil "forlade" de ikke-grundlæggende. Nu omskriver vi matricen B og vektoren c B i overensstemmelse med de nye sæt af grundlæggende og ikke-grundlæggende variable, hvorefter vi vender tilbage til andet trin. x''
Da antallet af hjørner er begrænset, vil algoritmen en dag slutte. Det fundne toppunkt vil være den optimale løsning.
Hvis i tilstanden af et lineært programmeringsproblem ikke alle begrænsninger er repræsenteret af uligheder af typen "≤", så vil nulvektoren ikke altid være en gyldig løsning. Hver iteration af simplex-metoden er dog en overgang fra et toppunkt til et andet, og hvis intet toppunkt er kendt, kan algoritmen slet ikke startes.
Processen med at finde det indledende toppunkt er ikke meget forskellig fra den enfasede simpleksmetode, men det kan ende med at blive sværere end yderligere optimering.
Alle opgavebegrænsninger ændres i henhold til følgende regler:
I overensstemmelse hermed vil der blive oprettet en række yderligere og hjælpevariable. I den indledende basis vælges yderligere variable med en koefficient på "+1" og alle hjælpevariabler. Forsigtig: den løsning, som dette grundlag svarer til, er ikke tilladt.
Forskelle mellem yderligere og hjælpevariablePå trods af, at både ekstra- og hjælpevariabler er skabt kunstigt og bruges til at skabe det indledende grundlag, er deres værdier i løsningen meget forskellige:
Det vil sige, at en ikke-nul værdi af den ekstra variabel kan (men bør ikke) signalere, at løsningen ikke er optimal . En værdi, der ikke er nul, af hjælpevariablen indikerer, at løsningen er ugyldig .
Efter at betingelsen er blevet ændret, oprettes en hjælpeobjektivfunktion . Hvis hjælpevariablene blev betegnet som , , så definerer vi hjælpefunktionen som
Derefter udføres den almindelige simplex-metode med hensyn til hjælpeobjektivfunktionen. Da alle hjælpevariable øger værdien af , vil de under algoritmen blive udledt en efter en fra basis, og efter hver overgang vil den nye løsning være tættere på sættet af mulige løsninger.
Når den optimale værdi af hjælpeobjektivet er fundet, kan der opstå to situationer:
I det andet tilfælde har vi et acceptabelt grundlag, eller med andre ord en indledende acceptabel løsning. Det er muligt at udføre yderligere optimering under hensyntagen til den oprindelige objektivfunktion, uden at være opmærksom på hjælpevariabler. Dette er anden fase af løsningen.
I den modificerede metode, matrixen
ikke genberegnet, kun matrixen gemmes og genberegnes . Resten af algoritmen ligner den, der er beskrevet ovenfor.
1. Beregn dobbelte variable
2. Kontrol af optimaliteten. er konverteret til .
Kontrollen består i at beregne for alle kolonner . En kolonne med en værdi < 0 kan indtastes i grundlaget.
Vælg ofte minimumsværdien, men for dette skal du iterere over alle kolonnerne.
Vælg oftere en værdi mindre end en given værdi
Hvis en sådan kolonne ikke findes, tages den maksimale fundne absolutte værdi som den fundne, og den tilsvarende kolonne indtastes i grundlaget.
3. Definition af output.
Lad være den input kolonne, der svarer til variablen Grundplanen er løsningen af systemet Forøg .
Multiplicer til venstre med , dvs.
Her er den grundlæggende plan, er udvidelsen af input kolonnen med hensyn til grundlaget.
Find den maksimale værdi , som alle værdier er ikke-negative for. Hvis der kan tages vilkårligt store, er løsningen ubegrænset. Ellers vil et af elementerne gå til nul. Vi udleder den tilsvarende kolonne fra grundlaget.
4. Genberegning af reference (grund)planen.
Vi beregner en ny referenceplan ved hjælp af den allerede givne formel med den fundne værdi .
5. Vi genberegner det omvendte til grundtallet .
Lad være outputkolonnen.
Matrix B kan repræsenteres som
hvor er basismatrixen uden outputkolonnen.
Efter ændring af kolonnen vil basismatrixen se ud
Vi skal finde sådan en matrix
=> => =>
Hvor
Kommentar.
Matrix-genberegning akkumulerer afrundingsfejl. For at undgå store fejl genberegnes matrixen fuldstændig fra tid til anden. Denne proces kaldes "gentagelse".
I den multiplikative version er matrixen ikke gemt, kun faktorer gemt
Når du løser økonomiske problemer, er begrænsningsmatricen ofte sparsom , i hvilket tilfælde den multiplikative mulighed får yderligere fordele - du kan gemme multiplikatorer i en komprimeret form (gem ikke nuller).
LU-dekomponeringen af matrixen kan bruges til at undgå akkumulering af afrundingsfejl .
Med det overvældende antal restriktioner af typen "ulighed" kan metoden med variabel basis bruges . [fire]
Metoden er baseret på, at basismatricen kan repræsenteres som
Dens omvendte har formen
Med relativt små matrixstørrelser kan resten af matrixen muligvis ikke opbevares.
Denne tilgang kan løse problemer med titusindvis af millioner af strenge af begrænsninger (f.eks. fra spilteori).
For at implementere den dobbelte metode er det nødvendigt at gå fra problemet til minimum til problemet til maksimum (eller omvendt) ved at transponere matrixen af koefficienter. Når du flytter fra opgaven til minimum, vil den objektive funktion have formen:
under restriktioner
.
Dualitetssætningen . Hvis den ene af et par af dobbelte problemer har en optimal plan, så har den anden en løsning, og ekstremværdierne af de lineære funktioner af disse problemer er ens.
Hvis den lineære funktion af et af problemerne ikke er begrænset, så har den anden ingen løsning.
Simplex-metoden er overraskende effektiv i praksis, men i 1972 gav Klee og Minty [5] et eksempel, hvor simpleks-metoden itererede over alle hjørnerne af simpleksen og viste metodens eksponentielle konvergens i værste fald. Siden er der for hver variant af metoden fundet et eksempel, hvor metoden opførte sig usædvanligt dårligt.
Observationer og analyser af metodens effektivitet i praktiske anvendelser førte til udviklingen af andre måder at måle effektiviteten på.
Simplexmetoden har en gennemsnitlig polynomisk konvergens med et bredt udvalg af fordeling af værdier i tilfældige matricer. [6] [7]
Beregningseffektivitet estimeres normalt ved hjælp af to parametre:
Som et resultat af numeriske eksperimenter blev følgende resultater opnået.
Antallet af restriktioner påvirker beregningseffektiviteten mere end antallet af variable, derfor bør man, når man formulerer lineære programmeringsproblemer, stræbe efter at reducere antallet af restriktioner, selv om man øger antallet af variable.
En af de mest tidskrævende procedurer i simplex-metoden er søgningen efter en kolonne, der er indført i grundlaget. For bedre konvergens ser det ud til, at du skal vælge en variabel med den bedste residual, men dette kræver en fuld scanning, det vil sige, at du skal gange en kolonne med dobbelte variable (nogle gange kaldet skyggepriser) med alle søjler i matrixen [8] . Denne tilgang fungerer godt til små problemer, der løses manuelt. Ydermere kan streng overholdelse af reglen for valg af den maksimale rest i modul vise sig at være suboptimal med hensyn til det samlede antal iterationer, der kræves for at opnå et ekstremum. Den maksimale forstærkning ved én iteration kan føre til et langsomt fald i værdien af den objektive funktion ved efterfølgende trin og derfor bremse processen med at løse problemet [9] .
Med store begrænsningsmatricer begynder proceduren for at søge efter en inputvariabel at tage meget tid, og man forsøger ofte at undgå at se på alle matrixens kolonner, hvortil følgende metoder kan bruges:
Barriere . Så snart uoverensstemmelsen i variablen er tilstrækkeligt forskellig fra nul (overstiger en vis værdi kaldet barrieren), introduceres variablen i grundlaget. Hvis alle residualerne viste sig at være mindre end barrieren, vælges variablen med den mindste residual som input, mens selve barrieren reduceres efter en eller anden regel (f.eks. halvdelen af den mindste residual). Barrieren bruges ofte med følgende teknik. En lignende tilgang er beskrevet i Murtaughs bog, se afsnit 3.6.2. Delvis evaluering af bogen [10] . Cykelvisning . Søgningen efter en inputvariabel starter fra positionen efter den variabel, der blev introduceret ved den forrige iteration. Gruppeudvælgelse (I Murtaughs bog kaldes denne teknik for multipel evaluering . Se afsnit 3.6.3. Multipel evaluering [11] .) Når man søger på en inputvariabel, vælges ikke én variabel, men flere kandidater. Ved de næste iterationer udføres visning kun blandt de udvalgte kandidater, mens kandidaten kan slettes fra listen. Formål med vægte . Variabler tildeles vægte. Se afsnit 3.6.4 DEVEX- scoringsmetode af Murtafa [12] . Søg efter den stejleste ribbe af Goldfarb og Reed. Se afsnit 3.6.5 Stejleste kantestimationsmetode i Murtaughs bog [13] .Andre tricks er også mulige, såsom Zadeh-reglen .
![]() | |
---|---|
I bibliografiske kataloger |
Optimeringsmetoder _ | |
---|---|
Endimensionel |
|
Nul orden | |
Første ordre | |
anden orden | |
Stokastisk | |
Lineære programmeringsmetoder _ | |
Ikke-lineære programmeringsmetoder |