Rówoległe algorytmy genetyczne w zastosowaniu do problemu kolor
Transkrypt
Rówoległe algorytmy genetyczne w zastosowaniu do problemu kolor
POLITECHNIKA KRAKOWSKA - WIEiK - KATEDRA AUTOMATYKI Badania Operacyjne www.pk.edu.pl/~zk/BO_HP.html Wykładowca: dr inż. Zbigniew Kokosiński [email protected] Wykład 4 : Programowanie dynamiczne 1. Wprowadzenie. 2. Idea programowania dynamicznego. 3. Wyznaczanie wartości ciągów metodą programowania dynamicznego: liczby Fibonacciego. 4. Inne algorytmy programowania dynamicznego: dyskretny problem plecakowy. 5. Wymagania czasowe i pamięciowe algorytmów programowania dynamicznego. Pojęcie programowania dynamicznego Programowanie dynamiczne jest to metoda rozwiązywania problemów optymalizacyjnych dekomponowalnych rekurencyjnie na podproblemy, obejmująca cztery podstawowe kroki: 1. scharakteryzowanie struktury rozwiązania optymalnego 2. rekurencyjne określenie kosztu rozwiązania optymalnego 3. obliczenie kosztu optymalnego metodą wstępującą (bottom-up) 4. opracowanie rozwiązania optymalnego na postawie wyników wcześniejszych obliczeń Uwaga: w odróżnieniu od metody „dziel i zwycieżaj” podproblemy nie są na ogół rozłączne a liczba różnych podproblemów jest wielomianowa. Twórcą metody programowania dynamicznego jest Richard Bellman. Własność optymalnej podstruktury Własność optymalnej podstruktury – jest własnością problemów, które można rozwiązywać za pomocą algorytmów. Mówi się, że dany problem ma własność optymalnej podstruktury, jeżeli jego optymalne rozwiązania jest funkcją optymalnych rozwiązań podproblemów. Jeżeli problem wykazuje własność optymalnej podstruktury, to zazwyczaj można znaleźć rozwiązujący go algorytm dynamiczny, a czasem zachłanny. Ciągi liczbowe: liczby Fibonacciego Liczby Fibonacciego można obliczyć ze wzorów: F(1)=1 , F(2)=1, F(n)=F(n-1)+F(n-2), dla n>2. Program iteracyjny – f(n) obliczamy w tablicy w czasie O(n) wraz z wszystkimi wartościami f(i), dla 1<=i<=n-1 : f[1]=1; f[2]:=1; for (i=3; i<=n; i++) { f[i] = f[i-1]+f[i-2]; } Problem plecakowy – dyskretny i ciągły Dane są rozmiary i wartości elementów oraz pojemność plecaka. Wyznacz optymalne upakowanie plecaka, tak aby miał maksymalną wartość przy nieprzekroczonej pojemności. Warianty problemu: dyskretny (0-1), dyskretny z wieloma egzemplarzami przedmiotów, ciągły (przedmioty są podzielne, a wartość części pozostaje w stałej proporcji do całości przedmiotu) Przykład: Dyskretny problem plecakowy (przedmioty dostępne w wielu egzemplarzach) Dyskretny problem plecakowy (przedmioty dostępne w wielu egzemplarzach) Zalety programowania dynamicznego 1. Problemy o strukturze rekurencyjnej podproblemów są tą metodą przetwarzane w czasie wielomianowym – eliminacja wielokrotnego rozwiązywania tych samych podproblemów. 2. Rozwiązywane są wszystkie różne podproblemy danego problemu a wyniki przechowywane w tablicy o rozmiarze wielomianowym (najczęściej O(n^2) lub O(nm). 3. Po rozwiązaniu wszystkich podproblemów i zbudowaniu tablicy z ich rozwiązaniami czas rozwiązywania problemu jest zwykle liniowy, np. O(n). 4. Istnieje możliwość wyznaczenia dokładnego rozwiązania problemu optymalizacyjnego, który czasami nie posiada algorytmu wielomianowego (np. problem plecakowy). Wady programowania dynamicznego 1. Istnieje potrzeba rekurencyjnego sformułowania problemu. 2. Należy dowieść własności optymalnej podstruktury. 3. Wymagana jest pamięć o wymiarach zależnych od danych wejściowych (np. rozmiaru problemu). 4. Istnieją ograniczenia zastosowań algorytmów programowania dynamicznego związane z wielkością liczb występujących w przetwarzanych problemach. Źródła wzorów, przykładów i rysunków : 1. Cormen T.H., Leiserson C.E., Rievest R.L. : Wprowadzenie do algorytmów, WNT 1999 2. Sedgewick R. : Algorithms in C, Addison-Wesley 1990