Transcript slajdy
Badania operacyjne Wykład 5 Rozwiązywanie zadań programowania całkowitoliczbowego: wyliczenie możliwości An Enumeration Tree Original problem x1 = 0 x2 = 0 x3 = 0 x3 = 1 x1 = 1 x3 = 0 x2 = 1 x2 = 0 x2 = 1 x3 = 1 x3 = 0 x3 = 1 x3 = 0 x3 = 1 17 We then consider two possibilities for x3. Either x3 = 0 or x3 = 1. We and make two branches off of nodes 4, 5, 6 and 7 of the tree. We then consider two possibilities for x4 and make branches. And we consider two possibilities for x5 and make branches. Finally, we consider two possibilities for x6 and make branches. Algorytm Branch and bound • Dany jest następujący problem optymalizacji całkowitoliczbowej: Rozwiązujemy problem w wersji ciągłej (z liczbami rzeczywistymi) Dzielimy na dwa podproblemy wykluczając rozwiązania niedopuszczalne Dwa podproblemy również rozwiązujemy w liczbach rzeczywistych Dzielimy na dwa podproblemy wykluczając rozwiązania niedopuszczalne Kolejno rozbijamy na problemy z coraz mniejszym zbiorem dopuszczalnym L3 ignorujemy, bo jest niedopuszczalne Kontynuujemy aż otrzymamy rozwiązanie całkowitoliczbowe • Możemy przerwać procedurę przy L5, jeśli chcemy być w 10% od minimum • Nawet, gdybyśmy nie znaleźli rozwiązania całkowitego w L2 za pierwszym razem, a dostalibyśmy rozwiązanie o funkcji celu nie większej niż 40 (dotychczasowe rozwiązanie z L6), moglibyśmy przerwać procedurę i wywnioskować, że rozwiązanie z L6 jest optymalne • Po analizie L6, wiemy, że optimum jest pomiędzy 40 a 41. Jeśli wystarczy nam 2.5% dokładności możemy przerwać. Jeśli nie, musimy sprawdzić L2. • L2 jednak okazuje się nie przynieść poprawy. Skojarzenia x Dawid Edward Filip colsums Helena kompatyblino ść Helena Dawid Edward Filip funkcja celu Gosia 1 0 0 1 Irena 0 1 0 1 Gosia 1 0.75 0.5 rowsums 0 0 1 1 1 1 1 Irena 0 2 2.5 0.5 1 1.5 4.5 http://mathsite.math.berkeley.edu/smp/smp.html Wprowadzenie do grafów: Mosty w Koenigsbergu Leonard Euler zastanawiał się, czy można przejść przez każdy most tylko raz (1736) Konceptualizacja - węzły Konceptualizacja - krawędzie Czy istnieje spacer po wszystkich mostach, tak aby żaden się nie powtórzył? Gdyby tak zbudować dwa dodatkowe mosty. Każdy taki spacer musi wejść i wyjść z każdego wierzchołka dokładnie raz. Czyli stopień każdego wierzchołka musi być parzysty. Cykl Eulera Cykl Hamiltona Problem komiwojażera Problem komiwojażera – objazd cykl Czas trwania: 2d7h2m Długość trasy: 3615 km Problem komiwojażera – objazd ścieżka Czas trwania: 2 d 4 h 37 m Długość trasy: 3436 km Problem komiwojażera – prawdziwy spacer Czas trwania: 29 d 11 h 21 m Długość trasy: 3485 km Problem komiwojażera (travelling salesman problem TSP) • Problem można zapisać matematycznie jako • Zmienna decyzyjna xij równa się 1, gdy komiwojażer przejeżdża z miasta i do miasta j, 0 w przeciwnym przypadku • Możliwość przejazdu z danego miasta do tego samego miasta jest zabroniona Problem komiwojażera • Koszt przejazdu z miasta do miasta to dij • Funkcja celu to łączny koszt przejazdu trasy • Pierwsze ograniczenie oznacza, że komiwojażer musi opuścić każde miasto dokładnie raz • Drugie ograniczenie oznacza, że komiwojażer musi wjechać do każdego miasta dokładnie raz • Czy to już wszystko? • Załóżmy, że w problemie z 5 miastami rozwiązanie optymalne to x12=x23=x31=x45=x54=1 • To rozwiązanie spełnia powyższe ograniczenia i może być optymalne. Jednak zawiera podtrasy (subtours) – rozłączne pętle o rozmiarze mniejszym niż wszystkie miasta • Trzeba wprowadzić dodatkowe ograniczenia Eliminacja podtras • Pętle dla dwóch miast • Pętle dla trzech miast • Pętle dla czterech miast • Itd. • Jednak w praktycznej implementacji takich ograniczeń byłoby stanowczo za dużo – w problemie z 30 miastami byłoby 870 ograniczeń likwidujących tylko pętle dla dwóch miast Eliminacja podtras – drugie podejście • Wprowadzamy dodatkowe nieujemne zmienne ciągłe ui: • Podtrasy są wyeliminowane • Ile jest takich ograniczeń? • (N-1)2-N, czyli w problemie z 30 miastami wszystkich ograniczeń byłoby 812, a wcześniej tylko ograniczeń dla pętl o długości dwa było 870. Gra • http://www.tsp.gatech.edu/games/index.html