Aplicarea practică a programării liniare. Rezolvarea problemelor de programare liniară

Un număr mare de probleme economice sunt reduse la modele matematice liniare. În mod tradițional, ele sunt numite modele de programare liniară. Programarea liniară înseamnă planificare liniară, adică obţinerea unui plan optim de soluţionare în probleme cu structură liniară. Este folosit de obicei de specialiștii din unitățile de la sediu pentru rezolvarea dificultăților de producție. Exemple tipice de aplicații ale modelului de programare liniară sunt următoarele:

    planificarea integrată a producției (întocmirea graficelor de producție care să minimizeze costurile totale datorate modificărilor ratelor dobânzilor);

    planificarea gamei de produse (determinarea structurii optime a producției de alimente pentru om);

    rutarea producției de produs (determinarea rutei tehnologice optime pentru fabricarea unui produs);

    reglementarea stocurilor (determinarea combinației optime de produse din depozit);

    programarea productiei (intocmirea de grafice care sa minimizeze costurile, tinand cont de costurile de mentinere a stocurilor, plata orelor suplimentare si comenzilor externe);

    planificarea distribuției produselor etc.

În forma sa cea mai generală, programarea liniară este redusă la o problemă de optimizare și este scrisă în următoarea formă:

Pentru a rezolva o problemă de optimizare, este suficient să găsiți soluția optimă a acesteia, adică. indica
astfel încât f(X 0 )≥ f(X) la orice
, sau în cazul minimizării - f(X 0 )≤ f(X) la orice
.

O problemă de optimizare este nerezolvată dacă nu are o soluție optimă. În special, problema maximizării va fi nerezolvată dacă funcția obiectiv f(X) nu este mărginită de sus pe mulţimea admisibilă W.

Metodele de rezolvare a problemelor de optimizare depind atât de tipul funcției obiectiv f(X) , și din structura mulțimii admisibile W. Dacă funcția țintă din problemă este o funcție P variabile, atunci metodele de rezolvare se numesc metode de programare matematică.

O problemă de programare liniară este o problemă de cercetare operațională al cărei model matematic are forma:

În acest caz, sistemul de ecuații liniare (2) și inegalități (3), (4), care determină setul admisibil de soluții ale problemei W, se numește sistemul de constrângeri ale unei probleme de programare liniară și funcția liniară f(X) numită funcție obiectiv sau criteriu de optimitate.

Dacă modelul matematic al unei probleme de programare liniară are forma:

apoi spun că problema este prezentată în formă canonică.

Orice problemă de programare liniară poate fi redusă la o problemă de programare liniară în formă canonică prin trecerea maximizării la minimizare, de la constrângeri de inegalitate la constrângeri de egalitate și înlocuirea variabilelor care nu se supun condiției de non-negativitate. Maximizarea unei anumite funcții echivalează cu minimizarea aceleiași funcții luate cu semnul opus și invers.

Regula pentru aducerea unei probleme de programare liniară la forma canonică este următoarea:

1) dacă în problema inițială este necesar să se determine maximul unei funcții liniare, atunci ar trebui să schimbați semnul și să căutați minimul acestei funcții;

2) dacă partea dreaptă a restricțiilor este negativă, atunci această restricție trebuie înmulțită cu (-1);

3) dacă între restricții există inegalități, atunci prin introducerea unor variabile suplimentare nenegative, acestea se transformă în egalități;

4) dacă vreo variabilă X k nu are restricții de semn, atunci este înlocuit (în funcția obiectiv și în toate restricțiile) cu diferența dintre două variabile noi nenegative: X k = X k - X 1 , unde 1 este un indice liber, X k 0, X 1 0.

Rezumând cele de mai sus, putem trage următoarele concluzii:

1. Constrângerile din problemele de programare liniară pot fi exprimate atât prin egalități, cât și prin inegalități.

2. O funcție liniară poate tinde atât spre maxim cât și spre minim.

3. Variabilele din model sunt întotdeauna nenegative.

4. Din orice problemă de programare liniară puteți merge la problema de programare liniară canonică (principală).

Fiecare problemă de programare liniară poate fi pusă în contrast cu o altă problemă de programare liniară care este duală cu cea originală (directă).

Luați în considerare o problemă de programare liniară de următoarea formă:

………………………..

Problema necesită maximizarea funcției obiectiv; toate constrângerile sunt inegalități cu semnul ≤, toate variabilele X 1 , X 2 ,…,X P P variabilele de control şi m restricții. Coeficienții variabilelor în funcția obiectiv: c 1 , c 2 ,…, c n; membri gratuiti: b 1 , b 2 ,…, b m .

Problema de programare liniară duală are forma:

………………………..

