Programare liniară

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 5 mai 2022; verificările necesită 5 modificări .

Programarea liniară  este o disciplină matematică dedicată teoriei și metodelor de rezolvare a problemelor extreme pe mulțimi de spațiu vectorial -dimensional definite de sisteme de ecuații liniare și inegalități.

Programarea liniară (LP) este un caz special de programare convexă , care, la rândul său, este un caz special de programare matematică . În același timp, stă la baza mai multor metode de rezolvare a problemelor de programare cu numere întregi și neliniare . O generalizare a programării liniare este programarea liniară fracțională .

Multe proprietăți ale problemelor de programare liniară pot fi interpretate și ca proprietăți ale poliedrelor și astfel pot fi formulate și demonstrate geometric.

Istorie

Studiile matematice ale problemelor economice individuale, formalizarea matematică a materialului numeric a fost efectuată încă din secolul al XIX-lea . În analiza matematică a procesului de producție extins, s-au folosit relații algebrice, analiza lor a fost efectuată folosind calcul diferențial . Acest lucru a permis să ne facem o idee generală a problemei.

Dezvoltarea economiei a necesitat indicatori cantitativi, iar în anii 1920 a fost creat un echilibru intersectorial ( IOB ). El a fost cel care a servit drept imbold în crearea și studiul modelelor matematice. Dezvoltarea MOB în 1924-1925 în URSS a influențat activitatea economistului și statisticianului Vasily Vasilievich Leontiev . El a dezvoltat un model intersectorial de producție și distribuție a produselor.

În 1938, Leonid Vitalievich Kantorovich , în cursul consultării științifice, a început să studieze sarcina pur practică de a elabora cel mai bun plan pentru încărcarea mașinilor de decojit (trust de placaj). Această sarcină nu se preta metodelor convenționale. A devenit clar că sarcina nu era întâmplătoare. [unu]

În 1939, Leonid Kantorovich a publicat lucrarea „Metode matematice de organizare și planificare a producției”, în care a formulat o nouă clasă de probleme extreme cu restricții și a dezvoltat o metodă eficientă de rezolvare a acestora, punând astfel bazele programării liniare.

Studiul unor astfel de probleme a condus la crearea unei noi discipline științifice de programare liniară și a deschis o nouă etapă în dezvoltarea metodelor economice și matematice.

În 1949, matematicianul american George Bernard Dantzig a dezvoltat o metodă eficientă pentru rezolvarea problemelor de programare liniară (LPP) - metoda simplex . [unu]

Termenul „programare” trebuie înțeles în sensul de „planificare” (una dintre traducerile programării  în limba engleză ). A fost propus la mijlocul anilor 1940 de George Danzig, unul dintre fondatorii programării liniare, înainte ca calculatoarele să fie folosite pentru a rezolva probleme de optimizare liniară .

Metoda punctului interior a fost menționată pentru prima dată de I. I. Dikin în 1967 . [2] . Aceste studii au fost continuate, inclusiv de către oamenii de știință autohtoni. În anii 1970, V. G. Zhadan a reușit să obțină principalele rezultate și să dezvolte o abordare generală a construcției metodelor punctuale interioare pentru rezolvarea problemelor de programare liniară și neliniară, bazate pe transformarea spațiilor; propune metode numerice barieră-proiectivă și barieră-newtoniene.

Sarcini

Problema generală (standard) a programării liniare este problema găsirii minimului unei funcții obiective liniare (forma liniară) de forma [3] :

O problemă în care apar constrângeri sub formă de inegalități se numește problemă de programare liniară de bază (BLP)

Problema programării liniare va avea o formă canonică dacă în problema principală în locul primului sistem de inegalități există un sistem de ecuații cu constrângeri sub formă de egalitate [4] :

Problema principală poate fi redusă la una canonică prin introducerea unor variabile suplimentare.

Problemele de programare liniară de cea mai generală formă (probleme cu constrângeri mixte: egalități și inegalități, prezența variabilelor libere de constrângeri) pot fi reduse la echivalente (având același set de soluții) modificări ale variabilelor și înlocuirea egalităților cu o pereche de inegalități [5] .

Este ușor de observat că problema găsirii maximului poate fi înlocuită cu problema găsirii minimului luând coeficienții cu semnul opus.

Exemple de probleme

Potrivire maximă

Luați în considerare problema de potrivire maximă într-un grafic bipartit : există mai mulți băieți și fete, iar pentru fiecare băiat și fată se știe dacă se plac. Este necesar să se căsătorească numărul maxim de cupluri cu simpatie reciprocă.

Să introducem variabile care corespund perechii de la --lea băiat și ---a fată și să satisfacem restricțiile:

