Ellipsoidi menetelmä

Ellipsoidimenetelmä  on algoritmi, jolla etsitään kupera joukkojen leikkauspisteessä oleva piste. Sen on kehittänyt A. S. Nemirovsky , ja L. G. Khachiyan toi algoritmiseen toteutukseen Neuvostoliiton tiedeakatemian laskentakeskuksessa.

Algoritmin kuvaus

Ensin valitaan suuri pallo, joka sisältää kuperoiden sarjojen leikkauspisteen. Tämän pallon rakentamismenetelmä riippuu ongelmasta. Lisäksi jokaisessa vaiheessa on ellipsoidi, jonka määrittelevät keskusta ja vektorit . Ellipsoidi sisältää pisteitä , joille . Huomaa, että sama ellipsoidi voidaan määrittää useilla tavoilla. Jos tämän ellipsoidin keskipiste kuuluu kaikkiin kuperajoukkoon, niin vaadittu piste löytyy. Muuten on olemassa hypertaso , joka kulkee pisteen läpi siten , että yksi joukoista on kokonaan sen toisella puolella. Sitten voit siirtyä alkuperäisestä kannasta toiseen kantaan , joka on yhdensuuntainen ja suunnattu joukkoa kohti. Laitetaan nyt ,,osoitteessa . Tämä uusi ellipsoidi sisältää puolet vanhasta ja sen tilavuus on pienempi. Siten ellipsoidin tilavuus pienenee eksponentiaalisesti askelmäärän kasvaessa, ja haluttu piste löytyy portaittain, missä  on alkuperäisen pallon  tilavuus ja leikkausalueen tilavuus. Algoritmin kokonaisajoaika on yhtä suuri kuin , missä  on joukkojen lukumäärä,  on aika tarkistaa, kuuluuko piste joukkoon.

Sovellus lineaariseen ohjelmointiongelmaan

Jos lineaarisessa ohjelmointitehtävässä pystyttiin rakentamaan halutun ratkaisun sisältävä pallo, niin se voidaan ratkaista ellipsoidimenetelmällä. Tätä varten löydämme ensin pallon sisältä pisteen, joka täyttää ongelman rajoitukset. Piirrämme sen läpi hypertason , jossa  on tavoitefunktio, ja löydämme pisteen alkuperäisen ja uuden hypertason leikkauspisteestä (alkaen nykyisestä ellipsoidista). Teemme samoin uuden löydetyn pisteen kanssa. Prosessi konvergoi optimaaliseen ratkaisuun eksponentiaalisella nopeudella (koska ellipsoidin tilavuus pienenee tällä nopeudella).

Menetelmän tehokkuus

Polynomialgoritmista voisi teoriassa tulla uusi standardi, mutta käytännössä Khachiyan-algoritmia tulee käyttää varoen: 50 muuttujan koon kanssa on ongelmia, jotka vaativat yli 24 tuhatta Khachiyan-menetelmän iteraatiota, kun taas useiden Simplex-menetelmän yksinkertaisemmat iteraatiot lasketaan tällaisissa tapauksissa satoja tai jopa kymmeniä [1] [2] . On kuitenkin esimerkkejä ongelmista, joissa tämän luokan algoritmit toimivat satoja kertoja tehokkaammin kuin simplex-menetelmän standarditoteutukset.

Muistiinpanot

  1. Nikolenko, 2005 .
  2. Schreiver, 1991 , s. 264.

Kirjallisuus