Algoritmul Simplex
Algoritmul simplex , inventat de americanul George Dantzig în 1947 , este o metodă numerică pentru rezolvarea problemelor de programare liniară . Este citat de revista americană Computing in Science and Engineering ca unul dintre cei mai buni zece algoritmi ai secolului. [1]
Acest algoritm folosește conceptul de simplex , adică un politop al vârfuri în dimensiuni, adică un segment de linie într-o dimensiune, un triunghi în două dimensiuni, un tetraedru în trei dimensiuni.
Programare liniară
O problemă de programare liniară constă în maximizarea sau minimizarea unei funcții liniare definite pe setul de soluții ale unui sistem de inegalități liniare , numite constrângeri .
De exemplu, problema:
este o problemă de programare liniară.
Constrângerile definesc regiunea fezabilă (adică setul de puncte care satisfac toate constrângerile problemei, în engleză „feasible region”). În cazul programării liniare, regiunea fezabilă este un poliedru care poate fi gol, limitat sau nelimitat. Funcția care trebuie minimizată sau maximizată este „ funcția obiectivă ”: în practică calculează „costul” fiecărei soluții a constrângerilor.
Prin urmare, obiectivul de a rezolva o astfel de problemă este de a găsi printre soluțiile care satisfac constrângerile, cea care corespunde costului minim (sau maxim, dacă este un venit).
Algoritmul
Algoritmul simplex este capabil să determine ce fel de poliedru este și găsește soluția optimă, care este, sub ipoteze adecvate, un vârf al poliedrului, dacă problema are o soluție optimă finită.
Algoritmul este de obicei formulat pe probleme formulate în așa-numita formă standard în care trebuie să maximizăm o funcție liniară supusă (în engleză „subject to” abreviată st) constrângerilor de egalitate și în care variabilele sunt pozitive sau nule:
- Maximizează Sf Și , unde este este o matrice , sunt vectori de coloană , le este componente ale si ad exponent este operatorul de transpunere .
Această formulare este ușor atinsă, prin adăugarea sau scăderea, după caz, a unei variabile numite „slack” (dacă se adaugă) sau „surplus” (dacă se scade) la o problemă formulată în formă canonică Sf Și . Poate fi rezumată într-un tablou de tip Algoritmul este împărțit în următorii pași aplicați tabloului:
- Verificarea optimității. O condiție suficientă pentru ca masa să fie optimă este aceea pentru fiecare (dacă este o problemă maximă, e pentru fiecare dacă este minim).
- Dacă nu aveți încă un tabel grozav, aleg o coloană corespunzător maximului de (costuri reduse pozitive) (vor exista cel puțin unul altfel ne-am fi oprit la punctul 1).
- Verificarea nelimitătii. O condiție suficientă pentru ca problema să fie nelimitată este cea din coloană identificat avem doar valori negative în matrice, adică . Prin urmare, problema este nelimitată în această direcție.
- Dacă nu suntem în prezența unei probleme nelimitate, aleg pivotul care generează raportul minim între termenul cunoscut și coeficientul variabilei relative din coloană a matricei , acesta este și aplic operația de balama.
Operațiunea pivotă este operația care vă permite să vă deplasați de-a lungul unei direcții admisibile pentru un anumit pas, astfel încât noua soluție să fie, de asemenea, admisibilă, dar mai bună decât cea anterioară.
Criteriu de verificare a optimității / oprire
Având în vedere problema programării liniare se ia în considerare baza admisibilă conținând coloane liniar independente de . Relația poate fi rescrisă ca:
cu matrice conținând coloanele din excluse din baza eligibilă .
Din nou, putem rescrie relația anterioară ca:
și, înlocuind relația din funcția obiectivă față de problema inițială, avem:
cu valoare constantă e vector al costurilor reduse.
În aceste condiții, dacă vectorul costurilor reduse este negativ, soluția de bază fezabilă asociată cu se dovedește a fi excelent. Aceasta înseamnă că valoarea asumată de funcția obiectivă este minimul global pentru funcția din domeniul considerat.
Performanţă
În practică, algoritmul funcționează foarte bine [ fără sursă ] , dar în teorie nu este polinomial și se pot construi exemple speciale în care algoritmul necesită să viziteze un număr exponențial de vârfuri cu privire la dimensiunea problemei. Concurenții reali ai metodei simplex pentru probleme mari sunt metodele punctuale interne .
Tipuri de simplex
Descrierea dată mai sus este destul de generică: ideea generală a lui Dantzig a fost apoi aplicată la multe probleme practice de cercetare a operațiilor , astfel încât în cele din urmă aceasta a produs o serie lungă de algoritmi simplex, fiecare pentru o problemă specifică.
Iată câteva dintre principalele metode simplex:
Notă
- ^ Computing in Science and Engineering, volumul 2, nr. 1, 2000
Elemente conexe
linkuri externe
- (EN) Eric W. Weisstein, Metoda Simplex , în MathWorld Wolfram Research.
- ( EN ) EG Gol'shtein, metoda Simplex , în Enciclopedia Matematicii , Springer și European Mathematical Society, 2002.
- ( EN ) Algoritmul Simplex , de Elmer G. Wiens. Demonstrați algoritmul de detaliu, utilizând tabloul simplex .
- Rezolvarea problemelor de programare liniară utilizând metoda simplex , pe Operations Research Group , Universitatea din Trieste (arhivat din adresa URL originală la 25 februarie 2008) .
Controlul autorității | LCCN (EN) sh85122745 · GND (DE) 4181488-5 |
---|