cu o funcție obiectivă , unde sunt egale cu 1 sau 0, în funcție de dacă cel de -al -lea băiat și --a fată sunt drăguți unul cu celălalt. Se poate arăta că printre soluțiile optime ale acestei probleme există o soluție întreagă. Variabilele egale cu 1 vor corespunde cuplurilor care ar trebui să fie căsătorite.

Debit maxim

Să existe un grafic (cu muchii direcționate) în care pentru fiecare muchie să fie indicată capacitatea sa. Și sunt date două vârfuri: o chiuvetă și o sursă. Este necesar să se precizeze pentru fiecare muchie cât de mult fluid va curge prin ea (nu mai mult decât capacitatea sa) astfel încât să se maximizeze debitul total de la sursă la chiuvetă (fluidul nu poate apărea sau dispărea la toate vârfurile cu excepția sursei și, respectiv, a chiuvei).

Să luăm ca variabile  cantitatea de fluid care curge prin marginea a treia. Apoi

unde  este capacitatea muchiei. Aceste inegalități trebuie completate de egalitatea cantității de fluid de intrare și de ieșire pentru fiecare vârf, cu excepția chiuvetei și a sursei. Ca o funcție, este firesc să luăm diferența dintre cantitatea de lichid care curge și cea care intra la sursă.

O generalizare a problemei anterioare este fluxul maxim al costului minim. In aceasta problema se dau costurile pentru fiecare muchie si este necesar sa se aleaga dintre debitele maxime debitul cu costul minim. Această sarcină este redusă la două probleme de programare liniară: mai întâi, trebuie să rezolvați problema debitului maxim, apoi să adăugați la această problemă constrângerea , unde  este valoarea debitului maxim și să rezolvați problema cu o nouă funcție  - costul fluxului.

Aceste probleme pot fi rezolvate mai rapid decât prin algoritmi generali de rezolvare a problemelor de programare liniară datorită structurii speciale a ecuațiilor și inegalităților.

Problemă de transport

Există o anumită marfă omogenă care trebuie transportată de la depozite la fabrici. Pentru fiecare depozit , se știe câtă încărcătură este în el și pentru fiecare fabrică se cunoaște nevoia de marfă. Costul transportului este proporțional cu distanța de la depozit la fabrică (se cunosc toate distanțele de la --lea depozit până la ----a fabrică). Este necesar să întocmească cel mai ieftin plan de transport.

Variabilele decisive în acest caz sunt  - cantitatea de marfă transportată de la --lea depozit la --a uzină. Acestea îndeplinesc restricțiile:

Funcția obiectiv are forma: , care trebuie minimizată.

Joc cu sumă zero

Există o matrice de dimensiuni . Primul jucător alege un număr de la 1 la , al doilea - de la 1 la . Apoi verifică numerele și primul jucător primește puncte, iar al doilea primește puncte (  - numărul ales de primul jucător  - al doilea). Trebuie să găsim strategia optimă pentru primul jucător.

Lăsați strategia optimă, de exemplu, primul jucător, numărul trebuie ales cu probabilitate . Atunci strategia optimă este o soluție la următoarea problemă de programare liniară:

în care funcţia urmează să fie maximizată . Valoarea în soluția optimă va fi cea mai nefavorabilă așteptare a primului jucător.

Algoritmi de soluție

Cea mai cunoscută și utilizată pe scară largă în practică pentru rezolvarea problemei generale a programării liniare (LP) este metoda simplex . În ciuda faptului că metoda simplex este un algoritm destul de eficient care a dat rezultate bune în rezolvarea problemelor aplicate LP, este un algoritm cu complexitate exponențială . Motivul pentru aceasta este natura combinatorie a metodei simplex, care enumeră succesiv vârfurile poliedrului soluțiilor admisibile în căutarea soluției optime.

Primul algoritm polinomial , metoda elipsoidului , a fost propus în 1979 de matematicianul sovietic L. Khachiyan , rezolvând astfel o problemă care rămăsese nerezolvată multă vreme. Metoda elipsoidală are o natură necombinatorie complet diferită de metoda simplex. Cu toate acestea, din punct de vedere computațional, această metodă s-a dovedit a fi nepromițătoare. Cu toate acestea, însuși faptul complexității polinomiale a problemelor a condus la crearea unei clase întregi de algoritmi LP eficienți - metode de punct interior , primul dintre care a fost algoritmul lui N. Karmarkar propus în 1984 . Algoritmii de acest tip folosesc o interpretare continua a problemei LP, cand in loc de enumerarea varfurilor politopului de solutii la problema LP se face o cautare de-a lungul traiectoriilor in spatiul variabilelor problemei care nu trec prin varfuri. a politopului. Metoda punctului interior, care, spre deosebire de metoda simplex, ocolește punctele din interiorul intervalului de toleranță, utilizează metode de programare neliniară a funcției de barieră logaritmică dezvoltate în anii 1960 de Fiacco și McCormick.