Într-o problemă duală, se cere să se găsească minimul funcției obiectiv, constrângeri - inegalități cu semnul ≥, variabile de control y 1 , y 2 ,…, y m nenegativ. Sarcina conține m variabilele de control şi n restricții. Coeficienții funcției obiective a problemei b 1 , b 2 ,…, b m sunt termeni liberi ai problemei de programare liniară inițială și termeni liberi ai problemei duale c 1 , c 2 ,…, c n – coeficienții funcției obiectiv a problemei inițiale de programare liniară. Se transpune matricea coeficientilor problemei duale, i.e. Rândurile sunt înlocuite cu coloane, iar coloanele sunt înlocuite cu rânduri.

Problemele (9)–(10) și (11)–(12) formează o pereche de probleme, numită pereche duală în programarea liniară.

Problema duală în raport cu cea inițială este compusă după următoarele reguli:

1. Funcția obiectiv a problemei inițiale este setată la maxim, iar funcția obiectiv a problemei duale este setată la minim.

2. Matrice A(13)

,

compuse din coeficienți pentru necunoscute în sistemul de constrângeri (10) ale problemei inițiale (9) – (10) și o matrice similară în problema duală (11) – (12) se obțin unul de la celălalt prin transpunere.

3. Numărul de variabile din problema duală (11) – (12) este egal cu numărul de restricții din sistemul (10) al problemei inițiale și numărul de restricții din sistemul (12) al problemei duale este egal cu numărul de variabile din problema inițială.

4. Coeficienții necunoscutelor în funcția obiectiv (11) a problemei duale sunt termenii liberi din sistemul (10) ai problemei inițiale, iar părțile din dreapta din constrângerile sistemului (12) ale problemei duale. problema duală sunt coeficienții necunoscutelor în funcția obiectiv (9) a problemei inițiale.

5. Dacă variabila X j a problemei inițiale (9) – (10) poate lua numai valori nenegative, atunci j- Constrângerea din sistemul (12) a problemei duale este o inegalitate de forma ≥. Dacă variabila X j atunci poate lua atât valori pozitive, cât și negative j- Constrângerea din sistemul (12) este ecuația. Legături similare au loc între constrângerile (10) ale problemei inițiale și variabilele problemei duale. Dacă i- Dacă constrângerea din sistemul (10) a problemei inițiale este o inegalitate, atunci i- Eu sunt variabila problemei duale y i 0. Dacă i- Dacă constrângerea este o ecuație, atunci variabila y i poate lua atât valori pozitive, cât și negative.

Ideea îmbunătățirii secvențiale a soluției a stat la baza unei metode universale pentru rezolvarea problemelor de programare liniară - metoda simplex. Semnificația geometrică a acestei metode constă într-o tranziție secvențială de la un vârf al poliedrului de constrângere (numit inițial) la cel învecinat, în care funcția liniară ia cea mai bună (cel puțin nu cea mai proastă) valoare (în raport cu obiectivul). a problemei) până când se găsește Soluția optimă este vârful unde se realizează valoarea optimă a funcției obiectiv (dacă problema are un optim final). Ideile metodei au fost publicate de omul de știință rus L.V. Kantorovich în 1939

Pentru a aplica metoda simplex, în constrângerile problemei sunt introduse variabile suplimentare y 1 , y 2 ,…, y i iar condiția problemei inițiale ia forma:

……….…………………..

Această afirmație poate fi prezentată sub forma unui tabel - primul tabel al metodei simplex (Tabelul 1.1).

Tabelul 1.1.

Primul tabel simplex

Membri gratuiti

Variabile libere

X 1

X 2

X n

y 1

b 1

A 11

A 12

A 1n

y 2

b 2

A 21

A 22

A 2n

y m

b m

A m1

A m2

A mn

Linie index

-c 1

-c 2

-c n

Pentru a compila un tabel simplex, puteți aplica anumite reguli.

1. Pentru primul tabel:

a) scrieți în prima coloană y m– variabilele de bază care se află în ecuațiile din stânga;

b) variabile libere A mn plasat în rândul de sus al mesei;

c) în coloanele rămase se scriu coeficienţii din faţa variabilelor libere.

2. Pentru tabelele ulterioare:

a) cel mai mic element negativ din linia index este selectat la găsirea maximului, dar cel mai mare element pozitiv este selectat la găsirea minimului, excluzând vectorul termenilor liberi;

b) acest element definește vectorul coloanei cheie și este introdus în bază;

c) componentele vectorului termenilor liberi se împart la elementele pozitive ale coloanei cheie;

d) se alege cel mai mic dintre rapoartele obținute;

e) un vector rând care conține cel mai mic coeficient pozitiv este cel cheie și este derivat din bază;

f) la intersecția rândurilor de chei și a coloanei se află un element de autorizare;

g) transformarea matricei:

Fiecare element șir cheie este împărțit într-un element de activare. Coeficientii rezultați sunt elementele cheie ale rândului următorului tabel,

Coloana cheie din noul tabel este zerouri, cu excepția elementului de activare,

