Yksinkertainen menetelmä

Ei pidä sekoittaa "simplex-menetelmään" - menetelmään mielivaltaisen funktion optimoimiseksi. Katso Nelder-Meadin menetelmä

Simpleksimenetelmä  on algoritmi lineaarisen ohjelmoinnin optimointitehtävän ratkaisemiseksi laskemalla kuperan monitahoisen pisteet moniulotteisessa avaruudessa.

Menetelmän ydin: perusratkaisujen rakentaminen, joissa lineaarinen funktionaalisuus pienenee monotonisesti, kunnes tilanne, jossa paikallisen optimiteetin välttämättömät ehdot täyttyvät.

L. V. Kantorovichin teoksessa "Tuotannon organisoinnin ja suunnittelun matemaattiset menetelmät" (1939) esitettiin ensimmäisen kerran uuden matematiikan haaran periaatteet, joka myöhemmin tunnettiin nimellä lineaarinen ohjelmointi. [yksi]

Historiallisesti yleisen lineaarisen ohjelmoinnin ongelman esittivät ensimmäisen kerran vuonna 1947 George Bernard Dantzig , Marshall Wood ja heidän työtoverinsa Yhdysvaltain ilmavoimien osastolla. Tuolloin tämä ryhmä tutki mahdollisuutta käyttää matemaattisia ja niihin liittyviä menetelmiä sotilaallisiin ja suunnitteluongelmiin. Myöhemmin ilmavoimiin perustettiin Project SCOOP -tutkimusryhmä kehittämään näitä ideoita. Ensimmäinen onnistunut ratkaisu lineaarisen ohjelmoinnin ongelmaan SEAC-tietokoneella tehtiin tammikuussa 1952 [2] .

Kuvaus

Lineaarisen ohjelmoinnin ongelmana on, että on tarpeen maksimoida tai minimoida jokin lineaarinen funktio moniulotteisessa avaruudessa tietyillä lineaarisilla rajoituksilla.

Huomaa, että jokainen muuttujien lineaarinen epäyhtälö rajoittaa puoliavaruutta vastaavassa lineaarisessa avaruudessa. Tämän seurauksena kaikki epäyhtälöt rajoittavat jotakin kuperaa monitahoista (mahdollisesti ääretöntä), jota kutsutaan myös monitahoiseksi kompleksiksi . Yhtälö W ( x ) = c , jossa W ( x ) on maksimoitu (tai minimoitu) lineaarinen funktio, generoi hypertason L(c) . Riippuvuus c : stä luo rinnakkaisten hypertasojen perheen. Sitten äärimmäinen ongelma saa seuraavan formulaation: vaaditaan suurin c niin, että hypertaso L(c) leikkaa monitahoisen ainakin yhdessä pisteessä. Huomaa, että optimaalisen hypertason ja monitahoisen leikkauspisteessä on vähintään yksi kärki, ja niitä on enemmän kuin yksi, jos leikkauskohta sisältää reunan tai k - ulotteisen pinnan. Siksi funktionaalin maksimi voidaan etsiä monitahoisen kärjestä. Simpleksimenetelmän periaate on, että valitaan yksi monitahoisen kärjestä, jonka jälkeen liike sen reunoja pitkin kärjestä kärkeen alkaa funktionaalin arvon kasvun suuntaan. Kun siirtyminen reunaa pitkin nykyisestä kärjestä toiseen kärkeen, jolla on korkeampi funktion arvo, katsotaan, että c :n optimaalinen arvo on löydetty.

Simplex-menetelmällä suoritettavat laskelmat voidaan jakaa kahteen päävaiheeseen :

  1. löytää mahdollisten ratkaisujen joukon alkupiste,
  2. peräkkäinen siirtyminen kärjestä toiseen, mikä johtaa tavoitefunktion arvon optimointiin.

