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