Kokonaislukuohjelmointi

Kokonaislukuohjelmointiongelma on matemaattinen optimointi- tai tyydyttävyysongelma , jossa joidenkin tai kaikkien muuttujien on oltava kokonaislukuja [1] . Usein termillä tarkoitetaan lineaarista kokonaislukuohjelmointia (ILP), jossa tavoitefunktio ja rajoitukset (kokonaislukuvaatimusta lukuun ottamatta) ovat lineaarisia .

Kokonaislukuohjelmointi on NP-kova ongelma . Erikoistapaus, 0-1 kokonaisluku lineaarinen ohjelmointi, jossa muuttujat ottavat arvot 0 tai 1, on yksi Karpin 21 NP-täydestä tehtävästä .

Kanoniset ja vakiotyypit CLP

Kokonaislukulineaarisen ohjelmoinnin ongelma kanonisessa muodossa ilmaistaan ​​[2]

maksimoida
olosuhteissa
ja ,

ja vakiomuodossa

maksimoida
olosuhteissa
ja

missä ovat vektorit ja on matriisi, jonka kaikki elementit ovat kokonaislukuja. Huomaa, että kuten lineaarisen ohjelmoinnin tapauksessa, ILP-ongelma, joka ei ole vakiomuodossa, voidaan pelkistää vakiomuotoon poistamalla epätasa-arvot ottamalla käyttöön lisämuuttujia ja keinotekoisia muuttujia ja korvaamalla muuttujat, jotka eivät ole ei-negatiivisuusrajoituksen alaisia, kahdella. muuttujia.

Esimerkki

Oikealla oleva kuva esittää seuraavan tehtävän.

Kelvolliset kokonaislukupisteet näytetään punaisella ja punaiset katkoviivat osoittavat näiden pisteiden kuperaa runkoa, joka on pienin monikulmio, joka sisältää kaikki nämä pisteet. Siniset viivat yhdessä koordinaattiakselien kanssa määrittelevät lineaarisen vaimennuspolygonin, joka saadaan epäyhtälöillä ilman kokonaislukuvaatimusta. Optimoinnin tavoitteena on siirtää mustaa katkoviivaa niin, että se on mahdollisimman korkealla, mutta koskettaa monikulmiota. Optimaaliset ratkaisut kokonaislukutehtävälle ovat pisteet ja , joissa tavoitefunktio saa arvon 2. Ainoa ratkaisu heikennettyyn (lineaariseen) ongelmaan on piste , jossa tavoitefunktio saa arvon 2.8. Huomaa, että jos pyöristetään lineaarisen ohjelmointitehtävän ratkaisu lähimpään kokonaislukuun, ratkaisu ei kelpaa ILP:lle.

Todistus NP-kovuudesta

Seuraava argumentti on kärjen peitteen minimointiongelman pelkistys kokonaislukuohjelmointitehtäväksi, joka todistaa NP-kovuuden.

Antaa olla suuntaamaton kaavio. Määrittelemme lineaarisen ohjelmoinnin ongelman seuraavasti:

Ottaen huomioon vaatimuksen, että ne ottavat arvot 0 tai 1, mikä tahansa toteuttamiskelpoinen ratkaisu kokonaislukuohjelmointiin on kärkien osajoukko. Ensimmäinen rajoitus tarkoittaa, että vähintään yksi kunkin reunan pää sisältyy osajoukkoon. Siten ratkaisu antaa huippupisteen peiton. Lisäksi, kun annetaan kärjen peite C, voimme antaa arvon 1 mille tahansa ja 0 mille tahansa , mikä antaa meille kelvollisen ratkaisun kokonaislukuohjelmointiongelmaan. Tästä voidaan päätellä, että minimoimalla summa saadaan myös minimipistepeite [3] .

Vaihtoehdot

MILP :ssä ( Mixed Integer Linear Programming ) vain joidenkin muuttujien on oltava kokonaislukuja, kun taas muut muuttujat voivat olla ei-kokonaislukuja.

Boolen ohjelmoinnissa muuttujien on saatava arvot 0 tai 1. Huomaa, että mikä tahansa rajoitettu kokonaislukumuuttuja voidaan ilmaista loogisten muuttujien yhdistelmänä [4] . Jos esimerkiksi on olemassa kokonaislukumuuttuja , se voidaan ilmaista loogisina muuttujina:

Sovellukset

Kokonaislukumuuttujien käyttämiselle lineaaristen ohjelmointiongelmien mallintamiseen on kaksi pääasiallista syytä:

  1. Kokonaislukumuuttujat edustavat määriä, jotka voivat olla vain kokonaislukuja. Esimerkiksi 3,7 autoa ei ole mahdollista rakentaa.
  2. Kokonaislukumuuttujat edustavat päätöksiä, jotka ottavat arvot 0 tai 1.

