Wrocław 18.06.2006

Metody sztucznej inteligencji - Projekt

Jarosław Barcewicz [127486]

Łukasz Raciborski [128247]

Temat: Aproksymacja wzoru funkcji na podstawie punktów na płaszczyźnie XY.

1. Opis problemu

Przedmiotem projektu było stworzenie programu, który ma za zadanie wyznaczenie przybliżonego wzoru funkcji, przechodzącej przez punkty podane przez użytkownika. Przybliżonego, czyli takiego, który byłby suboptymalnym wynikiem działania algorytmów genetycznych i ewolucyjnych zawartych w powyższym programie.



2. Opis projektu

Program, który został stworzony na potrzeby projektu, posiada wiele funkcji opisanych poniżej, które w przejrzysty dla użytkownika sposób, pozwalają mu się zapoznać z metodami ewolucyjnymi i w ciekawy sposób zaprezentować działanie programu. W projekcie wykorzystano metody genetyczne i ewolucyjne, program podczas działania po pewnej ilości iteracji, znajduje rozwiązanie problemu. Oczywistym jest, że rozwiązanie rzadko jest optymalne, co jest spowodowane metodą użytą w projekcie.

Na Rysunku 1. pokazano interfejs użytkownika. Głównym elementem interfejsu, jak i wizualizacji działania programu jest pole płaszczyzny, na której wizualizowany jest wykres funkcji o najlepszej wartości funkcji celu, jak i punkty, postawione przez użytkownika, i linie je łączące.

Aby program był w pełni konfigurowalny i efektywny, przed uruchomieniem należy ustawić parametry programu. W większości parametry te odpowiadają za sposób działania algorytmów genetycznych, ale są też elementy odpowiadające za prędkość i wizualizację działania programu.

Program został napisany oraz skompilowany w środowisku Borland C++ Builder 6.0.

W celu uruchomienia programu należy podać jakieś punkty klikając na wykresie, bądź wstawiając odpowiednie koordynaty i naciskając przycisk „dodaj punkt do wykresu”. Następnie należy wygenerować populację („generuj nową populację”) i po ustawieniu pozostałych parametrów, których opis znajduje się poniżej nacisnąć przycisk „start”.

0
Rysunek 1. Interfejs programu



Parametry



Wykorzystane metody ewolucyjne i genetyczne.

Głównym założeniem projektu było wykorzystanie metod ewolucyjnych i genetycznych, takich jak krzyżowanie, mutacja i ukierunkowany dobór osobników przy pomocy funkcji celu. Funkcja celu jest jednym z najważniejszych kryteriów poprawnego działania programu. W naszym projekcie jej obliczenie jest dość proste, wyliczana jest odległość między wartością składowej Y punktu, a wartością funkcji w punkcie badanym. Wartości te są sumowane i powstaje wartość oceny, czyli wartość funkcji celu. Im ta wartość jest odleglejsza od 0, tym funkcja jest potencjalnie gorsza. Wyniki wraz z osobnikami są sortowane od najlepszych.

Cztery najlepsze osobniki są krzyżowane z przypadkowymi czterema osobnikami populacji (także ze sobą), a wynikowe jednostki są nakładane na cztery najgorsze osobniki populacji. Dodatkowo dwa najlepsze są obowiązkowo mutowane i kopiowane za osobniki 5 i 6 od końca. Stąd minimalna populacja musi wynosić 10 jednostek.

Mutacje (jak zostało wcześniej wspomniane) mogą być całościowe, w skali chromosomu, lub tylko zmieniać elementy równania znajdujące się w chromosomie. Równania generowane są z nastepujących funkcji:

Krzyżowanie polega na wymianie składowych chromosomów osobników w sposób częściowo ukierunkowany. Dwa osobniki najlepsze, zawsze pozostają niezmienione.



3.Przykładowe symulacje

Poniżej znajdują się wyniki przykładowych symulacji. Pierwszym elementem rysunku jest wykres funkcji i punkty zaznaczone przez użytkownika. Poniżej znajduje się wzór najlepszej z ocenianych funkcji i po jej prawej stronie wartość oceny przez funkcje celu. Dla pierwszego przykładu (Rysunek 2) pokazane jest także okno 10 najlepszych osobników.