Lisäksi joissain tapauksissa alkuperäinen ratkaisu on ilmeinen tai sen määrittely ei vaadi monimutkaisia ​​laskelmia, esimerkiksi kun kaikki rajoitukset esitetään epäyhtälöillä, jotka ovat muotoa "pienempi tai yhtä suuri" (niin nollavektori on ehdottomasti käyttökelpoinen ratkaisu , vaikka todennäköisimmin se on kaukana optimaalisimmasta). Tällaisissa ongelmissa simplex-menetelmän ensimmäinen vaihe voidaan jättää kokonaan pois. Yksivaiheinen menetelmä on jaettu yksivaiheiseen ja kaksivaiheiseen .

Simpleksimenetelmän algoritmi

Vahvistettu ongelmanselvitys

Harkitse seuraavaa lineaarista ohjelmointiongelmaa :

Esitetään nyt tämä ongelma vastaavassa parannetussa muodossa. On tarpeen maksimoida Z , jossa:

Tässä x  ovat muuttujia alkuperäisestä lineaarifunktiosta, x s  ovat uusia muuttujia, jotka täydentävät vanhoja siten, että epäyhtälö muuttuu tasa-arvoksi, c  ovat alkuperäisen lineaarifunktion kertoimet, Z  on maksimoitava muuttuja. Puoliavaruudet ja leikkauspiste muodostavat monitahoisen, joka edustaa mahdollisia ratkaisuja. Muuttujien lukumäärän ja yhtälöiden välinen ero antaa meille vapausasteiden lukumäärän. Yksinkertaisesti sanottuna, jos otamme huomioon monitahoisen kärjen, tämä on niiden reunojen lukumäärä, joita pitkin voimme jatkaa liikkumista. Sitten voimme antaa tälle muuttujien lukumäärälle arvon 0 ja kutsua niitä "ei-perus" . Tässä tapauksessa loput muuttujat lasketaan yksiselitteisesti ja niitä kutsutaan "perus" . Samaa näiden muuttujien joukkoa kutsutaan kantaksi . Tuloksena oleva piste on ei-perusmuuttujia vastaavien hypertasojen leikkauspiste. Löytääkseen ns. Alkuperäisen hyväksyttävän ratkaisun (kärkipisteen, josta lähdemme liikkumaan), annamme arvon 0 kaikille alkumuuttujille x ja pidämme niitä ei-perusmuuttujina ja kaikkia uusia pidetään perusmuuttujina. Tässä tapauksessa alkuperäinen hyväksyttävä ratkaisu lasketaan yksiselitteisesti: .

Algoritmi

Nyt esittelemme algoritmin vaiheet. Jokaisessa vaiheessa muutamme perus- ja ei-perusvektoreiden joukot (siirrämme reunoja pitkin), ja matriisi näyttää tältä:

missä ovat perusmuuttujia vastaavan  vektorin kertoimet (muuttujat vastaavat 0),  ovat perusmuuttujia vastaavat sarakkeet . Muiden sarakkeiden muodostama matriisi on merkitty . Miksi matriisilla on tämä muoto, selitetään algoritmin vaiheiden kuvauksessa.

Ensimmäinen askel .

Valitsemme alkuperäisen kelvollisen arvon, kuten yllä on osoitettu. Ensimmäisessä vaiheessa  identiteettimatriisi, koska perusmuuttujat ovat .  on nollavektori samoista syistä.

Toinen vaihe

Osoitetaan, että lausekkeessa vain ei-perusmuuttujilla on nollasta poikkeava kerroin. Huomaa, että lausekkeesta perusmuuttujat ilmaistaan ​​yksiselitteisesti ei-perusmuuttujilla, koska perusmuuttujien lukumäärä on yhtä suuri kuin yhtälöiden lukumäärä. Olkoon  perus- ja  ei-perusmuuttujia tietyssä iteraatiossa. Yhtälö voidaan kirjoittaa uudelleen muotoon . Kerrotaan se vasemmalla olevalla: . Esitimme siis perusmuuttujat ei-perusmuuttujina, ja yhtälön vasenta puolta vastaavassa lausekkeessa kaikilla perusmuuttujilla on yksikkökertoimet. Jos siis lisätään yhtäläisyys yhtäläisyyteen , niin tuloksena olevassa yhtäläisyydessä kaikilla perusmuuttujilla on nollakerroin - kaikki x -muodon perusmuuttujat pienennetään, eikä muotoa x s olevia perusmuuttujia sisällytetä lausekkeeseen .

