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