Nämä käytännöt ovat yleisiä, joten lineaarista kokonaislukuohjelmointia voidaan käyttää monilla alueilla, joista joitain käsitellään lyhyesti alla.

Tuotannon suunnittelu

Sekakokonaislukuohjelmoinnilla on monia sovelluksia valmistuksessa, mukaan lukien aikataulusimulaatiot. Yksi esimerkki esiintyy maatalouden tuotannon suunnittelussa sellaisten tuotteiden tuotoksen määrittämiseksi, joilla voi olla yhteisiä resursseja (kuten maa, työvoima, kustannukset, siemenet, lannoitteet jne.). Mahdollinen optimointitavoite voisi olla tulojen maksimointi ylittämättä käytettävissä olevien resurssien rajoja. Joissakin tapauksissa ongelma voidaan ilmaista lineaarisena ohjelmointitehtävänä, mutta muuttujien on oltava kokonaislukuja.

Suunnittelu

Näissä tehtävissä on tarpeen varmistaa liikenneverkon ylläpito ja aikataulu. Tehtävänä voi olla esimerkiksi linja-autojen tai junien järjestäminen reiteille aikataulun noudattamiseksi sekä kuljettajien hankkiminen liikkuvalle kalustolle. Tässä loogiset muuttujat (eli ottamalla arvon 0 tai 1) määrittävät, onko linja-auto tai juna määrätty reitille ja onko kuljettaja määrätty tietylle linja-autolle/junalle.

Tietoverkot

Tämän tehtävän tarkoituksena on rakentaa tietoverkko siten, että se tarjoaa ennalta määritellyt vaatimukset vähimmäiskustannuksille [5] . Tämä tehtävä edellyttää sekä verkkotopologian että verkkoelementtien kaistanleveyden optimointia. Monissa tapauksissa suoritusteho ilmaistaan ​​diskreeteinä määrinä, mikä johtaa kokonaislukumuuttujiin. Yleensä sovelletaan muita tekniikkakohtaisia ​​rajoituksia, jotka voidaan mallintaa kokonaisluku- tai Boolen muuttujina.

Matkapuhelinverkot

Taajuussuunnittelun tehtävä GSM -matkaviestinverkoissa edellyttää sallittujen taajuuksien jakamista antennien kesken tiedonsiirron varmistamiseksi ja antennien välisten häiriöiden minimoimiseksi [6] . Tämä ongelma voidaan muotoilla lineaariseksi ohjelmointiongelmaksi, jossa loogiset muuttujat heijastavat sitä, onko tietty taajuus osoitettu tietylle antennille.

Algoritmit

Naiivi tapa ratkaista ILP-tehtävä on yksinkertaisesti jättää huomioimatta muuttujien x kokonaislukurajoitus , ratkaista vastaava LP-tehtävä (jota kutsutaan ILP-tehtävän rajoitusten lineaariseksi relaksaatioksi ) ja pyöristää sitten tuloksena olevan ongelman ratkaisukomponentit. Tuloksena oleva ratkaisu ei kuitenkaan välttämättä ole vain ei-optimaalinen, se voi olla jopa mahdoton hyväksyä, toisin sanoen joitain rajoituksia voidaan rikota.

Käyttämällä täydellistä unimodulaarisuutta

Vaikka yleisessä tapauksessa heikennetyn ongelman ratkaisun eheyttä ei taata, jos ILP:llä on muoto ehdoissa , jossa ja sen elementteinä on kokonaislukuja ja se on täysin unimodulaarinen , niin mikä tahansa perusratkaisu on kokonaisluku. Siten simpleksimenetelmän antama ratkaisu on varmasti kokonaisluku [7] . Osoittaaksesi, että mikä tahansa tällaisen ongelman perusratkaisu on kokonaisluku, anna olla mielivaltainen hyväksyttävä ratkaisu. Koska se on hyväksyttävä, tiedämme sen . Olkoon perusratkaisun perussarakkeita vastaavat alkiot . Perusteen määritelmän mukaan matriisissa on jokin neliöosamatriisi , jossa on lineaarisesti riippumattomia sarakkeita siten, että .

Koska sarakkeet ovat lineaarisesti riippumattomia ja matriisi on neliö, matriisi on ei-singulaarinen, ja siksi olettaen, että se on unimodulaarinen , . Koska se ei ole yksittäinen, matriisi on käännettävä, ja siksi . Määritelmän mukaan . Tässä tarkoittaa liittomatriisia for ja se on kokonaisluku, koska se on kokonaisluku. Tällä tavalla,

kokonaisluku kokonaisluku Mikä tahansa hyväksyttävä perusratkaisu on kokonaisluku.

Siten, jos ILP-matriisi on täysin unimodulaarinen, ILP-ongelman ratkaisemisen sijaan voidaan käyttää ongelman lineaarista relaksaatiota, joka antaa kokonaislukuratkaisun.