Valitaan reuna, jota pitkin liikumme. Koska haluamme maksimoida Z , on tarpeen valita muuttuja, joka vähentää lauseketta eniten

.

Tätä varten valitsemme muuttujan, jolla on suurin negatiivinen kerroin moduulissa [3] . Jos tällaisia ​​muuttujia ei ole, eli kaikki tämän lausekkeen kertoimet ovat ei-negatiivisia, olemme päässeet haluttuun kärkeen ja löytäneet optimaalisen ratkaisun. Muuten alamme kasvattaa tätä ei-perusmuuttujaa, eli liikkua sitä vastaavaa reunaa pitkin. Kutsutaan tätä muuttujaa syötteeksi .

Kolmas vaihe

Nyt meidän on ymmärrettävä, mikä perusmuuttuja menee ensin nollaan, kun syöttömuuttuja kasvaa. Tätä varten riittää, että harkitset järjestelmää:

Ei-perusmuuttujien kiinteille arvoille järjestelmä on yksiselitteisesti ratkaistavissa perusmuuttujien suhteen, joten voimme määrittää, mikä perusmuuttujista saavuttaa ensimmäisenä nollan syötteen kasvaessa. Kutsutaan tätä muuttujaa ulostuloksi . Tämä tarkoittaa, että olemme saavuttaneet uuden huipun. Vaihdetaan nyt saapuvat ja lähtevät muuttujat - saapuva "syöttää" perusmuuttujaan ja lähtevä "lähtee" ei-perusmuuttujat. Nyt kirjoitetaan matriisi B ja vektori c B uusien perus- ja ei-perusmuuttujien joukkojen mukaisesti, minkä jälkeen palataan toiseen vaiheeseen. x''

Koska pisteiden määrä on äärellinen, algoritmi jonain päivänä päättyy. Löytynyt kärkipiste on optimaalinen ratkaisu.

Kaksivaiheinen simpleksimenetelmä

Syitä käyttää

Jos lineaarisen ohjelmointitehtävän tilanteessa kaikkia rajoituksia ei edusta "≤"-tyyppiset epäyhtälöt, niin nollavektori ei aina ole kelvollinen ratkaisu. Yksipuolisen menetelmän jokainen iteraatio on kuitenkin siirtymä pisteestä toiseen, ja jos kärkeä ei tunneta, algoritmia ei voida käynnistää ollenkaan.

Alkupisteen löytämisprosessi ei eroa paljoa yksivaiheisesta simpleksimenetelmästä, mutta se voi olla vaikeampaa kuin jatkooptimointi.

Rajoituksen muutokset

Kaikkia tehtävärajoituksia muokataan seuraavien sääntöjen mukaisesti:

Tämän mukaisesti luodaan joukko lisä- ja apumuutujia. Aluksi valitaan lisämuuttujat kertoimella "+1" ja kaikki apumuuttujat. Varoitus: Ratkaisu, jota tämä peruste vastaa, ei ole hyväksyttävä.

Erot lisä- ja lisämuuttujien välillä

