Rozwiązanie problemu plecakowego z użyciem AG

Transkrypt

Rozwiązanie problemu plecakowego z użyciem AG
Rozwiązanie problemu plecakowego z użyciem AG
1
Cel laboratorium
W ramach laboratorium należy napisać program rozwiązujący dyskretny problem plecakowy
(ang. 0/1 knapsack problem) z użyciem algorytmu genetycznego.
2
Dyskretny problem plecakowy
Dane wejściowe:
Dany jest ciąg n elementów S = {s1 , s2 , ..., sn } gdzie si to para atrybutów (wi , ci ). Atrybut wi
oznacza wagę (rozmiar) elementu, a ci jego wartość. Przez C oznaczamy pojemność plecaka.
Problem:
Znaleźć podzbiór S R ⊂ S taki, że suma wartości wszystkich elementów w podzbiorze S R
P
( j∈S R cj ) jest maksymalizowana, a suma wag elementów z podzbioru S R jest mniejsza lub
P
równa C co zapisujemy ( j∈S R wj ≤ C).
Interpretacja:
Problem plecakowy pojawia się w każdej sytuacji, gdzie mamy do czynienia z wyborem elementów z ograniczeniem budżetu. Należy wówczas odpowiedzieć na pytanie: jakie produkty
należy kupić, by nie przekroczyć wyznaczonego budżetu? Każdy przedmiot ma swój koszt
i wartość, zatem będziemy poszukiwać najbardziej wartościowego przedmiotu o najniższym
koszcie(wadze). Najczęściej problem plecakowy wyjaśnia się na przykładzie złodzieja, który
może wynieść w swoim plecaku tylko ograniczoną wagą ilość przedmiotów, a jednak chciałby
mieć z rabunku jak największy zysk.
Wariant dyskretny problemu:
Jest to takie zagadnienie plecakowe, gdzie do plecaka nie można wkładać ułamkowych części
elementów. Elementy mogą się w plecaku znaleźć (1) lub nie (0).
3
Algorytm genetyczny
Algorytm genetyczny (ang. genetic algorithm) działa według schematu:
1 Wygeneruj losowo populację początkową o liczności N
2 Oblicz funkcję przystosowania dla każdego osobnika
3 Powtarzaj tworzenie nowych generacji dopóki nie spełniony jest warunek zatrzymania:
1
3.1 Przeprowadź selekcję (wybór osobników do reprodukcji)
3.2 Utwórz nową populację o liczności N przez wykonanie krzyżowania i mutacji
3.3 Oceń nowe osobniki obliczając ich funkcję przystosowania
Zanim zastosuje się algorytm genetyczny do rozwiązania dowolnego problemu należy określić:
• Kodowanie rozwiązań w ciąg chromosomowy — należy rozważyć jak przedstawić potencjalne rozwiązanie rozpatrywanego problemu w postaci ciągu (liczb: np. binarnych,
naturalnych, rzeczywistych; znaków), tak by proces odwrotny (dekodowanie) tworzył
elementy z dozwolonej dziedziny.
• Funkcję przystosowania — która wycenia jakość danego rozwiązania. Im lepsze rozwiązanie prezentuje dany osobnik, tym większa jest jej wartość. Funkcja musi uwzględniać
wszystkie cele zadania.
• Operatory genetyczne — wybór typu krzyżowania i mutacji odpowiednio do wybranego kodowania chromosomów. Niekiedy zmiany (krzyżowanie, mutacja) w ciągach kodowych (chromosomach) mogą prowadzić do powstawiania rozwiązań spoza dziedziny
(dobrze jest się wówczas zastanowić, czy nie da się zmienić kodowania). Należy wówczas
dokonać modyfikacji operatorów genetycznych, bądź korekty ciągów chromosomowych,
by znajdowały się w obrębie dziedziny.
• Wybrać metody selekcji — dopasowanie metody selekcji w zależności od kodowania i
rozwiązywanego problemu.
• Określić warunki zatrzymania algorytmu — generowanie nowych populacji może być
zakończone po wykonaniu zadanej liczby iteracji lub po osiągnięciu np. zadanej wartości
funkcji przystosowania.
Pomocny link:
klasyka.htm.
4
http://aragorn.pb.bialystok.pl/~radev/ai/alggen/files/
Zadanie
Wariant podstawowy zadania obejmuje zaprojektowanie i zaimplementowanie algorytmu genetycznego zgodnie z punktami wymienionymi powyżej. Należy wybrać i zaimplementować
jedną dowolną metodę selekcji, krzyżowania i mutacji.
Proszę zapewnić, by dane wejściowe do algorytmu można podać jako dowolny ciąg par
{wi , ci }. Przykład testowy: {(100, 40), (50, 35), (45, 18), (20, 4), (10, 10), (5, 2)}, gdzie C =
100. Najlepsze rozwiązanie dla przykładu, to C = 100, gdzie zysk całkowity równy jest 55,
przy wybranym elemencie 2, 3, 6.
Wariant rozszerzony to taki, gdzie zaimplementowano różne operatory genetyczne i metody selekcji, tak by porównać ich efektywność. Dodatkowo można rozwinąć problem na
dyskretny problem wielu plecaków, gdzie zamiast jednego plecaka o pojemności C dane jest
m plecaków o pojemnościach {C1 , C2 , ..., Cm }.
2
5
Pytania na wejściówkę
1. Jak działa algorytm genetyczny?
2. Jakie może być kodowanie chromosomu? (binarne, rzeczywiste, całkowitoliczbowe)
3. Co to jest funkcja przystosowania?
4. Co to jest selekcja?
5. Jakie metody selekcji można stosować w AG?
6. Jakie znaczenie ma stosowanie elitaryzmu?
7. Po co w AG stosuje się krzyżowanie i jakie są typy krzyżowań?
8. Po co w AG stosuje się mutację i jakie są typy krzyżowań?
3