Tarkat algoritmit

Jos matriisi ei ole täysin unimodulaarinen, on olemassa useita algoritmeja, jotka ratkaisevat kokonaislukulineaarisen ohjelmointiongelman tarkasti. Yksi tällaisten algoritmien luokista on leikkaustasomenetelmät (Gomori-menetelmät), jotka toimivat ratkaisemalla heikentyneen lineaarisen ongelman, johon myöhemmin lisätään lineaarisia rajoitteita, jotka katkaisevat tehtävän ei-kokonaislukuratkaisun leikkaamatta kokonaislukuja mahdollisia ratkaisuja.

Toinen algoritmien luokka ovat haara- ja sidomenetelmän variantit . Esimerkiksi haara ja leikkaa -menetelmä , joka yhdistää haara-ja-sido -menetelmän leikkaustasomenetelmiin. Haara- ja sidotuilla menetelmillä on useita etuja verrattuna algoritmeihin, jotka käyttävät vain leikkaustasoja. Yksi eduista on se, että algoritmi voidaan lopettaa aikaisin heti, kun ainakin yksi kelvollinen kokonaislukuratkaisu löytyy, vaikkakaan ei optimaalinen. Lisäksi relaksoidun lineaarisen ongelman ratkaisemisen avulla voidaan arvioida, kuinka kaukana optimaalinen ongelma on. Lopuksi haaroittuneita ja sidottuja menetelmiä voidaan käyttää useiden optimaalisten ratkaisujen saamiseksi.

Lenstra vuonna 1983 osoitti [8] , että kun kyseessä on kiinteä määrä muuttujia, toteutettavissa oleva ratkaisu kokonaislukuohjelmointiongelmaan voidaan löytää polynomiajassa.

Heuristiset menetelmät

Koska lineaarisen kokonaislukuohjelmoinnin ongelmat ovat NP-kovia , monia ongelmia on vaikea ratkaista, joten heuristisia menetelmiä käytetään. Esimerkiksi tabuhakua [9] voidaan käyttää . Tabuhaun käyttämiseksi ILP-ongelman ratkaisemiseksi algoritmivaihe voidaan määritellä kokonaislukumuuttujan lisäämiseksi tai vähentämiseksi samalla kun muut kokonaislukumuuttujat jätetään ennalleen. Sitten löydetään ratkaisu muuttujille, joille ei aseteta kokonaislukurajoitusta. Lyhytaikaista muistia voidaan käyttää aiempien yritysten tallentamiseen, kun taas pidemmän aikavälin muisti voi koostua kokonaislukumuuttujien arvoista, joille saadaan suurempia tavoitefunktioarvoja (olettaen maksimointiongelmasta). Lopuksi pitkäkestoisen muistin avulla voidaan etsiä kokonaislukuarvoja, joita ei ole vielä testattu.

Muita heuristiikkaa, joita voidaan soveltaa ILP:n ratkaisemiseen

On myös joitain muita tehtäväkohtaisia ​​heuristioita, kuten k-opt-heuristiikka matkustavan myyjän ongelmalle. Huomaa, että heurististen menetelmien haittana on, että jos ratkaisun löytäminen epäonnistuu, menetelmä ei määritä, tapahtuiko tämä kelvollisen ratkaisun puuttumisen vuoksi vai siksi, että algoritmi ei löytänyt sitä. Lisäksi on yleensä mahdotonta määrittää, kuinka lähellä tällä menetelmällä saatua optimaalista ratkaisua.

Muistiinpanot

  1. Karmanov, 1986 , s. 11-12.
  2. Papadimitriou, Steiglitz, 1998 .
  3. Erickson .
  4. Williams, HP Logic ja kokonaislukuohjelmointi  (epämääräinen) . - 2009. - V. 130. - (International Series in Operations Research & Management Science). - ISBN 978-0-387-92280-5 .
  5. Borndörfer, R.; Grötschel, M. Tietoliikenneverkkojen suunnittelu kokonaislukuohjelmoinnilla (2012).
  6. Sharma, Deepak Frequency Planning (2010).
  7. Joten esimerkiksi kuljetusongelmaa voidaan pitää lineaarisena ohjelmointitehtävänä ja potentiaalien menetelmä tämän ongelman ratkaisemiseksi on itse asiassa simpleksimenetelmä. Simplex-menetelmän perusratkaisu vastaa potentiaalimenetelmän puuta ja vastaavan matriisin determinantti on aina 1. Kokonaislukualkutiedoilla kuljetusongelman ratkaisu simpleksimenetelmällä (tai potentiaalimenetelmällä, joka on ekvivalentti) saa aina kokonaislukuratkaisun.
  8. Lenstra, 1983 .
  9. Glover, 1989 , s. 4–32.

Kirjallisuus

Lue lisää lukemista varten

Linkit