Programowanie liniowe

Z testwiki
Przejdź do nawigacji Przejdź do wyszukiwania

Programowanie liniowe – klasa problemów programowania matematycznego, w której wszystkie warunki ograniczające oraz funkcja celu mają postać liniową[1]. Warunki ograniczające mają postać:

a1x1+a2x2++anxnα,
a1x1+a2x2++anxnα,
a1x1+a2x2++anxn=α.

Mamy zmaksymalizować lub zminimalizować funkcję celu, również liniową:

f=α+c1x1+c2x2++cnxn.

Zmienne xi są liczbami rzeczywistymi.

Nie zawsze taki problem ma jakiekolwiek rozwiązanie, np.:

x12,
x11.

Być może też żadne rozwiązanie nie jest optymalne, ponieważ potrafimy uzyskać dowolnie dużą wartość funkcji celu, np.:

Zmaksymalizuj f=x1 przy warunku
x110.

Programowanie liniowe znalazło szerokie zastosowanie w teorii decyzji, np. do optymalizacji planu produkcyjnego. Wiele problemów optymalizacyjnych znajduje rozwiązanie poprzez sprowadzenie ich do postaci problemu programowania liniowego.

Postać standardowa

Postać standardowa to taka, w której funkcja celu ma być maksymalizowana. Występują tylko warunki postaci:

a1x1+a2x2+anxnα

oraz na każdą zmienną nałożony jest warunek:

xi0.

Można więc zapisać:

a11x1+a12x2+a1nxnb1,a21x1+a22x2+a2nxnb2,am1x1+am2x2+amnxnbm,[.7em]x1,x2,,xn0,

czyli ograniczenia w postaci standardowej można w sposób ogólny zapisać bardziej zwięźle:

j=1naijxjbidlai=1,,m,xj0dlaj=1,,n.

Jeszcze zwięźlej ujmuje się to zagadnienie w postaci macierzowej:

Zmaksymalizować funkcję celu z(𝐱)

z(𝐱)=𝐜T𝐱

przy ograniczeniach

𝐀𝐱𝐛,𝐱Θ,

gdzie:

𝐜=(cj)j=1,,nn,𝐛=(bi)i=1,,mm,𝐱=(xi)i=1,,nn,Θ=(0,,0)n𝐀=(aij)i=1,,m;j=1,,nm×n.

Sprowadzanie do postaci standardowej

Żeby przekształcić problem do postaci standardowej, zamiany minimalizacji na maksymalizację oraz warunków mniejsze-równe na większe-równe, dokonuje się przez zamianę znaków przy współczynnikach. Jeśli mamy warunek:

a1x1+a2x2+anxn=α,

to jest on równoważny parze warunków:

a1x1+a2x2+anxnα,
a1x1+a2x2+anxnα,

czyli:

a1x1+a2x2+anxnα,
a1x1+a2x2anxnα.

Jeśli na zmienną xi nie ma ograniczenia, że musi przyjmować tylko wartości dodatnie, wprowadzamy 2 nowe zmienne xi i xi i zamieniamy wszystkie wystąpienia tej zmiennej na xixi. Na obie nowe zmienne możemy już nałożyć ograniczenie, że są one nieujemne.

Postać równościowa

Postać równościowa (kanoniczna) to taka, w której funkcja celu ma być zmaksymalizowana, wszystkie warunki są równościami, a na wszystkie zmienne nakłada się warunek, że są nieujemne.

Żeby pozbyć się nierówności:

a1x1+a2x2+anxnα,

wprowadzamy nową zmienną s, która może przyjmować tylko wartości nieujemne i przekształcamy równanie do postaci:

a1x1+a2x2+anxn=α+s,
a1x1+a2x2+anxns=α

i analogicznie dla mniejsze-równe, z odwróconym znakiem.

Zwykle chcemy przepisać te równania do postaci:

xi=αi+j=1ncijxj

tak, że zmienne występujące po lewej stronie równań nie występują nigdzie indziej (ani po prawej stronie równań, ani w funkcji celu).

Z układem takim wiąże się rozwiązanie podstawowe – takie, w którym wszystkie zmienne oprócz lewostronnych mają przypisaną wartość zero, natomiast wszystkie lewostronne oraz funkcja celu mają wartość równą wartości odpowiednich stałych.

f=2x1+x2,
x4=5+2x2x3,
x5=2x1+12x3.

Rozwiązaniem podstawowym tego układu jest (0, 0, 0, 5, −2), i wartością funkcji celu jest 2.

Rozwiązanie podstawowe nie zawsze musi spełniać wszystkie warunki nieujemności (w tym przypadku niespełniony jest warunek na x5). Przekształcenie równania, które zachowuje zbiór prawidłowych rozwiązań może zmieniać nam rozwiązanie podstawowe – taka jest zresztą idea podstawowego algorytmu programowania liniowego, algorytmu sympleksu.

Zobacz też

Przypisy

Szablon:Przypisy

Linki zewnętrzne

Szablon:Kontrola autorytatywna