Huolimatta siitä, että sekä lisä- että apumuuttujat luodaan keinotekoisesti ja niitä käytetään alkuperäisen perustan luomiseen, niiden arvot ratkaisussa ovat hyvin erilaisia:

  • lisämuuttujat kertovat, kuinka "alikäytössä" niiden vastaava rajoitus on. Lisämuuttujan arvo, joka on yhtä suuri kuin nolla, vastaa rajoitteen oikean ja vasemman osan arvojen yhtäläisyyttä.
  • apumuuttujat kertovat kuinka kaukana annettu ehto on hyväksyttävästä (suhteessa tiettyyn rajoitteeseen). Jos apumuuttujan arvo on suurempi kuin nolla, tämä ratkaisu ei täytä tiettyä rajoitusta, joten se ei ole kelvollinen.

Toisin sanoen lisämuuttujan nollasta poikkeava arvo voi (mutta ei saa) osoittaa, että ratkaisu ei ole optimaalinen . Apumuuttujan nollasta poikkeava arvo osoittaa, että ratkaisu on virheellinen .

Päätöksen vaiheet

Kun ehtoa on muutettu, luodaan aputavoitteen funktio . Jos apumuuttujat nimettiin , niin määritämme apufunktioksi

.

Tämän jälkeen suoritetaan tavallinen simpleksimenetelmä aputavoitteen funktion suhteen. Koska kaikki apumuuttujat lisäävät arvoa , ne johdetaan algoritmin aikana yksitellen perusteesta ja jokaisen siirtymän jälkeen uusi ratkaisu on lähempänä toteutettavissa olevien ratkaisujen joukkoa.

Kun aputavoitteen funktion optimaalinen arvo löytyy, voi syntyä kaksi tilannetta:

  • optimaalinen arvo on suurempi kuin nolla. Tämä tarkoittaa, että ainakin yksi apumuuttujista jäi pohjaan. Tässä tapauksessa voimme päätellä, että tähän lineaariseen ohjelmointiongelmaan ei ole toteutettavissa olevia ratkaisuja.
  • optimaalinen arvo on nolla. Tämä tarkoittaa, että kaikki apumuuttujat on poistettu kannasta ja nykyinen ratkaisu on voimassa.

Toisessa tapauksessa meillä on hyväksyttävä peruste tai toisin sanoen ensimmäinen hyväksyttävä ratkaisu. On mahdollista suorittaa lisäoptimointi ottamalla huomioon alkuperäinen tavoitefunktio, huomioimatta apumuuttujia. Tämä on ratkaisun toinen vaihe.

Muokattu simpleksimenetelmä

Modifioidussa menetelmässä matriisi

ei lasketa uudelleen, vain matriisi tallennetaan ja lasketaan uudelleen . Loppuosa algoritmista on samanlainen kuin yllä kuvattu.

1. Laske kaksoismuuttujat

2. Optimiteetin tarkistaminen. muunnetaan muotoon .

Tarkistuksessa lasketaan kaikki sarakkeet . Perusteelle voidaan syöttää sarake, jonka arvo on < 0.

Valitse usein vähimmäisarvo, mutta tätä varten sinun on iteroitava kaikki sarakkeet.

Valitse useammin arvo, joka on pienempi kuin jokin annettu arvo

Jos tällaista saraketta ei löydy, suurimmaksi löydetty absoluuttinen arvo otetaan löydetyksi ja vastaava sarake syötetään perusteeseen.

3. Tuotoksen määritelmä.

Olkoon  muuttujaa vastaava syöttösarake.Perussuunnitelma on ratkaisu järjestelmään Increase .

Kerro vasemmalla puolella , eli .

Tässä  on perussuunnitelma,  on laajennus tulosarakkeen kannalta perusteella.

Etsi suurin arvo , jonka kaikki arvot eivät ole negatiivisia. Jos voidaan ottaa mielivaltaisen suuri, ratkaisu on rajaton. Muuten yksi elementeistä menee nollaan. Päättelemme vastaavan sarakkeen perusteesta.

4. Viite- (perus)suunnitelman uudelleenlaskenta.

Laskemme uuden vertailusuunnitelman käyttämällä jo annettua kaavaa löydetyllä arvolla .

5. Laskemme käänteisen uudelleen kantaan .

