Lineaarinen ohjelmointi on matemaattinen tieteenala, joka on omistettu teorialle ja menetelmille äärimmäisten ongelmien ratkaisemiseksi lineaaristen yhtälö- ja epäyhtälöysjärjestelmien määrittämissä -ulotteisen vektoriavaruuden joukoissa.
Lineaarinen ohjelmointi (LP) on konveksin ohjelmoinnin erikoistapaus , joka puolestaan on matemaattisen ohjelmoinnin erikoistapaus . Samalla se on perusta useille menetelmille kokonaislukujen ja epälineaaristen ohjelmointiongelmien ratkaisemiseksi . Yksi lineaarisen ohjelmoinnin yleistys on murto-lineaarinen ohjelmointi .
Monet lineaarisen ohjelmointiongelmien ominaisuudet voidaan tulkita myös polyhedrien ominaisuuksiksi ja siten muotoilla ja todistaa geometrisesti.
Yksittäisten talousongelmien matemaattisia tutkimuksia, numeerisen aineiston matemaattista formalisointia tehtiin jo 1800-luvulla . Laajennetun tuotantoprosessin matemaattisessa analyysissä käytettiin algebrallisia suhteita, joiden analyysi suoritettiin differentiaalilaskennan avulla . Tämä mahdollisti yleiskäsityksen ongelmasta.
Talouden kehitys vaati määrällisiä indikaattoreita, ja 1920- luvulla luotiin sektorien välinen tasapaino ( IOB ). Hän oli se, joka toimi sysäyksenä matemaattisten mallien luomisessa ja tutkimisessa. MOB : n kehitys Neuvostoliitossa vuosina 1924-1925 vaikutti taloustieteilijän ja tilastotieteilijän Vasily Vasilievich Leontievin työhön . Hän kehitti sektorien välisen mallin tuotteiden tuotannosta ja jakelusta.
Vuonna 1938 Leonid Vitalievich Kantorovich alkoi tieteellisen kuulemisen aikana tutkia puhtaasti käytännöllistä tehtävää laatia paras kuormauskoneiden lastaussuunnitelma (vanerin luottamus). Tämä tehtävä ei soveltunut perinteisiin menetelmiin. Kävi selväksi, että tehtävä ei ollut satunnainen. [yksi]
Vuonna 1939 Leonid Kantorovich julkaisi teoksen "Matematical Methods of Organisation and Planning of Production", jossa hän muotoili uuden luokan äärimmäisiä ongelmia rajoituksin ja kehitti tehokkaan menetelmän niiden ratkaisemiseksi, mikä loi perustan lineaariseen ohjelmointiin.
Tällaisten ongelmien tutkiminen johti uuden tieteellisen lineaarisen ohjelmoinnin tieteenalan luomiseen ja avasi uuden vaiheen taloudellisten ja matemaattisten menetelmien kehityksessä.
Vuonna 1949 amerikkalainen matemaatikko George Bernard Dantzig kehitti tehokkaan menetelmän lineaaristen ohjelmointiongelmien (LPP) ratkaisemiseksi - simplex-menetelmän . [yksi]
Termi "ohjelmointi" on ymmärrettävä merkityksessä "suunnittelu" (yksi englanninkielisen ohjelmoinnin käännöksistä ). George Danzig, yksi lineaarisen ohjelmoinnin perustajista, ehdotti sitä 1940-luvun puolivälissä, ennen kuin tietokoneita käytettiin lineaarisen optimointiongelmien ratkaisemiseen .
Sisäpistemenetelmän mainitsi ensimmäisen kerran I. I. Dikin vuonna 1967 . [2] . Näitä tutkimuksia jatkettiin, mukaan lukien kotimaiset tutkijat. 1970-luvulla V. G. Zhadan onnistui saamaan tärkeimmät tulokset ja kehittämään yleisen lähestymistavan sisäpistemenetelmien rakentamiseen lineaarisen ja epälineaarisen ohjelmoinnin ongelmien ratkaisemiseksi, jotka perustuvat tilojen muuntamiseen; ehdottaa esteprojektiivisia ja este-newtonilaisia numeerisia menetelmiä.
Lineaarisen ohjelmoinnin yleinen (vakio)ongelma on muotoa [3] olevan lineaarisen tavoitefunktion (lineaarisen muodon) minimin löytämisen ongelma:
Ongelmaa, jossa esiintyy rajoitteita epäyhtälöiden muodossa, kutsutaan peruslineaariseksi ohjelmointiongelmaksi (BLP) .
Lineaarisen ohjelmoinnin ongelmalla on kanoninen muoto , jos pääongelmassa ensimmäisen epäyhtälöjärjestelmän sijasta on yhtälöjärjestelmä, jossa on rajoituksia tasa-arvon muodossa [4] :
Pääongelma voidaan pelkistää kanoniseksi ottamalla käyttöön lisämuuttujia.
Yleisimmän muodon lineaariset ohjelmointiongelmat (ongelmia, joissa on sekalaisia rajoituksia: yhtäläisyydet ja epätasa-arvot, rajoituksista vapaat muuttujat) voidaan pelkistää ekvivalenteiksi (sama ratkaisujoukko) muuttujien muutoksiin ja yhtälöiden korvaamiseen parilla. epätasa-arvo [5] .
On helppo nähdä, että maksimin löytämisen ongelma voidaan korvata minimin löytämisen ongelmalla ottamalla kertoimet päinvastaisella etumerkillä.
Harkitse maksimaalista yhteensopivuusongelmaa kaksiosaisessa kaaviossa : poikia ja tyttöjä on useita, ja jokaiselle pojalle ja tytölle tiedetään pitävätkö he toisistaan. On välttämätöntä solmia naimisiin mahdollisimman monta paria molemminpuolisella sympatialla.
Otetaan käyttöön muuttujat , jotka vastaavat -: nnen pojan ja -: nnen tytön paria ja täyttävät rajoitukset:
tavoitefunktiolla , jossa ovat 1 tai 0 riippuen siitä, ovatko -. poika ja -. tyttö mukavia toisilleen. Voidaan osoittaa, että tämän ongelman optimaalisten ratkaisujen joukossa on kokonaislukuratkaisu. Muuttujat 1 vastaavat pareja, joiden tulisi olla naimisissa.
Olkoon graafi (suunnattu reuna), jossa kunkin reunan kapasiteetti on osoitettu. Ja kaksi kärkeä annetaan: nielu ja lähde. Jokaiselle reunalle on määriteltävä, kuinka paljon nestettä virtaa sen läpi (enintään sen kapasiteetti), jotta kokonaisvirtaus lähteestä nieluon maksimoituu (neste ei voi ilmestyä tai kadota kaikissa pisteissä paitsi lähteessä ja nielussa, vastaavasti).
Otetaan muuttujiksi th reunan läpi virtaavan nesteen määrä . Sitten
missä on th reunan kapasiteetti. Näitä epätasa-arvoja on täydennettävä saapuvan ja lähtevän nesteen määrän yhtäläisyydellä jokaisessa kärjessä, lukuun ottamatta nielua ja lähdettä. Funktiona on luonnollista ottaa lähteellä ulosvirtaavan ja sisäänvirtaavan nesteen määrän erotus.
Edellisen ongelman yleistys on minimikustannusten maksimivirtaus. Tässä tehtävässä kunkin reunan kustannukset on annettu ja maksimivirtojen joukosta on valittava virtaus pienimmällä kustannuksella. Tämä tehtävä rajoittuu kahteen lineaariseen ohjelmointitehtävään: ensin on ratkaistava maksimivirtauksen ongelma ja sitten lisättävä tähän ongelmaan rajoitus , jossa on maksimivirtauksen arvo, ja ratkaista ongelma uudella funktiolla - virtauksen hinta.
Nämä ongelmat voidaan ratkaista nopeammin kuin yleisillä lineaaristen ohjelmointiongelmien ratkaisualgoritmeilla johtuen yhtälöiden ja epäyhtälöiden erityisestä rakenteesta.
On tietty homogeeninen lasti, joka on kuljetettava varastoista tehtaille. Jokaisen varaston osalta tiedetään, kuinka paljon rahtia siinä on , ja kunkin tehtaan rahtitarve tunnetaan. Kuljetuskustannukset ovat verrannollisia etäisyyteen varastosta tehtaaseen (kaikki etäisyydet varastosta -tehtaan tunnetaan). On laadittava halvin kuljetussuunnitelma.
Ratkaisevia muuttujia tässä tapauksessa ovat - varastosta -: nnelle tehtaalle kuljetetun lastin määrä . Ne täyttävät rajoitukset:
Tavoitefunktion muoto on: , joka on minimoitava.
On kokomatriisi . Ensimmäinen pelaaja valitsee numeron väliltä 1 - , toinen - 1 - . Sitten he tarkistavat numerot ja ensimmäinen pelaaja saa pisteitä ja toinen pisteitä ( - ensimmäisen pelaajan valitsema numero - toinen). Meidän on löydettävä optimaalinen strategia ensimmäiselle pelaajalle.
Anna optimaalinen strategia, esimerkiksi ensimmäinen pelaaja, numero on valittava todennäköisyydellä . Sitten optimaalinen strategia on ratkaisu seuraavaan lineaariseen ohjelmointiongelmaan:
jossa funktio halutaan maksimoida . Optimaalisen ratkaisun arvo on pahimman tapauksen odotus ensimmäisen pelaajan voitosta.
Tunnetuin ja laajimmin käytetty käytännössä lineaarisen ohjelmoinnin (LP) yleisen ongelman ratkaisemiseksi on simpleksimenetelmä . Huolimatta siitä, että simpleksimenetelmä on melko tehokas algoritmi, joka on osoittanut hyviä tuloksia sovellettujen LP-ongelmien ratkaisemisessa, se on algoritmi, jonka monimutkaisuus on eksponentiaalinen . Syynä tähän on simplex-menetelmän kombinatorinen luonne, joka luettelee peräkkäin hyväksyttävien ratkaisujen monitahoisen kärjet etsiessään optimaalista ratkaisua.
Neuvostoliiton matemaatikko L. Khachiyan ehdotti vuonna 1979 ensimmäistä polynomialgoritmia , ellipsoidimenetelmää , mikä ratkaisi ongelman, joka oli ollut ratkaisematta pitkään. Ellipsoidimenetelmällä on täysin erilainen ei-kombinatorinen luonne kuin simpleksimenetelmällä. Laskennallisesti tämä menetelmä osoittautui kuitenkin lupaamattomaksi. Siitä huolimatta ongelmien polynomimonimutkaisuus johti kokonaisen luokan tehokkaiden LP-algoritmien luomiseen - sisäpistemenetelmiin , joista ensimmäinen oli N. Karmarkarin vuonna 1984 ehdotettu algoritmi . Tämän tyyppisissä algoritmeissa käytetään jatkuvaa LP-ongelman tulkintaa, jolloin LP-ongelman ratkaisujen polytoopin kärkipisteiden luettelemisen sijaan tehdään haku trajektoreja pitkin tehtävän muuttujien avaruudessa, jotka eivät kulje kärkien läpi. polytooppista. Sisäpistemenetelmä, joka toisin kuin simpleksimenetelmä ohittaa pisteet toleranssialueen sisäpuolelta, käyttää Fiaccon ja McCormickin 1960-luvulla kehittämiä ei-lineaarisen ohjelmoinnin logaritmisen estefunktiomenetelmiä.
Toinen tapa ratkaista LP on käyttää Seidel-algoritmia:
Tällä menetelmällä on asymptoottinen monimutkaisuus .
Jokainen muodon lineaarinen ohjelmointitehtävä [6]
on mahdollista tietyllä tavalla verrata jotain muuta lineaarista ohjelmointiongelmaa, jota kutsutaan duaaliksi tai konjugaatiksi suhteessa alkuperäiseen tai suoraan. Yhteys alkuperäisen ja kaksoisongelman välillä on pääasiassa siinä, että toisen ratkaisu voidaan saada suoraan toisen ratkaisusta. Määritellään kaksoisongelma suhteessa alkuperäiseen lineaariseen ohjelmointitehtävään
Alkutehtävä | Kaksoisongelma |
---|---|
Jos vektorit ja ovat hyväksyttäviä ratkaisuja alku- ja kaksoisongelmiin, niin , ja tasa-arvo saavutetaan jos ja vain jos ja ovat optimaalisia ratkaisuja. Jos toisen kaksoistehtäväparin tavoitefunktiota ei ole rajoitettu (ylhäältä alkuperäiselle, alhaalta kaksoistehtävälle), toisen ongelman toteuttamiskelpoisten ratkaisujen alue on tyhjä.
Jos vektorit ja ovat suorien ja kaksoisongelmien optimaalisia ratkaisuja, niin seuraavat yhtälöt ovat tosia
Toisin sanoen primaali- ja kaksoisongelmien optimaalisille ratkaisuille ei-kireät (tiukka eriarvoisuus täyttyy) rajoitukset vastaavat nollaa muuttujaa ja nollasta poikkeavat muuttujat (sisältyvät tukisuunnitelmaan) vastaavat tiukkaa (ei-tiukka epäyhtälö toteutuu). tasa-arvon) rajoituksina. Mutta tiukkoja rajoituksia vastaavia muuttujia voi olla nolla.
Nämä kaksoisratkaisujen ominaisuudet voivat merkittävästi lyhentää ratkaisuaikaa, jos joudut ratkaisemaan ongelman useilla rajoituksilla, jotka ovat paljon suurempia kuin muuttujien lukumäärä. Sitten on mahdollista, kun kaksoistehtävä on ratkaistu, löytää sen tukisuunnitelma, jonka jälkeen, kun suorassa tehtävässä on valittu vain tukisuunnitelmaa vastaavat rajoitukset (kaikki nämä rajoitukset on jännityttävä), ratkaista tavallinen lineaarinen yhtälöjärjestelmä. heille.
Lause. Dual LP -ongelman duaali on primaali-LP-ongelma.
Todistus: Harkitse muodon suoraa LP: tä ehdon alla . Yhdistetään kaksois-LP siihen ja hankitaan ehdolla . Viedään se toiseen muotoon, merkitykseltään vastaava: ehdolla . Verrataanpa taas kaksois-LP:tä siihen ja saadaan ehdolla . Muutamme sen vastaavaan muotoon ja saamme alkuperäisen kanssa identtisen LP: n: ehdolla .
lp_solve on avoimen lähdekoodin ohjelmisto (LGPL GNU GNU General Public License for Libraries ) lineaaristen yhtälöiden ratkaisemiseen. LpSolvessa on IDE , natiivi C API ja monet muut sovellusliittymät Javalle, AMPL:lle, MATLAB:lle, Wolfram Mathematicalle, O-Matrixille, Sysquaken, Scilabille, Octavelle, FreeMatille, Eulerille, Pythonille, Sagelle, PHP:lle, R:lle ja Microsoft Solver Foundationille. .
Sanakirjat ja tietosanakirjat | ||||
---|---|---|---|---|
|
Optimointimenetelmät _ | |
---|---|
Yksiulotteinen |
|
Nolla järjestys | |
Ensimmäinen tilaus | |
toinen tilaus | |
Stokastinen | |
Lineaariset ohjelmointimenetelmät _ | |
Epälineaariset ohjelmointimenetelmät |