Elementele rămase ale noului tabel sunt calculate conform următoarei scheme:

Element nou = Element vechi –

- Element Rând cheie*Element coloană cheie

Element permisiv

Dacă rândul (coloana) nul conține zero, atunci coloana corespunzătoare (rândul 0 din noul tabel nu se va modifica.

3. Punctele „a” - „g” se repetă până când nu mai rămâne niciun element negativ în linia indexului la găsirea maximului (dar nici un element pozitiv la găsirea minimului).

Exemplul 1.1. Este necesar să luați o decizie cu privire la planul optim pentru producția de tricotaje timp de o lună la Sviyazh OJSC folosind metoda simplex.

Vom stabili un plan de producere a modelelor de tricotaje pentru bărbați pentru a obține profit maxim cu resursele date prin construirea unui model matematic. Datele inițiale sunt prezentate în tabelul 1.2.

Tabelul 1.2.

Datele inițiale

Resurse ( i)

Tip produs ( j)

Rezerva de resurse ( b i)

Pantaloni sport model 7060

Pulover barbatesc model 55-1

Salopetă pentru bărbați model 38-0

Model de costum sport

consumul specific de resurse ( A ij)

Muncă

Material

Echipamente

X 1

X 2

X 3

X 4

Datele inițiale privind consumul specific de resurse materiale și de muncă sunt date în tabel. 1.2 în conformitate cu documentația reglementară și tehnologică în vigoare în organizație. Linia „Resurse materiale” înregistrează rata de consum a celui mai rar (limitat0) tip de materiale - fire de lână Acest material are cea mai mare rată de consum și cost.

Rândul „Echipament” arată intensitatea rezumată a forței de muncă pentru fabricarea unei unități de produs în ore standard ca total pentru toate operațiunile parțiale. În unități naturale se iau și alte tipuri de resurse: resurse de muncă - în ore; material - în dm 2.

Linia „Profit” reflectă profitul din vânzarea unei unități de produs, luat din estimarea costului planificat pentru o unitate de produs.

Prin X 1 , X 2 , X 3 , X 4 a indicat cantitatea de produse produse pentru fiecare tip de sortiment.

Conform regulii de construire a unei probleme de programare liniară standard, să creăm un model matematic:

În constrângerile problemei, introducem variabile suplimentare y 1 , y 2 , y 3 și rescrieți condiția problemei sub forma unei ecuații:

Ultima afirmație poate fi prezentată sub forma tabelului 1.3 - primul tabel al metodei simplex, pe care îl vom folosi pentru a rezolva problema de programare liniară.

Tabelul 1.3.

Primul tabel simplex

Membri gratuiti

Variabile libere

X 1

X 2

X 3

X 4

y 1

y 2

y 3

Linie index

Prima coloană conține y i variabilele de bază sunt cele din stânga ecuației, iar variabilele libere X j plasat în rândul de sus al mesei. Coloanele rămase conțin coeficienții variabilelor libere. Linia index este rezultatul scăderii coeficienților din fața variabilelor libere de la zero.

Pentru a construi următorul tabel, este selectat cel mai mic element negativ din rândul index (acesta este 222). Acest element definește vectorul coloanei cheie și este introdus în bază. Componentele vectorului de termeni liberi sunt împărțite la elementele pozitive ale coloanei cheie și cea mai mică este selectată din rapoartele rezultate. Vectorul rând care conține cel mai mic coeficient pozitiv este cel cheie și este derivat din baza ( y 2 ). La intersecția rândurilor cheie și a coloanei există un element de activare (acesta este 55.50).

Fiecare element șir cheie este apoi împărțit într-un element de activare. Coeficientii rezultați sunt elementele rândului cheie din următorul tabel. Ca rezultat, a fost obținut al doilea tabel simplex (Tabelul 1.4).

Tabelul 1.4.

Al doilea tabel simplex

Membri gratuiti

Variabile libere

X 1

X 2

X 3

X 4

y 1

y 2

y 3

Linie index

Deoarece a apărut un element negativ în linia de index, toți pașii similari trebuie repeți și ar trebui construit un al treilea tabel simplex.

Rezultatul este un tabel. 1.5.

Tabelul 1.5.

Tabel final simplex

Membri gratuiti

Variabile libere

X 1

X 2

X 3

X 4

y 1

y 2

y 3

Linie index

Pe baza Tabelului 1.5, putem trage concluzii: în coloana termenilor liberi, toate elementele sunt pozitive (asta înseamnă că soluția rezultată este admisibilă); în linia indexului, toate elementele sunt de asemenea pozitive (aceasta înseamnă că soluția rezultată este optimă, adică maximizează funcția obiectiv); planul optim ar fi următoarele valori:
(adică sunt de bază);
(de vreme ce sunt liberi); funcție obiectivă L= 4 201 195.

Din Tabelul 1.5 rezultă, de asemenea, că variabila de bază y 3 =9716 și variabile libere y 1 = y 2 = 0, adică în planul optim, rezervele de muncă și resurse materiale sunt egale cu zero, deoarece sunt pe deplin utilizate. O rezervă de resurse de echipamente y 2 = 9716, care indică surplusul acestuia.

Astfel, ca urmare a aplicarii metodei de programare liniara, s-a luat decizia de a produce pulovere barbatesti a modelului selectat in valoare de 3981 bucati, pulovere barbati model 55-1 in valoare de 29.875 bucati.

Programarea liniară a apărut ca o ramură separată a matematicii aplicate în anii 40 și 50. secolul XX grație muncii omului de știință sovietic, laureatul Premiului Nobel L.V. Kantorovich. În 1939, a publicat lucrarea „Metode matematice de organizare și planificare a producției”, în care a folosit matematica pentru a rezolva probleme economice despre cea mai bună încărcare a mașinilor, tăierea materialelor la cel mai mic cost, distribuția mărfurilor în mai multe tipuri de transport și altele. , propunând metoda de rezolvare a multiplicatorilor 8 .

L.V. Kantorovich a fost primul care a formulat concepte economice și matematice atât de utilizate pe scară largă precum planul optim, alocarea optimă a resurselor, evaluări determinate obiectiv, indicând numeroase domenii ale economiei în care pot fi aplicate.

Conceptul de programare liniară a fost introdus de matematicianul american D. Dantzig, care în 1949 a propus un algoritm pentru rezolvarea problemei de programare liniară, numit „metoda simplex”.

Programarea matematică, care include programarea liniară, este în prezent unul dintre domeniile cercetării operaționale. În funcție de tipul de probleme care se rezolvă, se distinge domenii precum programarea liniară, neliniară, discretă, dinamică etc. Termenul de „programare” a fost introdus datorită faptului că variabilele necunoscute care se află în proces de rezolvare a unei probleme determină de obicei un program sau un plan de funcționare a unei entități economice.

În analiza matematică clasică se studiază formularea generală a problemei determinării unui extremum condiționat. Cu toate acestea, în legătură cu dezvoltarea producției industriale, transporturilor, agriculturii și sectorului bancar, rezultatele tradiționale ale analizei matematice nu au fost suficiente. Nevoile practicii și dezvoltarea tehnologiei informatice au condus la necesitatea de a determina soluții optime la analiza sistemelor economice complexe.

Instrumentul principal pentru rezolvarea unor astfel de probleme este modelarea matematică. În acest caz, se construiește mai întâi un model simplu, apoi se efectuează cercetarea acestuia, făcând posibilă înțelegerea care dintre proprietățile integratoare ale obiectului nu sunt surprinse de schema formală, după care, prin complicarea modelului, o mai mare adecvare a acestuia. la realitate este asigurată. În multe cazuri, prima aproximare a realității este un model în care toate dependențele dintre variabilele care caracterizează starea obiectului sunt liniare. Practica arată că un număr suficient de procese economice sunt descrise destul de complet prin modele liniare. În consecință, programarea liniară ca un aparat care permite găsirea unui extremum condiționat pe o mulțime definită de ecuații liniare și inegalități joacă un rol important în analiza acestor procese.

Programarea liniară a primit o dezvoltare pe scară largă datorită faptului că s-a stabilit că o serie de probleme de planificare și control pot fi formulate sub forma unor probleme de programare liniară, pentru rezolvarea cărora există metode eficiente. Potrivit experților, aproximativ 80–85% din toate problemele de optimizare rezolvate în practică sunt probleme de programare liniară.

Aparatul matematic creat în combinație cu programe de calculator care efectuează calcule intensive în muncă face posibilă utilizarea pe scară largă a modelelor de programare liniară în știința și practica economică.

Definiția 1 9 . Programarea liniară (LP) este un domeniu al programării matematice, care este o ramură a matematicii care studiază metode de găsire a valorilor extreme (mai mari și mai mici) ale unei funcții liniare a unui număr finit de variabile, ale căror necunoscute sunt supuse constrângeri liniare.

Această funcție liniară se numește funcție țintă, iar constrângerile, care reprezintă relații cantitative între variabile care exprimă condițiile și cerințele problemei economice și sunt scrise matematic sub formă de ecuații sau inegalități, se numesc sistem de constrângeri.

O gamă largă de probleme de planificare a proceselor economice se reduce la probleme de programare liniară, unde se pune sarcina de a găsi cea mai bună soluție (optimă).

O problemă generală de programare liniară (GLP) este să găsești valoarea extremă (maximum sau minim) a unei funcții liniare, numită obiectivul 10:

din n variabile X 1 , X 2 , …, X n cu restricții funcționale impuse:

(3.2)

și restricții directe (cerința de non-negativitate a variabilelor)

, (3.3)

Unde A ij , b i , c j– date constante de valori.

În sistemul de restricții (3.2), semnele „mai mic sau egal cu”, „egal cu” și „mai mare sau egal cu” pot apărea simultan.

ZLP într-o formă mai concisă are forma:

,

cu restrictii:

;

.

Vector` X = (X 1 , X 2 , …, X n) ale căror componente satisfac constrângerile funcţionale şi directe ale problemei se numesc plan(sau solutie acceptabila) ZLP.

Toate soluțiile fezabile se formează domeniu probleme de programare liniară, sau regiune a soluțiilor fezabile (ODR). O soluție fezabilă care oferă maximum sau minim al funcției obiectiv f(`X), se numește planul optim al problemei și se notează f(`X * ), Unde ` X * =(X 1 * , X 2 * , …, X n * ).

O altă formă de înregistrare a PPP:

,

Unde f(`X * ) este valoarea maximă (minimă). f(CU, X), preluate toate soluțiile incluse în setul de soluții posibile X .

Definiția 2 11 . Expresia matematică a funcției obiectiv și a constrângerilor acesteia se numește model matematic al unei probleme economice.

Pentru a compila un model matematic aveți nevoie de:

1) identificarea variabilelor;

2) creați o funcție obiectivă pe baza scopului problemei;

3) notează un sistem de restricții, ținând cont de indicatorii din enunțul problemei și de modelele lor cantitative.

Adnotare: Această prelegere acoperă o serie de probleme dedicate programării liniare ca una dintre ramurile programării matematice; în special, formulează principalele tipuri de probleme de programare liniară, relevă diferențele dintre aceste probleme și problemele clasice de analiză matematică; introduce diverse forme de înregistrare a acestor sarcini, realizează formularea acestora și studiul structurii. Problema rezolvării problemelor de programare liniară folosind metoda simplex este explorată cel mai pe deplin.

1. Conceptul de programare matematică

este o disciplină matematică în care se dezvoltă metode de găsire a valorilor extreme ale unei funcții obiective între setul de valori posibile ale acesteia determinate de constrângeri.

Prezența restricțiilor face problemele fundamental diferite de problemele clasice de analiză matematică de găsire a valorilor extreme ale unei funcții. Metode de analiză matematică pentru căutare extremul funcțieiîn sarcini programare matematică se dovedesc a fi nepotrivite.

Sa rezolve probleme programare matematică Au fost dezvoltate și sunt în curs de dezvoltare metode și teorii speciale. Deoarece rezolvarea acestor probleme necesită efectuarea unui număr semnificativ de calcule, când evaluare comparativă metodelor, o mare importanță se acordă eficienței și confortului implementării lor pe computer.

Poate fi considerată ca un set de secțiuni independente implicate în studiul și dezvoltarea metodelor de rezolvare a anumitor clase de probleme.

În funcție de proprietățile funcției obiectiv și ale funcției de constrângere, toate problemele programare matematică sunt împărțite în două clase principale:

  • probleme de programare liniară,
  • sarcini programare neliniară.

Dacă funcția obiectiv și funcțiile de constrângere sunt funcții liniare, atunci problema corespunzătoare de găsire a unui extremum este o problemă de programare liniară. Dacă cel puțin una dintre funcțiile indicate este neliniară, atunci problema corespunzătoare de găsire a unui extremum este problema programare neliniară.

2. Conceptul de programare liniară. Tipuri de probleme de programare liniară

Programare liniară(LP) – una dintre primele și cele mai amănunțite secțiuni studiate programare matematică. Exact programare liniară a fost secțiunea din care a început să se dezvolte disciplina în sine” programare matematică„. Termenul „programare” din titlul disciplinei nu are nimic în comun cu termenul „programare (adică compilarea unui program) pentru un computer” nu are nimic de-a face cu disciplina „ programare liniară„ a apărut chiar înainte de momentul în care computerele au început să fie utilizate pe scară largă pentru a rezolva probleme matematice, de inginerie, economice și de altă natură.

Termenul " programare liniară" a apărut ca urmare a unei traduceri inexacte a englezei "programare liniară". Unul dintre semnificațiile cuvântului "programare" este realizarea de planuri, planificarea. Prin urmare, traducerea corectă a "programare liniară" în engleză nu ar fi " programare liniară", și "planificare liniară", care reflectă mai exact conținutul disciplinei. Cu toate acestea, termenii programare liniară, programare neliniară, programare matematică etc. au devenit general acceptate în literatura noastră și, prin urmare, vor fi păstrate.

Asa de, programare liniară a apărut după cel de-al Doilea Război Mondial și a început să se dezvolte rapid, atrăgând atenția matematicienilor, economiștilor și inginerilor datorită posibilității unei largi aplicații practice, precum și a armoniei matematice.

Se poate spune că programare liniară aplicabil la rezolvarea modelelor matematice ale acelor procese și sisteme care se pot baza pe ipoteza unei reprezentări liniare a lumii reale.

Programare liniară utilizat în rezolvarea problemelor economice, în sarcini precum managementul și planificarea producției; în sarcinile de determinare a amplasării optime a echipamentelor pe nave maritime și în ateliere; în probleme de determinare plan optim transport de mărfuri (sarcină de transport); în probleme de repartizare optimă a personalului etc.

Problemă de programare liniară(LP), așa cum reiese deja din cele spuse mai sus, constă în găsirea minimului (sau maximului) unei funcții liniare sub restricții liniare.

Forma generală problema are forma: găsiți în condiții

Alături de forma generală, ele sunt, de asemenea, utilizate pe scară largă canonicȘi standard forme. Atât în ​​formă canonică, cât și în formă standard

Acestea. toate variabilele din orice soluție fezabilă a problemei trebuie să ia valori nenegative (astfel de variabile sunt de obicei numite nenegativ spre deosebire de așa-zisa gratuit variabile al căror interval de valori nu este supus unor astfel de restricții). Diferența dintre aceste forme este că într-un caz I 2 = 0, iar în celălalt - I 1 = 0.

Problema LP în formă canonică.

Programarea liniară este considerată o realizare revoluționară care a dat omului capacitatea de a formula obiective generale și de a găsi, prin metoda simplex, soluții optime pentru o clasă largă de probleme practice de luare a deciziilor de mare complexitate.

Programare liniară– o disciplină matematică dedicată teoriei și metodelor de rezolvare a problemelor despre extremele funcțiilor liniare pe mulțimi n-spaţiu vectorial dimensional definit de sisteme de ecuaţii liniare şi inegalităţi.

Se poate spune că programare liniară aplicabil la rezolvarea modelelor matematice ale acelor procese și sisteme care se pot baza pe ipoteza unei reprezentări liniare a lumii reale.

Problemă de programare liniară(LP), constă în găsirea minimului (sau maximului) unei funcții liniare sub restricții liniare.

Programarea liniară este utilizată pentru a rezolva următoarele probleme economice:

1. Problema managementului si planificarii productiei.

2. Probleme de stabilire a amplasării optime a echipamentelor pe nave maritime și în ateliere.

3. Problema stabilirii planului optim de transport al marfurilor (problema transportului).

4. Problema repartizării optime a personalului.

5. Probleme legate de amestecuri, alimentație (planificarea compoziției produsului) etc.

3. MODEL DE PROGRAMARE LINEARĂ, REPREZENTAREA SA ÎN TABELE ELECTRONICE MS EXCEL.

În mod tradițional, știința managementului se referă la construirea de modele detaliate, ca urmare a analizei cărora se iau deciziile de management. Astăzi, milioane de manageri folosesc foi de calcul pentru a analiza problemele de afaceri. Foile de calcul moderne au multe instrumente puternice care pot fi folosite pentru a analiza modelele mai precis, rezultând în decizii mai bune, mai aproape de optime. Odată cu utilizarea din ce în ce mai mare a foilor de calcul în procesul de management, viitorii profesioniști trebuie să posede abilități de dezvoltare a modelelor profesionale - cum să „planifice” o foaie de lucru goală, astfel încât să obțină un model util și practic al unei situații de afaceri fără a se adânci în complexitățile algoritmice și matematice. a calculelor.

Principalii pași pentru crearea unui model de programare liniară în Excel:

1. Scrierea și testarea unui model de programare liniară simbolică. Modelul este scris pe hârtie în formă matematică.

2. Crearea și depanarea unui model de programare liniară tabelară. Pe baza modelului simbolic al produsului medicamentos, reprezentarea acestuia este creată în Excel .

3. O încercare de a optimiza modelul utilizând suplimentul CĂUTARE SOLUȚIE.

4. UTILIZAREA SUPLIMENTULUI CAUTAREA O SOLUȚIE.

Folosind foi de calcul, puteți simula situații reale și puteți evalua rezultatele. Cu alte cuvinte, folosind foi de calcul, puteți analiza rezultatele operațiunilor și puteți prezice perspectivele de viitor ale întreprinderii. Aceste sarcini în mediu MS Excel face posibilă rezolvarea utilizând programul de completare Căutare soluție.


Găsirea unei soluții - Acesta este un add-on care este conceput pentru a optimiza modelele în prezența constrângerilor. Este alcătuit din două componente software: un program scris în Visual Basic, care traduce informațiile prezentate pe scrisoarea de lucru pentru reprezentare internă, care este utilizat de un alt program. Al doilea program se află în memoria computerului ca un modul de program separat. Efectuează optimizarea și returnează soluția găsită la primul program, care reia datele de pe foaia de lucru. Folosind-o, puteți găsi valoarea optimă a formulei, care este stocată în celula țintă. Această procedură funcționează pe un grup de celule care sunt direct legate de o formulă din celula țintă. Pentru a obține rezultatul formulei în celula țintă, procedura modifică valoarea în celulele care afectează căutarea. Pentru a reduce pluralitatea de valori care sunt utilizate în modelul problemei, se aplică o constrângere. Aceste constrângeri pot conține o referință la alte celule care afectează căutarea.

Algoritm general pentru lucrul cu suplimentul Găsirea unei soluții.

  1. În meniu Serviciu selectați o echipă Găsirea unei soluții.
  2. În câmp Setează celula țintă Introduceți adresa celulei care conține formula pentru a optimiza modelul.
  3. Pentru a maximiza valoarea unei celule țintă prin modificarea valorilor celulelor de influență, setați comutatorul la Valoare maximă. Pentru a minimiza valoarea celulei țintă prin modificarea valorilor celulelor care influențează, setați comutatorul la Valoarea minima. Pentru ca celula țintă să obțină valoarea unui anumit număr, setați comutatorul pe poziția Sensși introduceți numărul corespunzător.
  4. În câmp Schimbarea celulelor Introduceți adresele celulelor care își modifică valorile, separându-le prin virgule. Celulele modificate trebuie să fie direct sau indirect legate de celula țintă. Pot fi instalate până la 200 de celule variabile.
  5. În câmp Restricții introduceți toate restricțiile care se impun în căutarea unei soluții.
  6. Faceți clic pe butonul A executa.
  7. Pentru a salva soluția găsită, selectați comutatorul din caseta de dialog Rezultatele căutării soluției a pozitiona Salvați soluția găsită. Pentru a relua datele de intrare, setați comutatorul pe Restabiliți valorile originale.
  8. Pentru a întrerupe căutarea unei soluții, apăsați tasta Esс. MS Excel va recalcula foaia ținând cont de valorile celulelor găsite care afectează rezultatul.

Algoritm robotizat cu nadbudova Găsirea unei soluții.

5. REZOLVAREA UNEI PROBLEME DE PROGRAMARE LINEARĂ FOLOSIND UN PROGRAM MS EXCEL.

Exemplu. Cofetărie pentru fabricarea a trei tipuri de caramel A, B, C foloseste trei tipuri principale de materii prime: zahar, melasa si piure de fructe. Consum standard de zahăr pentru producerea a 1 kg de caramel de fiecare tip, respectiv, niveluri: 0,8 kg; 0,5 kg; 0,6 kg; melasa – 04 kg; 0,4 kg; 0,3 kg; piure de fructe – 0 kg; 0,1 kg; 0,1 kg. Dulciurile pot fi produse în orice cantități (vânzările sunt garantate), dar aprovizionarea cu materii prime este limitată: rezerve de zahăr - 80 kg, melasă - 60 kg, piure de fructe - 12 kg. Profitați din vânzarea a 1 kg de caramel A este 10 UAH, tip ÎN – 11 UAH, tip CU – 12 UAH.

tabelul 1

Stabiliți un plan pentru producția de caramel, care să asigure profit maxim din activitățile cofetăriei.

Programare liniară

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

Programarea liniară 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 formulate și dovedite geometric.

Poveste

Metoda punctului interior a fost menționată pentru prima dată de I. I. Dikin în 1967.

Sarcini

Principala problemă (standard) de programare liniară se numește problema găsirii minimului unei funcții obiective liniare (forma liniară) de forma:

in conditii

, .

Problema programarii liniare va avea vedere canonică , dacă în problema principală în locul primului sistem de inegalități există un sistem de ecuații:

,

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 unele echivalente (având același set de soluții) prin înlocuirea variabilelor și înlocuirea egalităților cu o pereche de inegalităților.

Este ușor de observat că problema găsirii maximului poate fi înlocuită cu problema găsirii minimului luând coeficienți 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ă sunt atractivi unul pentru celălalt. Trebuie să ne căsătorim cu un număr maxim de cupluri cu simpatie reciprocă.

Să introducem variabile care corespund perechii dintre -băiat și -fată și să satisfacem restricțiile:

cu funcţie obiectivă. Se poate arăta că printre soluțiile optime la această problemă există una întreagă. Variabilele egale cu 1 vor corespunde cuplurilor care ar trebui să fie căsătorite.

Debit maxim

Să existe un grafic (cu muchii orientate) în care pentru fiecare muchie să fie indicată capacitatea sa. Și sunt date două vârfuri: dren și sursă. Este necesar să se indice pentru fiecare margine cât lichid va curge prin ea (nu mai mult decât capacitatea sa) astfel încât să se maximizeze debitul total de la sursă la scurgere (lichidul nu poate apărea sau dispărea la toate vârfurile cu excepția scurgerii și sursei).

Să luăm ca variabile cantitatea de lichid care curge prin coastă. Apoi

,

unde este capacitatea marginii respective. Aceste inegalități trebuie suplimentate de egalitatea cantității de fluid care intra și care iese pentru fiecare vârf, cu excepția scurgerii și sursei. Ca o funcție, este firesc să se ia diferența dintre cantitatea de fluid care iese și care intra la sursă.

O generalizare a problemei anterioare este fluxul maxim al costului minim. În această problemă, sunt date costurile pentru fiecare margine și trebuie să selectați debitul cu costul minim dintre fluxurile maxime. Această problemă se rezumă 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 cu algoritmii generali de rezolvare a problemelor de programare liniară datorită structurii speciale a ecuațiilor și inegalităților.

Sarcina de transport

Există o anumită marfă omogenă care trebuie transferată de la depozite la fabrici. Pentru fiecare depozit se știe câtă marfă conține, iar pentru fiecare fabrică este cunoscută cererea de marfă. Costul transportului este proporțional cu distanța de la depozit la fabrică (se cunosc toate distanțele de la al-lea depozit la a--a fabrică). Este necesar să se întocmească cel mai ieftin plan de transport.

Variabilele decisive în acest caz sunt cantitățile de marfă transportate de la al-lea depozit la a-lea fabrică. 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 primește al doilea). Trebuie să găsim strategia optimă pentru primul jucător.

Să presupunem că într-o strategie optimă, de exemplu, primul jucător trebuie să aleagă un număr cu probabilitate . Atunci strategia optimă este o soluție la următoarea problemă de programare liniară:

, , (),

în care funcția trebuie maximizată. Valoarea în soluția optimă va fi așteptarea primei primului jucător în cel mai rău caz.

Algoritmi de rezolvare

Cea mai cunoscută și utilizată pe scară largă în practică pentru rezolvarea unei probleme de programare liniară generală (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ă secvenţial vârfurile poliedrului de soluţii fezabile atunci când se caută soluţia optimă.

Primul algoritm polinomial, metoda elipsoidului, a fost propus în 1979 de către matematicianul sovietic L. Khachiyan, rezolvând astfel o problemă care rămăsese nerezolvată de multă vreme. Metoda elipsoidală are o natură complet diferită, necombinatorie decât 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 întregi clase 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 continuă a problemei LP, când în loc să enumere vârfurile poliedrului pentru soluții la problema LP, se efectuează o căutare de-a lungul traiectoriilor în spațiul variabilelor problemei care nu trec prin vârfurile lui. poliedrul. Metoda punctului interior, care, spre deosebire de metoda simplex, traversează puncte din interiorul regiunii fezabile, utilizează metode de programare neliniară cu barieră logartică dezvoltate în anii 1960 de Fiacco și McCormick.

Vezi si

  • Metodă grafică pentru rezolvarea unei probleme de programare liniară

Note

Literatură

  • Thomas H. Corman și colab. Capitolul 29. Programarea liniara // Algoritmi: constructie si analiza = INTRODUCERE IN ALGORITMI. - Ed. a 2-a. - M.: „Williams”, 2006. - P. 1296. - ISBN 5-8459-0857-4
  • Akulich I.L. Capitolul 1. Probleme de programare liniară, Capitolul 2. Probleme speciale de programare liniară // Programarea matematică în exemple și probleme. - M.: Şcoala superioară, 1986. - 319 p. - ISBN 5-06-002663-9
  • Karmanov V. G. Programare matematică. - editia a 3-a. - M.: Nauka, 1986. - 288 p.
  • Danzig George Bernard „Amintiri despre începutul programării liniare”

Legături

  • - Pachet de optimizare gratuit conceput pentru a rezolva probleme de programare liniare, întregi și obiective.
  • Vershik A. M. „Despre L. V. Kantorovich și programarea liniară”
  • Bolshakova I. V., Kuralenko M. V. „Programare liniară. Manual educațional și metodologic pentru test.”
  • Barsov A. S. „Ce este programarea liniară”, Prelegeri populare despre matematică, Gostekhizdat, 1959.
  • M. N. Vyalyi Inegalități liniare și combinatorie. - MCNMO, 2003.

Fundația Wikimedia. 2010.

  • Salten, Felix
  • Glagow, Martina

Vedeți ce este „programarea liniară” în alte dicționare:

    programare liniară- - programare liniară O zonă de programare matematică dedicată teoriei și metodelor de rezolvare a problemelor extreme caracterizate printr-o relație liniară între ... ... Ghidul tehnic al traducătorului

    Programare liniară

    Programare liniară- un domeniu de programare matematică consacrat teoriei și metodelor de rezolvare a problemelor extreme caracterizate printr-o relație liniară între variabile. În forma sa cea mai generală, problema L.p. poate fi scris așa. Sunt date… … Dicţionar economico-matematic