Antaa olla  tulossarake.

Matriisi B voidaan esittää muodossa

missä  on perusmatriisi ilman tulossaraketta.

Sarakkeen vaihtamisen jälkeen perusmatriisi näyttää tältä

Meidän on löydettävä sellainen matriisi

=> => =>

Missä

Kommentti.

Matriisin uudelleenlaskenta kerää pyöristysvirheitä. Suurten virheiden välttämiseksi matriisi lasketaan kokonaan uudelleen ajoittain. Tätä prosessia kutsutaan "toistoksi".

Yksipuolisen menetelmän moninkertainen versio

Kertovassa versiossa matriisia ei tallenneta, vain tekijät tallennetaan

Taloudellisia ongelmia ratkaistaessa rajoitematriisi on usein harva , jolloin kertova vaihtoehto saa lisäetuja - voit tallentaa kertoimia pakatussa muodossa (älä tallenna nollia).

Muita simpleksimenetelmän muunnelmia

Matriisin LU - hajotusta voidaan käyttää pyöristysvirheiden kertymisen välttämiseksi .

"Epäyhtälö"-tyyppisten rajoitusten ylivoimaisella määrällä voidaan käyttää muuttujapohjaista menetelmää . [neljä]

Menetelmä perustuu siihen, että kantamatriisi voidaan esittää muodossa

Sen käänteisversiolla on muoto

Suhteellisen pienillä matriisikooilla matriisin loppuosaa ei ehkä tallenneta.

Tämä lähestymistapa voi ratkaista ongelmia kymmenillä miljoonilla rajoituksilla (esimerkiksi peliteorian perusteella).

Dual simplex -menetelmä

Kaksoismenetelmän toteuttamiseksi on välttämätöntä siirtyä ongelmasta minimiin ongelmaan maksimiin (tai päinvastoin) transponoimalla kertoimien matriisi. Kun siirrytään tehtävästä minimiin, tavoitefunktio on muodossa:

rajoitusten alla

.

Kaksinaisuuslause . Jos toisella kaksoistehtäväparista on optimaalinen suunnitelma, niin toisella on ratkaisu, ja näiden tehtävien lineaarifunktioiden ääriarvot ovat yhtä suuret.

Jos yhden ongelman lineaarista funktiota ei ole rajoitettu, toisella ei ole ratkaisua.

Laskennallinen tehokkuus

Simpleksimenetelmä on yllättävän tehokas käytännössä, mutta vuonna 1972 Klee ja Minty [5] antoivat esimerkin, jossa simpleksimenetelmä iteroitui kaikki simplexin kärjet, mikä osoittaa menetelmän eksponentiaalisen konvergenssin pahimmassa tapauksessa. Sen jälkeen jokaiselle menetelmän muunnokselle on löydetty esimerkki, jossa menetelmä on toiminut poikkeuksellisen huonosti.

Havainnot ja analyysi menetelmän tehokkuudesta käytännön sovelluksissa johtivat muiden tapojen kehittämiseen tehokkuuden mittaamiseksi.

Simplex-menetelmällä on keskimääräinen polynomikonvergenssi , jossa on laaja valikoima arvojakaumia satunnaismatriiseissa. [6] [7]

Laskennallinen tehokkuus arvioidaan yleensä kahdella parametrilla:

  • ratkaisun saamiseksi tarvittavien iteraatioiden lukumäärä;
  • koneen aikakustannukset.

Numeeristen kokeiden tuloksena saatiin seuraavat tulokset.

  1. Iteraatioiden määrä lineaarisen ohjelmoinnin ongelmien ratkaisemisessa vakiomuodossa rajoituksilla ja muuttujilla on välillä ja . Keskimääräinen iteraatioiden määrä . Iteraatioiden lukumäärän yläraja on .
  2. Tarvittava koneen aika on verrannollinen .

