programowanie liniowe

30
Programowanie liniowe Wykład 3

Upload: dixie

Post on 17-Jan-2016

88 views

Category:

Documents


1 download

DESCRIPTION

Programowanie liniowe. Wykład 3. Optymalizacja bez ograniczeń Optymalizacja z ograniczeniami Programowanie Liniowe Programowanie Nieliniowe programming – arch. planning Elementy optymalizacji z ograniczeniami : Zmienne decyzyjne [ decision variables ] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Programowanie liniowe

Programowanie liniowe

Wykład 3

Page 2: Programowanie liniowe

• Optymalizacja bez ograniczeń• Optymalizacja z ograniczeniami

– Programowanie Liniowe– Programowanie Nieliniowe

programming – arch. planning

Elementy optymalizacji z ograniczeniami:1. Zmienne decyzyjne [decision variables]2. Funkcja celu [objective function]3. Ograniczenia [constraints]4. Ograniczenia zmiennych [variable bounds]

Page 3: Programowanie liniowe

Firma Rowerek• Firma Rowerek produkuje ręcznie dwa rodzaje rowerów:

– Rowery górskie– Ścigacze szosowe

• I chce wyznaczyć tempo produkcji każdego rodzaju roweru tak, aby zmaksymalizować zysk ze sprzedaży.

• Firma Rowerek zakłada, że może sprzedać wszystko co wyprodukowała.• Dwa różne zespoły produkują różne rodzaje rowerów:

– Zespół od rowerów górskich max 2 rowery dziennie– Zespół od ścigaczy szosowych max 3 rowery dziennie

• Do każdego typu roweru potrzebny jest jednakowa ilość czasu na maszynie do wykańczania metalu– Maszyna może obrobić do 4 rowerów dziennie

• Księgowy szacuje, że rowery generują następujące zyski:– Górski $15– Szosowy $10

Page 4: Programowanie liniowe

Rozwiązanie• Rozwiązanie intuicyjne:

– Produkujemy najwięcej górali jak się da (max 2) a resztę mocy przeznaczamy na szosowe (2).

– Tym samym generujemy łączny dzienny zysk równy $50.• Programowanie liniowe (rozwiązanie musi się zgadzać z

intuicją)– Zmienne decyzyjne: liczba produkowanych górali x1 oraz szosowych

x2

– Zmienne te muszą być nieujemne x1≥0, x2≥0

– Funkcja celu: max dzienny zysk: max Z=15x1+10x2 (w $ na dzień)– Ograniczenia:

• Dzienny limit produkcji górali: x1≤2 (w rowerach na dzień)

• Dzienny limit produkcji szosowych: x2≤3 (w rowerach na dzień)

• Limit prod.maszyny do wykańczania metalu: x1+x2 ≤ 4 (w rowerach na dzień)

Page 5: Programowanie liniowe

Ważne są wierzchołki

• Region dopuszczalny (feasible region)

• Linie jednakowego zysku to linie równoległe

• Zysk powiększa się w kierunku gradientu funkcji celu

• Wierzchołki “najbardziej wystają na zewnątrz”

• Optimum to wierzchołek bądź ściana razem z wierzchołkami

• Optymalny może być jeden wierzchołek lub dwa sąsiadujące ze sobą

• Jeśli dwa wierzchołki są optymalne, to linia je łącząca też jest optymalna

Page 6: Programowanie liniowe

Założenia programowania liniowego

• Liniowy względem zmiennych decyzyjnych– Własność addytywności i proporcjonalności

• Wyklucza krzywe, funkcje krokowe oraz czynniki interakcji, np. 5x1x2, koszty wystartowania start-up

– Zakłada, że zmienne przyjmują wartości rzeczywiste• Wyklucza zmienne całkowitoliczbowe

• Programowanie w ogólności zakłada, że znane są wszystkie parametry– Jednak można przeprowadzić analizę wrażliwości

(sensitivity analysis)

Page 7: Programowanie liniowe

Zadanie Programowania Liniowego (ZPL) w formie standardowej [the standard form LP]

Charakterystyka:• Funkcja celu maksymalizowana• Wszystkie ograniczenia typu ≤• Wszystkie ograniczenia mają nieujemną

prawą stronę• Wszystkie zmienne są nieujemneReprezentacja algebraiczna: • Funkcja celu: • m ograniczeń funkcjonalnych

• Ograniczenia nieujemności

Page 8: Programowanie liniowe

W praktyce

• Solvery używane w praktyce wykorzystują różne rodzaje input formats:– Bezpośrednia reprezentacja algebraiczna z

