DMBO Sieci Wprowadzenie do grafw Mosty w Koenigsbergu
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: 2 d 7 h 2 m 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 x 12=x 23=x 31=x 45=x 54=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 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 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 Animations 2007/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/POAnimation s 2007/Min. Span. Tree. 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/POAnimations 2007/Max. Flow. 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
- Slides: 57