Transcript slajdy 6

DMBO
Sieci
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
Wprowadzenie do sieci
• Dwa główne elementy:
– Łuki (krawędzie) [arcs/edges]
– Wierzchołki [nodes]
• Graf [graph] to struktura, którą buduje się poprzez łączenie wierzchołków
łukami
• Graf skierowany [directed graph] (digraf [digraph]) jest grafem, w którym
łuki mają określony kierunek
• Sieć [network] to graf (lub digraf), w którym łuki mają przyporządkowany
przepływ [flow]
• Oto parę prostych przykładów sieci:
Wierzchołki
Łuki
Przepływ
Miasta
Autostrady
Samochody
Centra
teleinformatyczne
Przewody
Przekazywane
pakiety
Łączenia
rurociągów
Rury
Woda
Wprowadzenie do sieci
• Łańcuch [chain] to ciąg łuków łączących dwa wierzchołki i i j, np. ABCE,
ADCE
• Ścieżka [path] to ciąg skierowanych łuków łączących dwa wierzchołki,
np. ABDE, ale nie ABCE
• Cykl [cycle] to łańcuch który łączy wierzchołek z samym sobą bez
żadnego powtarzania [retracing], np. ABCEDA, ale nie ABCDECBA
• Graf/sieć spójny/a [connected graph/network] ma tylko jedną część
graf
graf skierowany
Wprowadzenie do sieci
• Drzewo [tree] – graf spójny nie mający cyklów.
• Drzewo rozpinające [spanning tree] to drzewo wybrane spośród
łuków w grafie lub w sieci tak, aby wszystkie wierzchołki w drzewie
były połączone
dwa drzewa
dwa drzewa rozpinające
• Zdolność przepływowa [flow capacity] – górna (czasem też dolna) granica
ilości przepływu danego łuku w sieci, np. maksymalna ilość wody w
rurociągu
• Źródło [source] to wierzchołek który wprowadza przeływ do sieci
• Zlew [sink] to wierzchołek, który wyprowadza przepływ z sieci
Problem najkrótszej trasy [The shortest
route problem]
• Sformułowanie: Dla danego grafu, w którym każdy łuk
oznaczony jest poprzez dystans pomiędzy wierzchołkami, które on
łączy, jaka jest najkrótsza trasa pomiędzy wierzchołkiem i i innym
wierzchołkiem j.
• Na przykład: Jaka jest najkrótsza trasa pomiędzy A i H?
Wyliczenie wszystkich możliwości [enumeration] – niepraktyczne
Algorytm Dijkstra
Algorytm Dijkstra
http://optlabserver.sce.carleton.ca/PO
Animations2007/Dijkstras
Algo.html
Problem najmniejszego drzewa
rozpinającego [minimum spanning tree]
• Sformułowanie: Dla danego grafu, w którym łuki są oznaczone
poprzez odległości pomiędzy wierzchołkami, które łączą, znajdź
drzewo rozpinające, które ma najmniejszą łączną długość
• Na przykład: Znajdź minimalną długość kabla, aby połączyć wszystkie
biura w budynku mając dane wszystkie dopuszczalne trasy kabli
• Algorytm:
http://optlabserver.sce.carleton.ca/POAnimations
2007/MinSpanTree.html
Przykład zachłannego algorytmu [greedy algorithm] – robi co jest najlepsze w danym kroku nie patrząc na
resztę problemu (zazwyczaj nieefektywne – tutaj TAK!)
Można też robić maksymalne drzewo rozpinające w ten sam sposób
Maksymalny przepływ i minimalne cięcie
[maximum flow and the minimum cut]
• Sformułowanie: Jaki jest maksymalny przepływ pomiędzy danym
wierzchołkiem a jakimś innym wierzchołkiem w sieci?
• Na przykład: Znajdź maksymalny przepływ samochodów z parkingu
podziemnego w centrum miasta do wyjazdu na autostradę?
• Każdemy łukowi przyporządkowujemy maksymalny możliwy jednoczesny
przepływ pomiędzy dwoma wierzchołkami, które ten łuk łączy.
– Przepływ może się różnic w zależności od kierunku (np. jednokierunkowe ulice)
4 samochody na minutę na trasie AD-E-G
3 samochody na minutę na trasie AB-E-G
{jednoczesny przepływ na łuku E-G
wynosi teraz 7}
4 samochody na minutę na trasie AC-F-G
Przepływ łączny 11 samochodów na
minutę z A do G
Maksymalny przepływ i minimalne cięcie
[maximum flow and the minimum cut]
• Algorytm: Ford and Fulkerson (Canadian Journal of
Mathematics 1956)
http://optlabserver.sce.carleton.ca/POAnimations2007/MaxFlow.html
Maksymalny przepływ i minimalne cięcie
[maximum flow and the minimum cut]
• Dlaczego potrzeba dodawać przepływy w odwrotnym kierunku?
– Konwencja rachunków, aby zaznaczyć przepływ, który, jeśli trzeba,
można cofnąć.
Maksymalny przepływ i minimalne cięcie
[maximum flow and the minimum cut]
• Maksymalny przepływ jest związany z minimalnym cięciem:
– Cięcie [cut] to każdy zbiór skierowanych łuków zawierający przynajmniej
jeden łuk w każdej ścieżce ze źródła do zlewu (przeznaczenia). Jeśli
usuniemy łuki z danego cięcia, to przepływ jest zupełnie odcięty.
– Wartość cięcia [cut value] to suma wszystkich zdolności przepływowych
w kierunku od źródła do przeznaczenia dla wszystkich łuków w cięciu.
• Możliwe cięcia z zaznaczonymi wartościami tych cięć
Twierdzenie Max-flow/min-cut
• Twierdzenie: Dla każdej sieci z jednym
źródłem i jednym zlewem, maksymalny
możliwy przepływ ze źródła do
przeznaczenia równa się minimalnej
wartości cięcia dla wszystkich cięć w tej
sieci.
• Intuicja:
– Maksymalny przepływ przez serię rur, równy
jest ograniczony przez wąskie gardło.
– Minimalne cięcie to rodzaj rozłożonego
wąskiego gardła, czyli wąskiego gardła dla
całej sieci w przeciwieństwie do wąskiego
gardła dla serii rur.
• Czyli do znalezienia minimalnego cięcia
można posłużyć się również algorytmem
Forda-Fulkersona.
– Jak już zakończy działanie algorytm, zaznacz
łuki, które ciągną przepływ równy ich
maksymalnej możliwości przepływu. Wtedy
poszukaj cięcia, które składa się tylko z
zaznaczonych łuków i żadnych innych.
Maksymalny przepływ i minimalne cięcie
[maximum flow and the minimum cut]
• Minimalne cięcie z wartością w kierunku do przodu równą 14.
• 4 drogi B-E, D-E, F-E oraz F-G to wąskie gardło sieci i powinno się je
poszerzyć w pierwszej kolejności
– Ale możesz nie dostać 1 jednostki powiększenia przepływu na każdą
jednostkę dodanej zdolności przepływowej w łuku z minimalnego cięcia.
– Tak się dzieje, ponieważ zwiększony przepływ przez ten łuk może aktywować
nowe wąskie gardło w górze bądź w dole rzeki licząc od tego łuku.
• Zdolności przepływu mogą oznaczać koszty. Wówczas minimalne cięcie
oznacza minimalny koszt zablokowania przepływu w całej rzece.
Programowanie przepływów sieciowych [Network flow
programming]
• Formułowanie i rozwiązywanie problemów sieciowych
poprzez programowanie liniowe nazywamy
programowaniem przepływów sieciowych.
• Każdy problem przepływów sieciowych może być
przedstawiony jako program przepływów sieciowych
minimalnego kosztu [Minimum-cost network flow
program]:
• Zmienne: nieznane przepływy przyporządkowane łukom
• Zachowanie przepływu w wierzchołkach:
• Źródło [source]
lub zlew [sink]
:
Programowanie przepływów sieciowych [Network flow
programming]
• Ograniczenia przepływów na łukach: mogą być dolne (np. minimalny
wskaźnik produkcji w fabryce) {bazowa wartość 0} bądź górne (np.
maksymalny przepływ przez rurę) {bazowa wartość +∞}
– przepływy nie powinny być ujemne (traci się przejrzystość przedstawienia sieci)
• Koszt jednostki przepływu {wartość bazowa 0}:
przychód)
• Funkcja celu:
• Są trzy parametry dla każdego łuku: [l, u, c]
– Ograniczenie dolne l
– Ograniczenie górne u
– Koszt jednostki przepływu c
(jeśli ujemny to jest to
Diagram a program liniowy
Relacja 1:1
Od teraz odpowiednio oznaczony diagram
uważać będziemy za równoważny
sformułowaniu programu liniowego.
Właściwości
• Współczynniki przy zmiennych występujących po lewej stronie ograniczeń
przyjmują wartości -1,0 lub 1
• Wszystkie operacje pivot w algorytmie simplex składają się li tylko z
dodawania i odejmowania (nie ma potrzeby mnożenia)
• Jeszcze lepiej: operacje dodawania i odejmowania mogą być zastąpione
poprzez operacje logiczne w sieciowym algorytmie sympleks [Network
simplex algorithm]
• Jeśli po prawej stronie wszystkich ograniczeń są liczby całkowite i wszystkie
operacje pivot są operacjami dodawania i odejmowania, to zmienne
decyzyjne w optymalnym rozwiązaniu też będą całkowite – właściwość
unimodularności [unimodularity property]
– Bardzo użyteczne w rozwiązywaniu wielu zadań programowania całkowitoliczbowego,
np. zadań przyporządkowania [assignment problem]
Problem transportowy
• Prosty, ale bardzo przydatny w praktyce
• Składa się ze zbioru źródeł produktów (np. fabryki), które są bezpośrednio
połączone z punktami przeznaczenia (np. rynki w różnych miastach).
Każdemu połączeniu przyporządkowany jest koszt na jednostkę przepływu
– Podaż nie większa niż zdolność danej fabryki
– Popyt dokładnie równy dostarczonym produktom
– Każdy łuk ma bazowe dolne i górne ograniczenie i koszt (w nawiasie)
Problem przyporządkowania [assignment problem]
• Pojawia się również jako problem programowania całkowitoliczbowego.
• Przyporządkowanie zbioru ludzi do zbioru zadań tak, aby zminimalizować
łączny czas wykonania zadań.
– Każda osoba potrzebuje pewną ilość czasu na wykonanie danego zadania albo nie jest w
stanie w ogóle tego zadania wykonać.
– Każda osoba może być przyporządkowana do dokładnie jednego zadania.
Problem przyporządkowania [assignment problem]
•
Problem przyporządkowania może być sformułowany w postaci sieci transportowej:
–
–
–
•
Każda osoba to wierzchołek źródłowy, który wprowadza dokładnie jedną jednostkę przepływu do sieci (jeśli
jest więcej osób niż zadań: nie więcej niż jedną jednostkę)
Każde zadanie to wierzchołek przeznaczenia, który usuwa z sieci dokładnie jedną jednostkę przepływu
Koszt przepływu na każdym łuku to ilość minut danej osoby/dane zadanie
Optymalne przepływy w łukach będą równe dokładnie 0 lub dokładnie 1
–
–
Z powodu własności unimodularności będą liczbami całkowitymi
Ponieważ źródła i punkty przeznaczenia mają przypływy i odpływy równe dokładnie 1
Problem transportowy z przeładunkami [transshipment
problem]
• Tak jak problem transportowy, ale dodatkowo:
– są wierzchołki, które zachowują przepływ [flow conserving nodes] – punkty przeładunku
– wierzchołki źródłowe i przeznaczenia mogą również służyć za punkty przeładunku
– B jest jednocześnie źródłem i punktem przeładunku
– G jest jednocześnie punktem przeznaczenia i punktem przeładunku
– D i E są tylko punktami przeładunku
Problem najkrótszej trasy [shortest route problem]
• Zamiast algorytmu Dijkstra można rozwiązać programowaniem sieciowym
• Postępowanie jest następujące:
– Stwórz diagram sieciowy
– Zapisz etykiety łuków: ograniczenie dolne 0, ograniczenie górne +∞, koszt = długość
łuku, np. [0, ∞,12]
– Punkt początkowy jest wierzchołkiem źródłowym z dokładnie jedną jednostką
przepływu bez kosztu za jednostkę przepływu, zatem [1,1,0]
– Punkt końcowy jest wierzchołkiem przeznaczenia z dokładnie jedną jednostką
przepływu bez kosztu za jednostkę przepływu, a więc [1,1,0]
• Łuki z dodatnim przepływem będą na najkrótszej trasie.
• Dzięki własności unimodularności przepływ na łuku będzie 0 albo 1.
Problem drzewa najkrótszej trasy [shortest route tree
problem]
•
•
•
•
Tak samo jak problem najkrótszej trasy tylko, że wierzchołków przeznaczenia
może być wiele (jeśli nie wszystkie)
Problem to znalezienie najkrótszej trasy z punktu początkowego do każdego
punktu końcowego
Można rozwiązać wiele problemów najkrótszej trasy zmieniając punkt końcowy,
ale prostszy sposób to rozwiązać to za pomocą jednego problemu.
Załóżmy, że jest n wierzchołków przeznaczenia. Postępowanie:
– Stwórz diagram sieciowy
– Zapisz etykiety łuków: ograniczenie dolne 0, ograniczenie górne +∞, koszt = długość łuku, np. [0,
∞,12]
– Punkt początkowy jest wierzchołkiem źródłowym z dokładnie n jednostkami przepływu bez
kosztu za jednostkę przepływu, zatem [n,n,0]
– Punkt końcowy jest wierzchołkiem przeznaczenia z dokładnie jedną jednostką przepływu bez
kosztu za jednostkę przepływu, a więc [1,1,0]
•
W optimum tylko całkowite przepływy (unimodularność). Należy zaznaczyć
wszystkie łuki, które mają dodatni przepływ. Najkrótszą trasę znajdujemy od
tyłu. Począwszy od danego wierzchołka końcowego poruszamy się
zaznaczonymi łukami w kierunku wierzchołka początkowego.
Maksymalny przepływ / Minimalne cięcie [Max flow /
Min cut problem]
• Zamiast algorytmu Forda-Fulkersona możemy zastosować programowanie
sieciowe – problem przepływu sieciowego o minimalnym koszcie.
• Postępowanie jest następujące:
– Stwórz diagram sieciowy
– Stwórz etykiety dla każdego łuku: dolne ograniczenie 0, górne ograniczenie równe
maksymalnemu przepływowi dla tego łuku i koszt przepływu 0, np. [0,25,0]
– Stwórz wierzchołek początkowy z bardzo wysokim górnym ograniczeniem bez kosztu za
przepływ, a więc [0,M,0], gdzie M jest bardzo dużą liczbą
– Niech każdy wierzchołek końcowy będzie potencjalnym odpływem [sink node] z bardzo
wysoką zdolnością przepływową i z kosztem na jednostkę przepływu równym -1, a więc
[0,M,-1], gdzie M jest bardzo dużą liczbą
• W optimum: rozważmy wierzchołek przeznaczenia. Ma on koszt na
jednostkę -1. Funkcja celu to minimalizacja kosztu, zatem program będzie
chciał przepuścić jak najwięcej przez ten wierzchołek. W wierzchołku
źródłowym będzie również chciał przepuścić jak najwięcej. Ograniczeniem
będzie przepustowość sieci (czyli jej poszczególnych łuków)
Maksymalny przepływ / Minimalne cięcie [Max flow /
Min cut problem]
• Rozwiązanie problemu przepływu o najniższym koszcie dostarczy
następujących informacji:
– Odpływ z sieci w wierzchołku przeznaczenia równa się maksymalnemu przepływowi sieci
– Przepływy w poszczególnych łukach tworzą schemat przepływów w maksymalnym
przepływie sieci
• Minimalne cięcie znajdujemy tak samo, jak po skończeniu algorytmu
Forda-Fulkersona: Zaznacz łuki, które wykorzystują całą swoją zdolność
przepływu. Znajdź cięcie wykorzystujące wyłącznie zaznaczone łuki.
• Jaka jest dobra wartość M?
– Nie za mała – musi być na pewno większa niż maksymalny przepływ, którego szukamy
– Nie za duża – żeby uniknąć problemów numerycznych
– Dobra propozycja – wartość przypadkowego cięcia w sieci, ponieważ wiemy z
twierdzenia max flow/min cut, że wartość cięcia będzie nie mniejsza niż wartość
maksymalnego przepływu w sieci
Sieci uogólnione [generalized networks], sieci z
ograniczeniami pomocniczymi [network with side constraints]
oraz sieci procesowe [processing networks]
•
W sieci uogólnionej, łuki mają współczynniki przyrostu [gain factors]: czyli
liczby, które wymnaża się przepływ wchodzący do danego łuku, aby uzyskać
przepływ wychodzący z łuku
– Np. współczynnik przyrostu (a raczej obniżenia) 0,9 może oznaczać nieszczelny rurociąg
– Np. współczynnik przyrostu 1,1 może oznaczać wzrost wartości obiektu w sieci transportowej z
wartością obiektu jako przepływami
•
Sieci z ograniczeniami pomocniczymi – może zajść potrzeba dodania
dodatkowego ograniczenia, które nie jest sieciowe (współczynniki przy
zmiennych -1, 0 i 1), np.
– Specjalistyczne algorytmy dla sieci z ograniczeniami pomocniczymi (część sieciowa
rozwiązywana za pomocą szybkiego algorytmu sieciowego a reszta normalnie i potem te
rozwiązania są łączone)
•
Sieci procesowe – bardzo przydatne do modelowania systemów inżynierskich
bądź firm, takie sieci mają dodatkowo wierzchołki procesujące [processing
nodes], w których przepływy w sąsiadujących łukach muszą występować w
ściśle określonych proporcjach względem siebie
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
• Cel: minimalizacja całkowitego kosztu transportu
• Decyzja: jak dużo przewieźć z fabryki A do rynku zbytu
B
• Subskrypty:
– i: fabryki
– j: rynki zbytu
• Dane:
– Podaż towaru w fabryce i (w skrzyniach):
– Popyt na towar na rynku j (w skrzyniach):
– Koszt na przewozu jednej skrzyni z fabryki i do rynku j:
• Zmienne decyzyjne – liczba skrzyń przewożonych
pomiędzy i a j
• Ograniczenia
– Ograniczona podaż:
– Trzeba zaspokoić popyt:
1) Echo Print
1) Echo
Print cd.
2) Error Messages
normalnie są tutaj i
tutaj się kończy
wtedy
3) Equation
Listing
3) Equation
Listing cd.
4) Model
Statistics
5) Status
Report:
Solver i Model
Status
6) Solution
Reports
6) Solution
Reports cd.
7) Report summary
8) Execution
i Display
Sets
Deklaracja
i przypisanie
Data:
Parameters
Tables
Scalars
Variables:
Deklaracja i
przypisanie typu
Equations:
Deklaracja i
definicja
Komendy Model i Solve
Opcjonalnie Display
• Deklaracja – stwierdzenie istnienia czegoś i
nadanie temu czemuś nazwy
• Przypisanie/definicja – nadanie czemuś
konkretnej wartości lub formy