Rajoitusten määrä vaikuttaa laskennan tehokkuuteen enemmän kuin muuttujien lukumäärä, joten lineaarisia ohjelmointiongelmia muotoiltaessa tulee pyrkiä vähentämään rajoitusten määrää, vaikka muuttujien määrää lisäämällä.

Menetelmiä tehokkuuden parantamiseksi

Yksi aikaa vievistä toimenpiteistä simplex-menetelmässä on kantaan lisätyn sarakkeen etsiminen. Paremman konvergenssin saavuttamiseksi näyttää siltä, ​​​​että sinun on valittava muuttuja, jolla on paras jäännös, mutta tämä vaatii täyden skannauksen, eli sinun on kerrottava kaksoismuuttujien sarake (jota joskus kutsutaan varjohinnoiksi) matriisin kaikilla sarakkeilla. [8] . Tämä lähestymistapa toimii hyvin pienissä ongelmissa, jotka ratkaistaan ​​manuaalisesti. Lisäksi moduulin maksimijäännösarvon valintasäännön tiukka noudattaminen voi osoittautua optimaalista ääripään saamiseksi vaadittavien iteraatioiden kokonaismäärän kannalta. Maksimivahvistus yhdellä iteraatiolla voi johtaa tavoitefunktion arvon hitaaseen laskuun seuraavissa vaiheissa ja siten hidastaa ongelman ratkaisuprosessia [9] .

Suurilla rajoitematriiseilla syötemuuttujan etsiminen alkaa viedä paljon aikaa, ja usein yritetään välttää matriisin kaikkien sarakkeiden katsomista, jolloin voidaan käyttää seuraavia menetelmiä:

Este . Heti kun muuttujan poikkeama poikkeaa riittävästi nollasta (ylittää tietyn arvon, jota kutsutaan esteeksi), muuttuja lisätään kantaan. Jos kaikki jäännökset osoittautuivat estettä pienemmiksi, syötteeksi valitaan muuttuja, jolla on pienin jäännös, kun taas itse este pienennetään jonkin säännön mukaan (esimerkiksi puolet pienimmästä jäännöksestä). Estettä käytetään usein seuraavan tekniikan kanssa. Samanlainen lähestymistapa on kuvattu Murtaughin kirjassa, katso kohta 3.6.2. Kirjan osittainen arviointi [10] . Pyöräilynäkymä . Syötemuuttujan haku alkaa edellisessä iteraatiossa esiteltyä muuttujaa seuraavasta paikasta. Ryhmävalinta (Murtaughin kirjassa tätä tekniikkaa kutsutaan moninkertaiseksi arvioimiseksi . Katso kohta 3.6.3. Moniarviointi [11] .) Syöttömuuttujaa haettaessa ei valita yhtä muuttujaa, vaan useita ehdokkaita. Seuraavissa iteraatioissa katselu suoritetaan vain valittujen ehdokkaiden kesken, kun taas ehdokas voidaan poistaa listalta. Vaakojen tarkoitus . Muuttujille on annettu painoarvot. Katso kohta 3.6.4 Murtafan DEVEX- pisteytysmenetelmä [12] . Etsi Goldfarbin ja Reedin jyrkimpiä kylkiluita. Katso kohta 3.6.5 Jyrkimmän reunan estimointimenetelmä Murtaughin kirjassa [13] .

Myös muut temput ovat mahdollisia, kuten Zadeh-sääntö .

