metoda simpleksmetoda simpleks jak wiadomo, problem pl z dowolną liczbą zmiennych można...
TRANSCRIPT
Metoda Simpleks
Jak wiadomo, problem PL z dowolną liczbą zmiennych można
rozwiązać wyznaczając wszystkie wierzchołkowe punkty
wielościanu wypukłego, a następnie porównując wartości funkcji
celu w tych punktach wierzchołkowych. Jednak w związku z
wielością punktów wierzchołkowych metoda przeszukania
wszystkich punktów w celu znalezienia punktu optymalnego jest
nieefektywna obliczeniowo.
Istota metody Simpleks sprowadza się do tego, że jeżeli znany jest
jakikolwiek wierzchołkowy punkt i wartość funkcji celu w tym
punkcie, to wszystkie punkty wierzchołkowe, w których funkcja
celu przyjmuje wartości mniejsze, są odrzucane.
Kolejny krok iteracji polega na tym, że przechodzimy do
następnego wierzchołka, znajdującego się na jednej krawędzi z
odnalezionym już punktem, w którym funkcja celu osiąga lepszą
wartość. Ogólna idea metody polega więc na odwiedzaniu
kolejnych punktów wierzchołkowych w taki sposób, aby w każdym
kroku poprawić wartość funkcji celu. Metoda zatrzymuje się gdy
dalsza poprawa nie jest już możliwa. Można w ten sposób
utworzyć ciąg rozwiązań dopuszczalnych bazowych zbieżny do
rozwiązania optymalnego (o ile istnieje).
Punktem wyjścia do metody Simpleks jest postać standardowa
problemu PL. Autorem metody jest George Bernard Dantzig (1914
– 2005), który opracował ją w końcu lat 40-tych XX wieku. Nazwa
metody pochodzi od simpleksu, figury wypukłej będącej
uogólnieniem trójkąta na wiele wymiarów.
Metoda korzysta z tablic przekształceń simpleksowych. Każdej
iteracji odpowiada jedna tablica, a danej tablicy odpowiada
bieżące rozwiązanie dopuszczalne bazowe.
Tablica przekształceń simpleksowych:
𝑐1 𝑐𝑙 𝑐𝑚 𝑐𝑘 𝑐𝑛
Baza 𝒄𝐵 𝒃 𝑥1 … 𝑥𝑙 … 𝑥𝑚 … 𝑥𝑘 … 𝑥𝑛
𝑥𝑖 𝑐𝑖𝐵 𝑏𝑖 𝑎11 𝑎1𝑙 𝑎1𝑚 𝑎1𝑘 𝑎1𝑛
⋮
𝑥𝑙 𝑐𝑙𝐵 𝑏𝑙 𝑎𝑙1 𝑎𝑙𝑙 𝑎𝑙𝑚 𝑎𝑙𝑘 𝑎𝑙𝑛
⋮
𝑥𝑚 𝑐𝑚𝐵 𝑏𝑚 𝑎𝑚1 𝑎𝑚𝑙 𝑎𝑚𝑚 𝑎𝑚𝑘 𝑎𝑚𝑛
wiersz
wskaźnikowy
𝑧 𝑧1 − 𝑐1 𝑧𝑙 − 𝑐𝑙 𝑧𝑚 − 𝑐𝑚 𝑧𝑘 − 𝑐𝑘 𝑧𝑛 − 𝑐𝑛
ALGORYTM SIMPLEKS
1. Sprawdzić, czy istnieje takie 𝑗, że 𝑧𝑗 − 𝑐𝑗 < 0.
Jeśli NIE, to bieżące rozwiązanie dopuszczalne bazowe jest
optymalne i STOP. W przeciwnym wypadku przejść do punktu 2.
2. (Kryterium wejścia) Wybrać 𝑘 takie, że:
𝑧𝑘 − 𝑐𝑘 = min𝑗:(𝑧𝑗−𝑐𝑗)<0
{𝑧𝑗 − 𝑐𝑗} , 𝑗 = 1, … , 𝑛
wektor 𝒂𝑘 wchodzi do kolejnej bazy.
3. (Kryterium wyjścia) Wybrać 𝑙 takie, że:
𝑏𝑙
𝑎𝑙𝑘= min
𝑖:𝑎𝑖𝑘>0{
𝑏𝑖
𝑎𝑖𝑘} , 𝑖 = 1, … , 𝑚
wektor 𝒂𝑙 będzie wychodził z bazy.
Jeśli 𝑎𝑖𝑘 > 0 nie istnieje, tzn. ⋁ 𝑎𝑖𝑘 ≤ 0𝑖∈{1,…,𝑚} , to problem ma
rozwiązanie optymalne nieskończone i STOP.
4. Wyrazić wektory niebazowe jako kombinacje liniowe wektorów
nowej bazy, stosując metodę eliminacji współczynników
Gaussa-Jordana:
𝑎𝑙𝑗′ =
𝑎𝑙𝑗
𝑎𝑙𝑘 , 𝑗 = 1, … , 𝑛
𝑏𝑙′ =
𝑏𝑙
𝑎𝑙𝑘
𝑎𝑖𝑗′ = 𝑎𝑖𝑗 −
𝑎𝑙𝑗 ∙ 𝑎𝑖𝑘
𝑎𝑙𝑘 , 𝑖 ≠ 𝑙, 𝑗 = 1, … , 𝑛
𝑏𝑖′ = 𝑏𝑖 −
𝑏𝑙 ∙ 𝑎𝑖𝑘
𝑎𝑙𝑘, 𝑖 ≠ 𝑙
Obliczyć:
𝑧𝑗 − 𝑐𝑗: 𝑧𝑗 = ∑ 𝑐𝑖𝐵𝑎𝑖𝑗 ,
𝑚
𝑖=1
𝑗 = 1, … , 𝑛
𝑧 = ∑ 𝑐𝑖𝐵𝑏𝑖
𝑚
𝑖=1
i wrócić do punktu 1.
Jak znaleźć początkowe rozwiązanie dopuszczalne bazowe ?
Przedstawmy macierz ograniczeń 𝑨 w postaci: 𝑨 = [𝑩, 𝑷], gdzie:
𝑩[m x m] – baza zbioru kolumn macierzy 𝑨, 𝑷[(n–m) x m] – zbiór
pozostałych kolumn.
Z definicji rozwiązania bazowego wynika, że 𝒙𝐵 = 𝑩−1 ∙ 𝒃.
Jeżeli przyjąć, że 𝑩 = 𝑰, gdzie 𝑰 − macierz jednostkowa stopnia m,
to 𝑩−1 = 𝑰 i stąd: 𝒙𝐵 = 𝒃.
Wniosek
Jeśli w macierzy 𝑨 uda się wyróżnić podmacierz jednostkową
stopnia m, to rozwiązanie dopuszczalne bazowe początkowe jest po
prostu równe wektorowi stałych 𝒃 w układzie ograniczeń 𝑨𝒙 = 𝒃.
Jak zapewnić istnienie podmacierzy jednostkowej stopnia m w
zbiorze kolumn macierzy 𝑨 ?
1. wykorzystać wektory jednostkowe oryginalnie istniejące w
macierzy 𝑨 (jeśli takie występują)
2. wykorzystać wektory jednostkowe odpowiadające zmiennym
osłabiającym wprowadzonym ze współczynnikiem +1
(ograniczenie typu ≤)
3. wprowadzić zmienne sztuczne (metoda sztucznej bazy).
Dla rozwiązania początkowego 𝒙0 = 𝒃 wartość 𝑧 w tablicy
simpleksów (𝑧 = ∑ 𝑐𝑖𝐵𝑏𝑖
𝑚𝑖=1 ) jest początkową wartością funkcji celu
odpowiadającą początkowemu rozwiązaniu dopuszczalnemu
bazowemu 𝒙0, a więc startowemu punktowi wierzchołkowemu w
przestrzeni 𝑅𝑛 o współrzędnych [𝒙0
𝟎].
Przykład
Rozwiązać problem PL:
min 𝑧 = −5𝑥1 − 2𝑥2
p. o. − 2𝑥1 + 𝑥2 ≥ −3
𝑥1 + 4𝑥2 ≤ 6
𝑥1, 𝑥2 ≥ 0
Postać standardowa:
max − 𝑧 = 5𝑥1 + 2𝑥2
p. o. 2𝑥1 − 𝑥2 ≤ 3
𝑥1 + 4𝑥2 ≤ 6
𝑥1, 𝑥2 ≥ 0
max − 𝑧 = 5𝑥1 + 2𝑥2
p. o. 2𝑥1 − 𝑥2 + 𝑠1 = 3
𝑥1 + 4𝑥2 + 𝑠2 = 6
𝑥1, 𝑥2, 𝑠1, 𝑠2 ≥ 0
𝑨 = [2 −1 1 01 4 0 1
]
fragment macierzy 𝑨 (zaznaczony): [… …… …
1 00 1
] jest macierzą
jednostkową stopnia m = 2 utworzoną z wektorów 𝒂3 i 𝒂4.
𝒃 = [36
]
𝒄T = [5 2 0 0]
Tworzymy tablicę simpleks:
Baza 𝒄𝑩 𝒃 5 2 0 0
𝑥1 𝑥2 𝑠1 𝑠2
𝑠1 0 3 2 -1 1 0
𝑠2 0 6 1 4 0 1
0 -5 -2 0 0
k. zielony – wektor c, niebieski – wektor b, czerwony – macierz 𝑨
wektory bazowe zawsze tworzą macierz jednostkową
dla wektorów bazowych wartość w wierszu wskaźnikowym zawsze
wynosi zero
na przecięciu wektora wchodzącego i wychodzącego znajduje się
tzw. element centralny
Tablica 2:
Baza 𝒄𝑩 𝒃 5 2 0 0
𝑥1 𝑥2 𝑠1 𝑠2
𝑥1 5 3/2 1 -1/2 1/2 0
𝑠2 0 9/2 0 9/2 -1/2 1
15/2 0 -9/2 5/2 0
< 0
Tablica 3:
Baza 𝒄𝑩 𝒃 5 2 0 0
𝑥1 𝑥2 𝑠1 𝑠2
𝑥1 5 2 1 0 4/9 1/9
𝑥2 2 1 0 1 -1/9 2/9
12 0 0 2 1
≥0 STOP
𝑥1𝑏1 : 3
2−
92
(−12
)
92
= 2
𝑥1𝑠1 : 1
2−
(−12
) (−12
)
92
=1
2−
1
4∙
2
9=
8
18=
4
9
𝑥1𝑠2: 0 −1 (−
12
)
92
=1
9
wiersz wskaźnikowy:
𝑠1: 5 ∙4
9+ (2 ∙ (−
1
9)) − 0 =
20
9−
2
9=
18
9= 2
Wyniki odczytujemy z wektora 𝒃:
𝑥1∗ = 2
𝑥2∗ = 1
𝑠1∗ = 𝑠2
∗ = 0
−𝑧∗ = 12
𝑧∗ = −12