Algoritmul Simplex

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - "Metoda Simplex" se referă aici. Dacă sunteți în căutarea metodei de optimizare neliniară cu același nume, consultați metoda Nelder-Mead .

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ă

Pictogramă lupă mgx2.svg Același subiect în detaliu: 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

Un sistem de inegalități liniare definește un politop ca o regiune fezabilă. Algoritmul simplex începe de la un vârf inițial și se deplasează de-a lungul laturilor politopului până când ajunge la vârful soluției optime.

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:

  1. 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).
  2. 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).
  3. 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.
  4. 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ă

  1. ^ Computing in Science and Engineering, volumul 2, nr. 1, 2000

Elemente conexe

linkuri externe

Controlul autorității LCCN (EN) sh85122745 · GND (DE) 4181488-5
Matematica Portalul de matematică : accesați intrările Wikipedia care se ocupă de matematică