Muistiinpanot

  1. Kantorovich L. V. Matemaattiset menetelmät tuotannon suunnittelun järjestämiseen // Leningradin valtionyliopiston painos. - Leningrad, 1939.
  2. S. Gass. Lineaarinen ohjelmointi (menetelmät ja sovellukset). - Moskova: Valtion fyysisen ja matemaattisen kirjallisuuden kustantaja, 1961. - (Insinöörin fyysinen ja matemaattinen kirjasto).
  3. Tämä suositus löytyy usein oppikirjoista, mutta se ei aina pidä paikkaansa. Katso #Menetelmät tehokkuuden parantamiseksi
  4. V.I. Muravjov. Jaksottainen parannusmenetelmä vaihtelevan koon perusteella lineaarisen ohjelmoinnin ongelmiin. — Kokoelma "Tilastollisen mallinnuksen toimintojen ja menetelmien tutkimus". - Leningrad: Leningradin valtionyliopisto, 1972.
  5. Klee, Victor; Minty, George J. Kuinka hyvä simplex-algoritmi on? // Inequalities III (Proceedings of the Third Symposium on Inequalities, joka pidettiin Kalifornian yliopistossa Los Angelesissa, Kaliforniassa, 1.–9. syyskuuta 1969, omistettu Theodore S. Motzkinin muistolle)  (englanniksi) / Shisha, Oved. - New York-Lontoo: Academic Press , 1972. - P. 159-175.
  6. Alexander Schrijver, Lineaarisen ja kokonaislukuohjelmoinnin teoria . John Wiley & sons, 1998, ISBN 0-471-98232-6 (matemaattinen)
  7. Simpleksialgoritmi kestää keskimäärin D askelta kuutiolle. Borgwardt, Karl-Heinz. Simpleksimenetelmä : Todennäköisyysanalyysi  . - Berlin: Springer-Verlag , 1987. - Voi. 1. - P.xii+268. - (Algoritmit ja kombinatoriikka (tutkimus- ja tutkimustekstit)). - ISBN 3-540-17096-0 .
  8. Suositus residuaalin suurimman moduloarvon valitsemiseksi löytyy usein simplex-menetelmän kuvauksista, esimerkiksi artikkeleista Simplex-menetelmän algoritmi Arkistoitu 17. maaliskuuta 2018 Wayback Machinessa ja SIMPLEX LINEAR PROGRAMMING METHOD Arkistoitu 17. maaliskuuta 2018 Wayback Machinessa
  9. Shamray, 2009 , s. 44.
  10. Murtaf, 1984 .
  11. Murtaf, 1984 , s. 61.
  12. Murtaf, 1984 , s. 62.
  13. Murtaf, 1984 , s. 63.

Kirjallisuus

  • Hemdy A. Taha. Luku 3. Simplex-menetelmä // Johdatus operaatiotutkimukseen = Operations Research: An Introduction. - 7. painos - M . : "Williams" , 2007. - S. 95-141. — ISBN 0-13-032374-8 .
  • Akulich I.L. Luku 1. Lineaarisen ohjelmoinnin tehtävät // Matemaattinen ohjelmointi esimerkeissä ja tehtävissä. - M . : Korkeakoulu , 1986. - 319 s. — ISBN 5-06-002663-9 .
  • Thomas H. Kormen ym. Luku 29 Lineaarinen ohjelmointi // Algoritmit: Konstruointi ja analyysi = ALGORITMEIN JOHDANTO. - 2. painos - M .: "Williams" , 2006. - S. 1296. - ISBN 5-8459-0857-4 .
  • V. N. Shevchenko, N. Yu. Zolotykh. Lineaarinen ja kokonaisluku Lineaarinen ohjelmointi . - Nižni Novgorod: Nizhny Novgorod State Universityn kustantamo. N.I. Lobachevsky, 2004. - P.  63 -66 (osio 2.8. Huomautuksia LLP:n ratkaisemisen monimutkaisuudesta). — ISBN 5-85746-761-6 .
  • Shamray Natalya Borisovna. Käytännön lineaarinen ohjelmointi ekonomisteille . - Vladivostok: Far Eastern Universityn kustantamo, 2009. - S. 44. - ISBN 978-5-7444-2215-8 . Arkistoitu 17. maaliskuuta 2018 Wayback Machinessa
  • Murtaf B. Moderni lineaarinen ohjelmointi. - Moskova: Mir, 1984.

Linkit