ograniczeniami zapisanymi explicite– Reprezentacja arkuszu kalkulacyjnego, ogólnie z

kolumnami jako zmiennymi i wierszami jako ograniczeniami

– Język algebraiczny, który pozwala na wykorzystanie sum i indeksów przez co model zapisany jest bardzo kompaktowo – najlepsze w praktyce

– Indywidualne formaty

Page 9: Programowanie liniowe

Model z 1963 roku• Mamy dwie fabryki (Seattle i San Diego) i trzy rynki zbytu (New York,

Chicago i Topeka)• Uwzględniając popyt rynków zbytu oraz podaż fabryk celem jest

minimalizacja kosztów transportu homogenicznego towaru pomiędzy fabrykami a rynkami zbytu

Page 10: Programowanie liniowe
Page 11: Programowanie liniowe
Page 12: Programowanie liniowe

Parę definicji

• Rozwiązanie (solution)• Rozwiązanie wierzchołkowe (cornerpoint solution)• Dopuszczalne rozwiązanie wierzchołkowe (feasible cornerpoint solution)• Sąsiadujące rozwiązania wierzchołkowe (adjacent cornerpoint solutions)

Page 13: Programowanie liniowe

Kluczowe własności programu liniowego

1. Punkt optymalny jest zawsze w dopuszczalnym rozwiązaniu wierzchołkowym

2. Jeśli wartość funkcji celu dla danego dopuszczalnego rozwiązania wierzchołkowego jest wyższa lub równa wartości funkcji celu dla wszystkich sąsiadujących dopuszczalnych rozwiązań wierzchołkowych, to to rozwiązanie jest optymalne

3. Jest skończona liczba dopuszczalnych rozwiązań wierzchołkowychKonsekwencje4. Szukaj tylko wśród wierzchołków5. Łatwo stwierdzić kiedy dany punkt jest optimum6. Jest zagwarantowane, że metoda osiągnie optimum

Page 14: Programowanie liniowe

Metoda simplexDwie fazy:1. Faza pierwsza (start-up) – znajdź jakiekolwiek dopuszczalne rozwiązanie

wierzchołkowe– dlatego ZPL w postaci standardowej jest wygodne, ponieważ początek układu

współrzędnych zawsze jest dopuszczalnym rozwiązaniem wierzchołkowym– Jeśli nie ma postaci standardowej, wymagana jest specjalna metoda, o której

później

2. Faza druga (iteracje) – przesuwaj się do sąsiadujących dopuszczalnych rozwiązań wierzchołkowych, które są lepsze od poprzedniego, aż nie będzie już lepszych

Page 15: Programowanie liniowe

Algebraiczne znajdowanie wierzchołków

• Prawdziwe problemy mają miliony zmiennych• Nie da się przedstawić graficznie• Stąd potrzebny algebraiczny sposób

– Dla problemu w postaci standardowej trzeba zamienić ograniczenia w postaci nierówności w ograniczenia w postaci równości

– A następnie wyznaczyć rozwiązanie układu podzbioru równań• Podzbiór – ponieważ zwykle wszystkie równości nie mogą jednocześnie

zachodzić• Potrzebujemy sposobu, aby pamiętać, które równania są obecnie wybrane do

podzbioru (czyli aktywne)

• Rozwiązaniem powyższych problemów jest włączenie zmiennych luzu (slack variables), na przykład:

x1 ≤ 2 zamieniamy na x1 + s1 = 2, gdzie s1 ≥ 0 jest zmienną luzu

Page 16: Programowanie liniowe

Dla firmy Rowerek

• Problem w dwóch wymiarach jest teraz problemem w 5 wymiarach– Zmienna luzu przyjmuje dodatnią wartość tylko wtedy, gdy dane ograniczenie nie jest

aktywne

Więcej terminologii• Rozwiązanie rozszerzone (augmented solution): wartości wszystkich zmiennych

łącznie ze zmiennymi luzu, np. optymalne rozwiązanie rozszerzone dla Rowerka to x1,x2,s1,s2,s3 = (2,2,0,1,0)

• Rozwiązanie bazowe (basic solution): rozszerzone rozwiązanie wierzchołkowe (może być dopuszczalne lub niedopuszczalne), np. (2,3,0,0,-1) jest rozwiązaniem bazowym niedopuszczalnym

• Dopuszczalne rozwiązanie bazowe (basic feasible solution), dopuszczalne rozszerzone rozwiązanie wierzchołkowe np. (0,3,2,0,1)

Page 17: Programowanie liniowe