O altă metodă de rezolvare a LP este utilizarea algoritmului Seidel:

  1. LP este dat în formă canonică cu variabile și constrângeri care alcătuiesc mulțimea .
  2. Dacă sau , deduceți soluția de bază optimă .
  3. În caz contrar, alegeți o constrângere aleatorie și calculați recursiv soluția de bază optimă pentru .
  4. Dacă soluția de bază optimă pentru nu încalcă constrângerea , returnați-o.
  5. În caz contrar, se calculează intersecția poliedrului LP cu hiperplanul și se rezolvă recursiv LP rezultat cu o variabilă.

Această metodă are complexitate asimptotică .

Probleme de programare liniară duală

Fiecare problemă de programare liniară [6] din forma

este posibil într-un anumit fel să comparăm o altă problemă de programare liniară, numită duală sau conjugată cu cea originală sau directă. Legătura dintre problemele inițiale și cele duale constă în principal în faptul că rezolvarea uneia dintre ele poate fi obținută direct din rezolvarea celeilalte. Să definim problema duală în raport cu problema originală de programare liniară

Sarcina inițială Problemă dublă

Dacă vectorii și  sunt soluții admisibile la problemele primare și duale, atunci , și egalitatea este atinsă dacă și numai dacă și  sunt soluții optime. Dacă funcția obiectivă a uneia dintre perechile de probleme duale nu este limitată (de sus pentru cea originală, de jos pentru cea duală), atunci zona de soluții fezabile a celeilalte probleme este goală.

Dacă vectorii și  sunt soluțiile optime ale problemelor directe și, respectiv, duale, atunci următoarele egalități sunt adevărate

Adică, pentru soluții optime la problemele primale și duale, constrângerile non-temporale (ineegalitatea strictă este satisfăcută) corespund variabilelor zero, iar variabilelor diferite de zero (incluse în planul de suport) corespund unor constrângeri strânse (este implementată inegalitatea nestrictă). ca egalitate) constrângeri. Dar pot exista zero variabile care corespund unor constrângeri stricte.

Aceste proprietăți ale soluțiilor duale pot reduce semnificativ timpul de rezolvare dacă trebuie să rezolvați o problemă cu un număr de constrângeri mult mai mare decât numărul de variabile. Atunci este posibil, după rezolvarea problemei duale, să se găsească planul de sprijin al acesteia, după care, selectând în problema directă doar constrângerile corespunzătoare planului de sprijin (toate aceste constrângeri trebuie tensionate), se rezolvă sistemul obișnuit de ecuații liniare. pentru ei.

Teorema. Problema duală a LP-ului dual este problema LP primară.

Dovada: Luați în considerare un LP direct al formei sub condiția . Să asociem LP-ul dublu cu acesta și să obținem sub condiția . Să o aducem la o altă formă, echivalentă ca sens: sub condiția . Să comparăm din nou LP-ul dublu cu acesta și să obținem în condiția . Îl aducem într-o formă echivalentă și obținem un LP identic cu cel original: sub condiția .

Software

lp_solve este un software open source (LGPL GNU GNU General Public License for Libraries ) pentru rezolvarea ecuațiilor liniare. LpSolve are un IDE , C API nativ și multe alte API-uri pentru Java, AMPL, MATLAB, Wolfram Mathematica, O-Matrix, Sysquake, Scilab, Octave, FreeMat, Euler, Python, Sage, PHP, R și Microsoft Solver Foundation .

Vezi și

Note

  1. 1 2 Sursa: Biblioteca Științifică Universală Regională Altai. V. Ya. Shishkova (AKUNB) Arhivat pe 5 martie 2022 la Wayback Machine . Metode de optimizare: Proc. indemnizatie. Brazovskaya N.V.; Universitatea Tehnică de Stat din Altai I. I. Polzunova, [Centrul distanței. învăţare]. - Barnaul: Editura AltGTU, 2000. - 120 p. - ISBN 5-BNV-MOr.9.00 - UDC / LBC 22.183.4 B871.
  2. Dikin I. I. Rezolvarea iterativă a problemelor de programare liniară și pătratică // Dokl. Academia de Științe a URSS. - 1967. - T. 174 , nr 4 . - S. 747-748 .
  3. Karmanov, 1986 , p. 63.
  4. Karmanov, 1986 , p. 80.
  5. Karmanov, 1986 , p. 77.
  6. ↑ Manual electronic „Metode economice și matematice”. Dualitate în programarea liniară Arhivat 17 iunie 2016 la Wayback Machine

Literatură

Link -uri