site-ul personal Alekseya Grigoreva - algoritm simplex

Luați în considerare metoda unui algoritm simleks mai informal asupra sarcinii la funcția de maximizare

și următoarele restricții:

Inainte de a citi vor cunoaște mai bine cu unele literatura de specialitate pe această temă, deoarece în caz contrar unele dintre termenii utilizați în articol, și etapele algoritmului poate fi de neînțeles.

Solutia problemelor cu baza inițială

Această problemă este - problema cu baza inițială, întrucât toate restricțiile cu privire la aceasta - este mai mică sau egală cu. Astfel de sarcini sunt mai ușor decât sarcina cu caractere aleatoare, astfel încât în ​​primul rând ia în considerare decizia lor. Prima acțiune pereidem neraventstva și scrie problema egalității în formă canonică. Pentru acest sistem la fiecare inegalitate vom adăuga o variabilă la baza.

Baza sistemului este variabil, iar acestea sunt numite variabile de bază.

Formăm tabelul simplex pentru această sarcină


Tabel Simplex iterație 0

În prima coloană a variabilelor înregistrate, care constituie baza. Mai departe în scris matrice sistem, în care coloana penultima - membri sistem liber. Ultima linie - este funcția obiectiv.

Acum tabela rezultat va fi îmbunătățită cu fiecare iterație a algoritmului, până când se ajunge la soluția optimă.

Pentru a îmbunătăți coloana de dizolvare ales - coloana care corespunde cel mai mic coeficient negativ în z linia (pentru problema la maxim). Parțial, corespunde coloanei de rezoluție intră în baza sistemului în următoarea iterație. Următoarea selectată linia de rezoluție - pentru aceasta, printre toate elementele non-negative, care permit coloana selectată, rezultatul diviziunii pe liberă respectivă a cărei cel mai mic membru. Toate aceste relații sunt înregistrate în ultima coloană a tabelului simplex. Postul îndeplinește atât rezoluția liniei va fi lansat pe baza următoarei iterație. Se lasă elementul - un element situat la intersecția coloanei rând și rezoluția. În cazul în care coloana nu este în eliberarea de elemente ne-negative, soluția sistemului diverge.

În această problemă, în prima etapă de autorizare coloană este o coloană cu x2 variabilă. și rezoluția liniei - o s3 variabilă șir.

Apoi, trebuie să completați tabelul simplex pentru următoarea iterație. Noul element este inclus în bază, astfel încât coeficientul de potrivire variabilă (în cazul în care este celula permisivă) ar trebui să fie egală cu unu, iar toți ceilalți factori - la zero. Pentru a normaliza această linie - vom împărți toate elementele asupra valorii elementelor. Pentru zero la toate celelalte rânduri (inclusiv z-line) au nevoie de o nouă valoare a coeficientului de variabile de bază înmulțit cu linie rezoluția elementului înțelept și scade rezultatul din rândul curent.


Tabel Simplex, iterație 1

Pentru această iterație permițând coloană este o coloană cu x1 variabilă. și rezoluția liniei - o s2 variabilă șir.


Tabel Simplex, iterație 2


Tabel Simplex, iterație 3

Iterațiilor încetează atunci când z-line, toți coeficienții sunt non-negativ. La o anumită iterație, această condiție este îndeplinită, atunci soluția obținută: x1 = 24, x2 = 16, zmax = 192.

Implementarea unui algoritm Python pentru rezolvarea problemelor cu baza inițială. Afișare.

Rezolvarea problemelor cu bază artificială

Cu toate acestea, în practică, problema mai frecvente în care restricțiile în inegalitățile nu apar numai insigne sau mai puțin egale, dar egale și mai mare sau egal.

Să considerăm următoarea problemă

Scriem problema în formă canonică. În cazul în care semnul de inegalitate este mai mică sau egală cu, variabila de intrare va avea un semn „+“ în această inegalitate. În cazul în care semnul „egal“, variabila nu va fi introdus. Și dacă semnul „mai mult“, variabila va fi semnul „-“.

Metoda simplex, introduceți variabilele care vor stabili baza pentru rezolvarea acestei probleme. O variabilă de bază este deja - o variabilă s2. Introducem variabile temporare:

În cazul în care variabilele temporare presentedin bază, alegerea liniilor de soluționare ar trebui să se facă într-un mod diferit. Și anume, aveți nevoie pentru a obține o altă linie „de evaluare“, care va fi stocat suma cu semnul minus coeficienții variabilelor de timp, în această coloană. Luați în considerare următorul exemplu.


Tabel Simplex iterație 0

String „evaluare“ în tabel va fi prezentă numai în cazul în care baza presentedin variabile temporare. La prima iterație, ei presentedin, permițând astfel coloana selectată cu valoarea minimă pe „scor“ linia. Autorizând coloana este o coloană a x2 variabile.

În cazul în care variabilele temporare nu sunt implicate în bază, permițând coloanei selectate de cea mai mică valoare din z-line. Algoritmul se va opri atunci când toți coeficienții din Z-line, cu excepția rapoarte adecvate pentru variabile temporare vor fi pozitive.

Implementarea în Python