Ustalanie wartości dla zmiennych• Stopnie swobody (degrees of freedom df)df = (liczba zmiennych w postaci równania) - (liczba niezależnych równań)• Metoda simplex automatycznie przyporządkuje wartość zero (odpowiednie ograniczenie

jest aktywne) dla df sposród zmiennych a następnie wyznaczy wartości pozostałych zmiennych– x1=0 znaczy, że ograniczenie x1 ≥ 0 jest aktywne

– x2=0 znaczy, że ograniczenie x2 ≥ 0 jest aktywne

– s1=0 znaczy, że ograniczenie x1 ≤ 2 jest aktywne

– s2=0 znaczy, że ograniczenie x2 ≤ 3 jest aktywne

– s3=0 znaczy, że ograniczenie x1+x2 ≤ 4 jest aktywne

• W naszym przykładzie df=2, zatem simplex przyporządkuje dwóm spośród pięciu zmiennych wartość 0.

Page 18: Programowanie liniowe

• Ostatnie uwagi terminologiczne:– Zmienna niebazowa (nonbasic variable): zmienna, której metoda

simplex obecnie przyporządkowuje wartość 0– Zmienna bazowa (basic variable): zmienna, której metoda simplex

obecnie nie przyporządkowuje wartości 0• W postaci standardowej dodatnie• Ale mogą być zerowe w specjalnych okolicznościach

– Baza (a basis): Zbiór obecnych zmiennych bazowych

Niebazowa, wartość zmiennej do zera, ograniczenie aktywne• Możemy zgadnąć bazę, ale trzeba uważać, ponieważ

– Możemy dostać niedopuszczalny wierzchołek (rysunek wcześniej)– Możemy nawet nie dostać wierzchołka w ogóle (rysunek poniżej)

Page 19: Programowanie liniowe

Przejście do lepszego dopuszczalnego rozwiązania bazowego

• Wierzchołek sąsiadujący jest dobrym kandydatem, ponieważ: – W dwóch sąsiadujących wierzchołkach zbiór bazowy oraz

niebazowy są identyczne za wyjątkiem jednego elementu– Na przykład:

• Punkt A: zbiór niebazowy = {s1,s3}, zbiór bazowy = {x1,x2,s1}

• Punkt B: zbiór niebazowy = {s1,s2}, zbiór bazowy = {x1,x2,s3}

Nie jest to jednak warunek wystarczający, aby dwa wierzchołki sąsiadowały (patrz punkty (0,4) oraz (4,0))

Page 20: Programowanie liniowe

• Trzy warunki przy przejściu między wierzchołkami:– Muszą ze sobą sąsiadować– Oba muszą być dopuszczalne– Nowy punkt musi mieć lepszą wartość funkcji celu

• Dwa kroki procedury:1. Wyznacz zmienną niebazową, która najbardziej poprawi funkcję celu, jeśli

będzie miała niezerową wartość. Przesuń tą zmienną ze zbioru niebazowego do zbioru bazowego (zmienna bazowa wchodząca entering basic variable)

2. Podnieś wartość zmiennej bazowej wchodzącej do momentu, w którym jedna ze zmiennych bazowych osiągnie wartość zero. Przenieś tą zmienną do zbioru niebazowego (zmienna bazowa wychodząca leaving basic variable)

• x1 najbardziej poprawi funkcję celu• Ograniczenie x1 ≥ 0 przestaje być aktywne• Wiemy, w którym kierunku się poruszamy, bo

tylko x1 może wzrastać• Ograniczenie, które zostanie “przecięte” jako

pierwsze to x1 ≤ 2.

Page 21: Programowanie liniowe

Algebraicznie• W początku układu odniesienia sytuacja jest następująca:

– Zmienne bazowe: s1,s2,s3

– Zmienne niebazowe: x2

– Bazowa zmienna wchodząca: x1

• W nowym wierzchołku, który znajduje się na przecięciu krańcowych wartości ograniczeń x2 ≥ 0 i x1 ≤ 2 (punkt (2,0)), baza to:– Zmienne bazowe: x1,s2,s3

– Zmienne niebazowe: x2,s1

• Nastąpiła wymiana zmiennych x1 oraz s1

Page 22: Programowanie liniowe

Test minimalnego ułamka (minimum ratio test)• Aby znaleźć bazową zmienną wychodzącą musimy znaleźć najmniejszą

wartość następującego wyrażenia

• W naszym przykładzie mianownik był zawsze 1, ale ogólnie może być różny od 1