0


Najlepsza funkcja: 11*cos(X)+6/X+cos(X)+15+X

Wartość funkcji celu: 46



0
Rysunek 2. Wynik przykładowej symulacji po 620 iteracjach.



0
Rysunek 3. Wynik przykładowej symulacji po 785 iteracjach.

Najlepsza funkcja: 20^ln(sin(X-X^3))+(16)+ln(cos(ln(X)))

Wartość funkcji celu: 76



0
Rysunek 4. Wynik przykładowej symulacji po 198 iteracjach.

Najlepsza funkcja: 33^sin(X)+34/X+ln(71)+ln(X)

Wartość funkcji celu: 28



0
Rysunek 5. Wynik przykładowej symulacji po 1740 iteracjach.

Najlepsza funkcja: X*(sin(X))+(cos(ln(X)))*ln(cos(X))+4^2+sin(cos((X)))+(X)-X/X

Wartość funkcji celu: 11



0
Rysunek 6. Wynik przykładowej symulacji po 5351 iteracjach.

Najlepsza funkcja: 8*ln(X)+X^sin(X/(X/ln(X)))+8*ln(X)+9-X+ln(ln((X)))

Wartość funkcji celu: 27



0
Rysunek 7. Wynik przykładowej symulacji po 548 iteracjach.

Najlepsza funkcja: ln((cos(X^3)))+ln((cos(X^3)))+ln(((X^5)))+(cos(X))+46-(32/X)

Wartość funkcji celu: 3



4. Wnioski

Jak widać z rysunków 2, 3, 4, 5 program jest daleki od znalezienia dokładnego przybliżenia wzoru funkcji przechodzącej przez wszystkie punkty podane przez użytkownika. Na rysunkach 6 i 7 widać że program poradził sobie dość dobrze (szczególnie w przypadku rys. 7.), co spowodowane jest po części faktem, że funkcje brane pod uwagę w przypadkach z rysunków 6, 7, jak widać, miały całkiem inny charakter. W powyższych sesjach, użyto parametrów podanych w ich opisie, jako dobre lub dające duże prawdopodobieństwo „wyskoczenia” z obszaru lokalnego optimum. Dobór metod ewolucyjnych i genetycznych był intuicyjny, gdyż brak jest materiałów opisujących właśnie ten konkretny problem, który staraliśmy się rozwiązać. Warto zauważyć, że funkcja oceny powinna obejmować jak najwięcej kryteriów, takich jak ilość harmonicznych funkcji pomiędzy kolejnymi punktami użytkownika, a także oceniać szybkość wzrostu odległości funkcji od współrzędnych funkcji osobników. Możliwości jest wiele, uważamy, że problem jest skomplikowany, lecz zarazem ciekawy, a jego rozwiązanie byłoby bardzo użyteczne, choćby do opisu sygnałów pobranych z natury (sygnały dźwiękowe, histogramy obrazów, kompresja obrazów) wzorami funkcji. Istnieją metody wielomianowe, są one jednak bardzo skomplikowane i dają duże przeregulowania. Nasze wynikowe funkcje ocenione przez program jako dobre (z małą wartością funkcji celu) przebiegają w pobliżu punktów i tym samym nie generowałyby większych błędów, np. przy odwróceniu operacji, czyli wygenerowaniu z nich punktów i zastosowaniu ich do jakichś badań/czynności.



5. Bibliografia

Książki:

Zbigniew Michalewicz, Algorytmy genetyczne + struktury danych = programy ewolucyjne, WNT Wydawnictwo Naukowo – Techniczne, Warszawa 2003.

Danuta Rutkowska, Maciej Piliński, Leszek Rutkowski, Sieci neuronowe, algorytmy genetyczne i systemy rozmyte, Wydawnictwo Naukowe PWN, Warszawa 1999.

Leszek Rutkowski, Metody i techniki sztucznej inteligencji, Wydawnictwo Naukowe PWN, Warszawa 2005.

Internet:

http://knf.p.lodz.pl/~student/ - strona autora parsera wykorzystanego w tym projekcie