Na tej stronie udostępniamy programistom wtyczkę do Eclipse, pozwalającą na wyewoluowanie (czyli na uzyskanie w sposób automatyczny) prostych funkcji posiadających pożądane właściwości (przechodzących przez zadane punkty). Źródła projektu znajdują się w serwisie GitHub.
Ten program jest licencjonowany na warunkach Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 3.0 Unported License.
Instalacja
Są dwie metody instalacji pluginu Function Generator:
- Automatyczna (zalecana)
- Ręczna
Automatyczna
Zalecanym sposobem instalacji jest posłużenie się Update Site projektu.
Wklej podany link jako nową stronę w okienku Help/Install New Software, powienieś zobaczyć obrazek taki jak poniżej:
Ręczna
Wykonaj następujące kroki:
- Zainstaluj Eclipse, jeśli jeszcze tego nie zrobiłeś (Plug-in był
testowany w Eclipse 3.6 i 3.7).
- Przekopiuj plik FunctionGenerator_x.x.x.jar do folderu plugins w
katalogu instalacji Eclipse'a (x.x.x w nazwie pliku oznacza numer wersji
plug-inu).
- Uruchom Eclipse.
Pliki do ręcznej instalacji (starsza wersja) znajdziesz tutaj:
FunctionGenerator_1.0.1.jar
(~4.2MB)
FunctionGenerator_src_1.0.1.7z (~2.6MB)
Sposób użycia
Aby uruchomić plug-in kliknij na ikonkę FG na pasku narzędzi lub wybierz z
głównego menu Function Generator -> Generate Function.
Powinno pojawić się główne okno programu. Dostępne opcje to, od góry:
- Typ problemu – rzeczywisty (ciągły, zmiennoprzecinkowy) lub całkowity.
- Ograniczenia – punkty ograniczeń dla regresji symbolicznej. Zwykle
więcej punktów daje większą dokładność wyników, ale zwiększa czas obliczeń.
Ograniczenia mogą zostać dodane ręcznie lub przy uzyciu kreatora skalowania
liniowego. Aby uruchomić kreator, kliknij na przycisk "Linear scaling problem".
- Opcje Load / Save pozwalają na zapisanie punktów ograniczeń w formacie CSV (Comma Separated Values).
- Ustawienia podstawowe
- Rozmiar populacji – liczba osobników w populacji. Zwykle więcej
osobników lepiej pokrywa przestrzeń poszukiwań, ale zwiększa czas
obliczeń i wymagania pamięciowe. Domyślnie: 25000.
- Liczba pokoleń – liczba pokoleń dla algorytmu ewolucyjnego.
Domyślnie: 50.
- Maksymalna głębokość drzewa – w programowaniu genetycznym: maksymalna głębokość drzewa reprezentującego szukaną funkcję. Zbyt duże drzewa mogą prowadzić do zbytniego dostosowania się do danych (braku uogólnienia, aproksymacji zadanych punktów), a zbyt małe mogą nie być w stanie opisać funkcji, której szukasz. Domyślnie: 6.
Ustawienia podstawowe mogą zostać zapisane do, bądź wczytane z pliku w formacie "INI" dzięki przyciskom Save oraz Load.
- Dostępne funkcje – lista dostępnych funkcji bazowych. Zbiory dostępnych funkcji w
przypadku zmiennoprzecinkowym i ciągłym różnią się trochę od siebie. Funkcje Literal Value oraz Range Literals służą do zdefiniowania stałych dostępnych dla ewolucji.
Jeżeli dla przykładu wiadomo, że w funkcji powinna się pojawić liczba 37, to warto ją dopisać jako właśnie literal value – ułatwi to zadania algorytmowi ewolucyjnemu.
Kiedy definicja problemu jest gotowa, kliknij przycisk Evolve, aby rozpocząć
obliczenia.
Wykorzystanie kreatora skalowania liniowego umożliwia
zdefiniowanie ograniczeń na zmienną niezależną x0 oraz zmienną zależną y.
Ograniczenia mogą być stałe lub zmienne (jeśli zmienne ograniczenie zostanie
wybrane, do problemu zostaje dodana nowa zmienna – nowy wymiar). Interpretacja wprowadzonych
danych jest wyświetlana w polu "Interpretation".
Okno postępu pojawia się, kiedy obliczenia zostaną rozpoczęte. Każdy
wpis logu programu zawiera funkcję oceny najlepszego osobnika w pokoleniu (0 –
najlepsze dopasowanie, ∞
- najgorsze dopasowanie), wersja dostosowana wykorzystuje następującą zależność: adjusted =
1/(1+fitness), punkty trafień obliczane są jako liczba spełnionych ograniczeń.
W trakcie ewolucji pojawia się także okno z aktualną jakością rozwiązania w formacie graficznym (zakładka Quality in Time).
Dla funkcji jednowymiarowych (jedna zmienna X) jest także dostępny podgląd rozwiązania w formie graficznej (zakładka Visualization).
Okno wyników pojawia się, kiedy ewolucja się zakończy. Przykładowa wyewoluowana funkcja wynikowa została podkreślona na rysunku poniżej.
Możliwe kierunki dalszego rozwoju:
- Dodanie parametru epsilon w ewolucji, który w przypadku braku poprawny przez zadaną liczbę generacji o co najmniej taką wartość powodowałby zakończenie ewolucji.
- Wykorzystanie Ephemeral Random Constant (ERC) w celu generowania literałów przez mechanizmy ewolucji zamiast ręcznego ich podawania.
- Poprawienie usability (dodanie skrótów, lepsza integracja z Eclipsem, itp.).
Bazowa implementacja programu oraz tekst: Tomasz Pawlak |
Usprawnienia programu: Piotr Jessa |
Prowadzący: Maciej Komosiński |