• Dwa szczególne przypadki:– Jeśli współczynnik bazowej zmiennej wchodzącej jest 0 (ograniczenie nie przecina

ciągle aktywnych ograniczeń reprezentowanych przez pozostałe zmienne niebazowe)– Jeśli współczynnik bazowej zmiennej wchodzącej jest ujemny (ograniczenie

coprawda przecina ciągle aktywne ograniczenia, ale kierunek wzrostu bazowej zmiennej wchodzącej jest w przeciwnym kierunku do punktu przecięcia)

Page 23: Programowanie liniowe

Znajdowanie nowego bazowego rozwiązania dopuszczalnego

• Znaleźliśmy nową bazę – co dalej?• Można podstawić wartość zero pod wszystkie zmienne niebazowe i

następnie metodą eliminacji Gaussa rozwiązać pozostały system m×m równań liniowych

• Bardziej efektywną metodą jest uaktualnienie obecnego zbioru równań przy wykorzystaniu tylko części eliminacji Gaussa

• Kiedy przerwać iterowanie?– Kiedy nie możemy znaleźć bazowej zmiennej wchodzącej.

Page 24: Programowanie liniowe

Metoda simplex

Page 25: Programowanie liniowe

Tabelka simplex• Oto tabelka simplex dla początkowego punktu

• Tabelka podana jest w formie właściwej (proper form)– Dokładnie jedna zmienna bazowa na równanie– Współczynnik zmiennej bazowej jest zawsze +1 a współczynniki nad i pod

zmienną bazową są 0– Z jest traktowana jak zmienna bazowa równania funkcji celu

• Zaletą formy właściwej jest to, że obecne rozwiązanie można bezpośrednio odczytać z tabelki

Page 26: Programowanie liniowe

2.1 Czy już jesteśmy w optimum?Nie, ponieważ mamy 2 ujemne współczynniki w rzędzie

pierwszym2.2 Wybieramy bazową zmienną wchodzącąNajbardziej ujemny współczynnik jest przy zmiennej x12.3 Wybieram bazową zmienną wychodzącąTest minimalnego ułamka:• Jeśli w kolumnie pivot (pivot column) jest zero bądź liczba

ujemna wpisz „no limit”• Najmniejsza wartość 2: to jest wiersz pivot (pivot raw)

Element pivot (Pivot element)

Page 27: Programowanie liniowe

2.4 Uaktualnij tabelkęa) W kolumnie zmienna bazowa, zastąp bazową zmienną

wychodzącą przez bazową zmienną wchodzącąb) Jeśli element pivot nie jest równy 1, podziel wszystkie

elementy wiersza pivot przez wartość elementu pivot (my nie musimy)

c) Eliminujemy wszystkie współczynniki w kolumnie pivot poza elementem pivot.

Page 28: Programowanie liniowe

Kontynuujemy• Nowe rozwiązanie (x1,x2,s1,s2,s3)=(2,0,0,3,2), Funkcja celu Z=30

2.1 Nie jesteśmy jeszcze w optymalnym punkcie2.2, 2.3 Nowa bazowa zmienna wchodząca i zmienna

wychodząca

2.4 Z powrotem do formy właściwej

Page 29: Programowanie liniowe

Przypadki specjalne• Remis przy wyborze bazowej zmiennej wchodzącej, np. Z = 15x1+15x2

• Remis przy wyborze bazowej zmiennej wychodzącej - Wybierz jaką chcesz – i tak wierzchołek będzie ten sam.– Zmienna, która nie zostanie wybrana na bazową zmienną wychodzącą pozostanie bazowa,

ale będzie miała wyliczoną wartość 0– Zmienna, która została wybrana będzie miała przyporządkowaną przez simplex wartość 0

Bazowe rozwiązanie dopuszczalne w takim przypadku nazywamy rozwiązaniem zdegenerowanym (degenerate solution) – może prowadzić do cykli (cycles) w więcej niż dwóch wymiarach (wierzchołki A,C – B,C – A,C)

Page 30: Programowanie liniowe

• Załóżmy, że test minimalnego ułamka daje wszędzie „no limit” – wówczas problem jest nieograniczony (unbounded) i ma nieograniczone rozwiązanie– Najczęściej znaczy, że zapomniałeś/aś ograniczenia

• W optimum współczynniki niektórych zmiennych niebazowych mają wartość zero w wierszu funkcji celu– Wybór tej zmiennej do bazy nie ma wpływu na wartość funkcji celu– Ale zmienia się bazowe rozwiązanie dopuszczalne– Taka sytuacja znaczy, że mamy wiele więcej niż jedno rozwiązanie

optymalne (multiple optimum solutions)