Jakie są dobre przykłady algorytmów genetycznych / rozwiązań programowania genetycznego? [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięty 9 lat temu .

Algorytmy genetyczne (GA) i programowanie genetyczne (GP) są interesującymi obszarami badań.

Chciałbym się dowiedzieć o konkretnych problemach, które rozwiązałeś używając GA / GP i jakich bibliotek / frameworków używałeś, jeśli nie używałeś własnych.

Pytania:

  • jakie masz problemy używane GA / GP do rozwiązania?
  • jakich bibliotek / frameworków użyłeś?

Szukam doświadczeń z pierwszej ręki, więc proszę, NIE ODPOWIADAJ, chyba że masz to.

Author: knorv, 2009-10-08

30 answers

nie praca domowa.

Moją pierwszą pracą jako profesjonalnego programisty (1995) było pisanie automatycznego systemu handlu opartego na algorytmach genetycznych dla kontraktów terminowych S & P500. Aplikacja została napisana w Visual Basic 3 [!] i nie mam pojęcia jak to wtedy zrobiłem, skoro VB3 nawet nie miało klas.

Aplikacja rozpoczęła się od populacji losowo generowanych ciągów o stałej długości( część "genu"), z których każdy odpowiadał konkretnemu kształtowi w minucie po minucie dane cenowe kontraktów terminowych S & P500, a także konkretne zlecenie (Kup lub sprzedaj) oraz kwoty stop-loss i stop-profit. Każdy ciąg (lub "Gen") miał swój wynik zysku oceniany przez run przez 3 lata danych historycznych; ilekroć określony "kształt" pasował do danych historycznych, założyłem odpowiednie zlecenie kupna lub sprzedaży i oceniłem wynik transakcji. Dodałem zastrzeżenie, że każdy gen zaczynał się od ustalonej kwoty pieniędzy, a zatem może potencjalnie zbankrutować i zostać usunięty z genu basen w całości.

Po każdej ocenie populacji, ocaleni byli krzyżowani losowo (poprzez wymieszanie bitów od dwóch rodziców), z prawdopodobieństwem wyboru genu jako rodzica jest proporcjonalna do zysku, jaki wytworzył. Dodałem również możliwość mutacji punktowych, aby nieco urozmaicić sprawy. Po kilkuset pokoleniach tego, skończyłem z populacją genów, które mogłyby zamienić $5000 W średnio około $10000 bez szans na śmierć /złamanie (na dane historyczne, oczywiście).

Niestety, nigdy nie miałem okazji użyć tego systemu NA ŻYWO, ponieważ mój szef stracił blisko $100,000 w mniej niż 3 miesiące handlu tradycyjnym sposobem, a on stracił chęć kontynuowania projektu. Z perspektywy czasu, myślę, że system miałby ogromne zyski - nie dlatego, że musiałem zrobić coś dobrze, ale dlatego, że populacja genów, które wyprodukowałem, stało się tendencyjne w kierunku zleceń kupna (w przeciwieństwie do zleceń sprzedaży) o około Stosunek 5:1. I jak wiemy z naszej perspektywy 20/20, rynek poszedł w górę nieco po 1995 roku.

 150
Author: MusiGenesis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 15:11:52

Stworzyłem małe stworzenia, które żyły w tym małym świecie. Mieli sieć neuronową mózgu, który otrzymał kilka wejść od świata, a wyjście było wektorem ruchu wśród innych działań. Ich mózgi były "genami".

Program zaczął się od losowej populacji stworzeń z przypadkowymi mózgami. Neurony wejściowe i wyjściowe były statyczne, ale to, co było pomiędzy, nie było.

Środowisko zawierało żywność i niebezpieczeństwa. Jedzenie zwiększa energię, a gdy masz wystarczająco energia, możesz się kojarzyć. Zagrożenia zmniejszyłyby energię i jeśli energia byłaby równa 0, zginęły. W końcu stworzenia ewoluowały, aby poruszać się po świecie, znaleźć jedzenie i uniknąć niebezpieczeństw.

Postanowiłem zrobić mały eksperyment. Dałem mózgowi stworzenia neuron wyjściowy o nazwie "usta" i neuron wejściowy o nazwie "ucho". Zaczął od nowa i był zaskoczony, że ewoluowały, aby zmaksymalizować przestrzeń, a każde odpowiednie stworzenie pozostanie w swojej części (jedzenie było umieszczone losowo). Nauczyli się współpracować ze sobą i nie wchodzić sobie w drogę. Zawsze były wyjątki.

Potem spróbowałem czegoś ciekawego. Ja martwe stworzenia stałyby się pokarmem. Spróbuj zgadnąć, co się stało! Wyewoluowały dwa typy stworzeń, te które atakowały jak w Rojach, oraz te które były wysoce unikające.

Więc jaka jest lekcja tutaj? Komunikacja oznacza współpracę. Jak tylko wprowadzasz element, w którym krzywdzenie drugiego oznacza, że coś zyskujesz, to współpraca zostaje zniszczona.

Zastanawiam się, jak to odbija się na systemie wolnych rynków i kapitalizmu. Mam na myśli, jeśli firmy mogą zaszkodzić konkurencji i ujdzie to na sucho, to jasne, że zrobią wszystko, co w ich mocy, aby zaszkodzić konkurencji.

Edit:

Napisałem go w C++ nie używając frameworków. Napisałem własną sieć neuronową i kod GA. Eric, dziękuję, że powiedziałeś, że to wiarygodne. Ludzie zazwyczaj nie wierzą w moce GA (chociaż ograniczenia są oczywiste), dopóki nie zagrali z nim. GA jest proste, ale nie uproszczone.

Dla niedowiarków udowodniono, że sieci neuronowe są w stanie symulować dowolną funkcję, jeśli mają więcej niż jedną warstwę. GA to dość prosty sposób poruszania się po przestrzeni rozwiązań, znajdując lokalne i potencjalnie globalne minimum. Połącz GA z sieciami neuronowymi i masz całkiem dobry sposób na znalezienie funkcji, które znajdują przybliżone rozwiązania ogólnych problemów. Ponieważ używamy sieci neuronowych, to optymalizujemy funkcja dla niektórych wejść, a nie niektórych wejść do funkcji, ponieważ inne używają ga

Oto kod demo dla przykładu przetrwania: http://www.mempko.com/darcs/neural/demos/eaters / Instrukcje budowy:

    W tym celu należy wykonać następujące czynności:]}
  • darcs clone --lazy http://www.mempko.com/darcs/neural/
  • cd neural
  • cmake .
  • make
  • cd demos/eaters
  • ./eaters

Zrzut Ekranu Eaters

 90
Author: mempko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-30 14:22:53

W styczniu 2004 roku skontaktował się ze mną Philips New Display Technologies, który tworzył elektronikę dla pierwszego w historii komercyjnego e-atramentu, Sony Librie, który został wydany tylko w Japonii, lata przed Amazon Kindle i inne trafiły na rynek w USA i Europie.

Inżynierowie Philipsa mieli poważny problem. Kilka miesięcy przed tym, jak produkt miał trafić na rynek, wciąż pojawiał się ghost na ekranie podczas zmiany stron. Problemem było 200 kierowców, którzy tworzyliśmy pole elektrostatyczne. Każdy z tych przetworników miał określone napięcie, które musiało być ustawione od zera do 1000 mV lub coś w tym stylu. Ale jeśli zmienisz jednego z nich, to zmieni wszystko.

Więc optymalizacja napięcia każdego kierowcy z osobna nie wchodzi w rachubę. Liczba możliwych kombinacji wartości była w miliardach, a ocena pojedynczej kombinacji zajęła około 1 minuty specjalnej kamerze. Inżynierowie próbowali wielu standardowych optymalizacji techniki, ale nic by się nie zbliżyło.

Główny inżynier skontaktował się ze mną, ponieważ wcześniej wydałem bibliotekę programowania genetycznego społeczności open-source. Zapytał, czy GP/GA pomoże i czy mogę się zaangażować. Tak, i przez około miesiąc pracowaliśmy razem, ja pisząc i strojąc bibliotekę GA, na syntetycznych danych, a on integrując ją z ich systemem. Potem, pewnego weekendu pozwolili mu żyć z prawdziwą rzeczą.

W następny poniedziałek dostałem te świecące e-maile od niego i ich projektanta sprzętu, o tym, jak nikt nie mógł uwierzyć niesamowitym rezultatom znalezionym przez GA. To było to. W tym samym roku produkt trafił na rynek.

Nie dostałem za to ani centa, ale mam prawo się przechwalać. Od początku mówili, że już przekroczyli budżet, więc wiedziałem, o co chodzi, zanim zacząłem nad tym pracować. To świetna historia dla zastosowań gazu. :)

 54
Author: WEFX,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-11 15:10:47

Użyłem GA, aby zoptymalizować przydział miejsc na moim przyjęciu weselnym. 80 gości na 10 stołach. Funkcja oceny opierała się na utrzymywaniu osób z ich datami, umieszczaniu osób z czymś wspólnym razem i utrzymywaniu osób o skrajnie przeciwnych poglądach przy oddzielnych stołach.

Sprawdziłam go kilka razy. Za każdym razem mam dziewięć dobrych stołów i jeden z dziwnymi piłkami. W końcu moja żona zajmowała się siedzeniami.

My traveling salesman optimizer used a novel mapowanie chromosomu do trasy, co sprawiło, że rozmnażanie i mutowanie chromosomów stało się banalne bez ryzyka generowania nieprawidłowych tras.

Update: ponieważ kilka osób zapytało jak ...

Zacznij od tablicy gości (lub miast) w dowolnej, ale spójnej kolejności, np. alfabetycznej. Nazwij to rozwiązaniem referencyjnym. Pomyśl o indeksie gościa jako o numerze jego / jej miejsca.

Zamiast próbować kodować ten rozkaz bezpośrednio w chromosomie, my kodowanie instrukcji przekształcania roztworu referencyjnego w nowe rozwiązanie. W szczególności traktujemy chromosomy jako listy indeksów w tablicy do wymiany. Aby uzyskać dekodowanie chromosomu, zaczynamy od rozwiązania referencyjnego i stosujemy wszystkie swapy wskazane przez chromosom. Zamiana dwóch wpisów w tablicy zawsze skutkuje poprawnym rozwiązaniem: każdy gość (lub miasto) nadal pojawia się dokładnie raz.

W ten sposób chromosomy mogą być losowo generowane, mutowane i krzyżowane z innymi i zawsze będzie produkować poprawne rozwiązanie.

 53
Author: Adrian McCarthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-14 15:59:40

Użyłem algorytmów genetycznych (a także niektórych pokrewnych technik), aby określić najlepsze ustawienia dla systemu zarządzania ryzykiem, który próbował powstrzymać rolników złota od używania kradzionych kart kredytowych do płacenia za MMO. System przeprowadzi kilka tysięcy transakcji o" znanych " wartościach (oszustwo lub nie) i wykona najlepszą kombinację ustawień, aby prawidłowo zidentyfikować oszukańcze transakcje bez zbyt wielu fałszywych alarmów.

Mieliśmy dane na kilkadziesiąt (boolean) cechy transakcji, z których każda otrzymała wartość i została zsumowana. Jeśli suma była wyższa niż próg, transakcja była oszustwem. GA stworzy dużą liczbę losowych zestawów wartości, oceni je na podstawie znanych danych, wybierze te, które uzyskały najlepsze wyniki (zarówno pod względem wykrywania oszustw, jak i ograniczania liczby fałszywych alarmów), a następnie przekaże kilka najlepszych z każdego pokolenia, aby wytworzyć nowe pokolenie kandydatów. Po pewnej liczbie za zwycięzcę uznano najlepiej punktujący zestaw wartości.

Tworzenie korpusu znanych danych do testowania było piętą achillesową systemu. Jeśli czekałeś na obciążenia zwrotne, byłeś kilka miesięcy w tyle, próbując odpowiedzieć na oszustów, więc ktoś musiałby ręcznie przejrzeć dużą liczbę transakcji, aby zbudować ten korpus danych bez konieczności czekania zbyt długo.

Skończyło się na zidentyfikowaniu zdecydowanej większości oszustw, które pojawiły się, ale nie udało się uzyskać poniżej 1% w przypadku najbardziej podatnych na oszustwa przedmiotów(biorąc pod uwagę, że 90% transakcji przychodzących może być oszustwem, to było całkiem dobrze).

Zrobiłem to wszystko używając Perla. Jedno uruchomienie oprogramowania na dość starym Linuksie zajęłoby 1-2 godziny (20 minut na załadowanie danych przez łącze WAN, reszta czasu spędzonego na chrupaniu). Wielkość każdej generacji była ograniczona dostępną pamięcią RAM. W tej chwili można się spodziewać, że cena spadnie w dół. szczególnie dobry zestaw wyników.

W sumie uniknął niektórych gafów, które pojawiły się ręcznie, próbując dostosować względne wartości dziesiątek wskaźników oszustw i konsekwentnie wymyślił lepsze rozwiązania, niż mogłem stworzyć ręcznie. AFAIK, jest jeszcze w użyciu (jakieś 3 lata po tym jak go napisałem).

 35
Author: edebill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-29 12:33:42

Piłkarskie Napiwki. Zbudowałem system GA, aby przewidzieć wyniki meczów w AFL (Aussie Rules Football) z tygodnia na tydzień.

Kilka lat temu znudziła mi się standardowa praca w piłce nożnej, wszyscy po prostu wchodzili do sieci i brali typy od jakiegoś pundit w prasie. Więc, pomyślałem, że nie może być trudno pokonać kilka kierunków dziennikarskich, prawda? Najpierw pomyślałem, żeby wziąć wyniki z Massey Ratings , a następnie ujawnić pod koniec sezonu moje strategia po zdobyciu sławy i chwały. Jednak z powodów, których nigdy nie odkryłem, że Massey nie śledzi AFL. Cynik we mnie wierzy, że to dlatego, że wynik każdej gry AFL stał się w zasadzie przypadkową szansą, ale moje skargi na ostatnie zmiany zasad należą do innego forum.

System zasadniczo uwzględniał siłę ofensywną, siłę defensywną, przewagę własnego boiska, poprawę z tygodnia na tydzień (lub jej brak) i szybkość zmian w każdej z nich. Stworzyło to zestaw równania wielomianowe dla każdej drużyny w sezonie. Można obliczyć zwycięzcę i wynik dla każdego meczu w danym terminie. Celem było znalezienie zestawu współczynników, które najbardziej pasują do wyników wszystkich poprzednich gier i wykorzystanie go do przewidywania nadchodzącego meczu tygodni.

W praktyce system znajdowałby rozwiązania, które dokładnie przewidywały ponad 90% wcześniejszych wyników gry. Następnie z powodzeniem wybierze około 60-80% gier na nadchodzący tydzień (czyli tydzień nie w zestaw treningowy).

Wynik: tuż nad środkiem opakowania. Żadnej głównej nagrody pieniężnej, ani systemu, którego mógłbym użyć do pokonania Vegas. Ale było zabawnie.

Wszystko zbudowałem od podstaw, bez użycia frameworka.

 22
Author: Adrian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-16 00:30:23

Oprócz niektórych typowych problemów, takich jak podróżny sprzedawca i wariacja na temat Programu Mona Lisa Rogera Alsinga, napisałem również ewolucyjny Rozwiązywacz Sudoku (który wymagał nieco bardziej oryginalnej myśli z mojej strony, a nie tylko ponownego wdrożenia czyjegoś pomysłu). Istnieją bardziej wiarygodne algorytmy do rozwiązywania Sudokus, ale podejście ewolucyjne działa dość dobrze.

W ostatnich dniach bawiłem się ewolucyjnym program do znajdowania "zimnych talii" do Pokera po obejrzeniu tego artykułu{[2] } na Reddicie. W tej chwili nie jest to całkiem zadowalające, ale myślę, że mogę to poprawić.

Mam własny framework, którego używam do algorytmów ewolucyjnych.

 22
Author: Dan Dyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 12:14:58

Opracowałem home brew GA dla laserowego systemu profili powierzchniowych 3D, który moja firma opracowała dla przemysłu towarowego w 1992 roku. System opierał się na trójwymiarowej triangulacji i wykorzystywał Niestandardowy laserowy skaner liniowy, kamerę 512x512 (z niestandardowym przechwytywaniem hw). Odległość między kamerą a laserem nigdy nie była precyzyjna, a ogniskowa kamer nie mogła znaleźć się w pozycji 256,256, jakiej się spodziewałeś!

To był koszmar, aby spróbować i wypracować parametry kalibracji przy użyciu standardowej geometrii i symulowanego rozwiązywania równań stylu wyżarzania.

Algorytm genetyczny został uruchomiony wieczorem i stworzyłem kostkę kalibracyjną, aby ją przetestować. Znałem wymiary sześcianu z dużą dokładnością i dlatego pomysł był taki, że mój GA mógł opracować zestaw niestandardowych parametrów triangulacji dla każdej jednostki skanującej, który przezwyciężyłby różnice produkcyjne.

Sztuczka zadziałała. Byłem trochę oszołomiony! W ciągu około 10 generacje moja "wirtualna" kostka (wygenerowana ze skanu surowego i odtworzona z parametrów kalibracyjnych) faktycznie wyglądała jak kostka! Po około 50 pokoleniach miałem kalibrację, której potrzebowałem.

 18
Author: Adam Crow,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-11 11:48:48

Często trudno jest uzyskać dokładną kombinację kolorów, gdy planujesz pomalować swój dom. Często masz na myśli jakiś kolor, ale nie jest to jeden z kolorów, który pokazuje sprzedawca.

Wczoraj mój Prof., który jest badaczem GA, wspomniał o prawdziwej historii w Niemczech (niestety, nie mam dalszych odniesień, tak, mogę się tego dowiedzieć, jeśli ktoś poprosi). Ten facet (nazwijmy go Color guy) chodził od drzwi do drzwi, aby pomóc ludziom znaleźć dokładny kod koloru (w RGB) to byłaby Szafa na to, co klient miał na myśli. Oto jak by to zrobił:

kolorowy facet nosił ze sobą program, który używał GA. Zaczynał od 4 różnych kolorów-każdy zakodowany jako kodowany chromosom (którego dekodowana wartość byłaby wartością RGB). Konsument wybiera 1 z 4 kolorów (który jest najbliższy, który ma na myśli). Program przypisałby wtedy maksymalną sprawność do tej jednostki i przejście do następnej generacji za pomocą mutacji/crossover. Powyższe kroki będą powtarzane, dopóki konsument nie znajdzie dokładnego koloru, a następnie color guy powiedział mu kombinację RGB!

Poprzez przypisanie maksymalnej przydatności do koloru zamyka się na to, co konsument ma na myśli, program color guy zwiększa szanse na zbieżność do koloru, konsument ma dokładnie na myśli. To było całkiem zabawne!

Teraz, gdy mam -1, jeśli planujesz więcej -1, pls. wyjaśnij powód takiego działania!

 11
Author: 2 revsuser59634,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-12 10:00:43

Kilka tygodni temu zaproponowałem Rozwiązanie Na SO używając algorytmów genetycznych do rozwiązania problemu układu grafu. Jest to przykład ograniczonego problemu optymalizacji.

Również w obszarze uczenia maszynowego zaimplementowałem od podstaw Framework klasyfikacji oparty na GA w c / c++.
Wykorzystałem również GA w przykładowym projekcie do szkolenia sztucznych sieci neuronowych (ANN) w przeciwieństwie do użycia słynnego algorytmu backpropagacji .

In dodatkowo, jako część moich badań magisterskich, wykorzystałem ga w szkoleniu Ukryte modele Markowa jako dodatkowe podejście do algorytmu Baum-Welch bazującego na EM (ponownie w c/C++).

 8
Author: Amro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:29

W ramach mojego licencjackiego stopnia CompSci, przydzielono nam problem znalezienia optymalnych FLAG jvm dla maszyny wirtualnej Jikes research. Zostało to ocenione za pomocą pakietu dicappo benchmark suite, który zwraca czas na konsolę. Napisałem rozproszony gentic alogirthm, który zmienił te flagi, aby poprawić czas działania pakietu benchmark, chociaż uruchomienie zajęło kilka dni, aby zrekompensować jitter sprzętowy wpływający na wyniki. Jedynym problemem było to, że nie dowiedziałem się właściwie o teorii kompilatora (co było celem zadania).

Mogłem zasiać początkową populację z wyjściowymi domyślnymi flagami, ale co ciekawe, algorytm znalazł bardzo podobną konfigurację do poziomu optymalizacji O3 (ale w rzeczywistości był szybszy w wielu testach).

Edit: napisałem również własny Framework algorytmu genetycznego w Pythonie do przypisania, i po prostu użyłem poleceń popen do uruchomienia różnych benchmarków, chociaż jeśli nie był oceniany / align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center /

 8
Author: WIll,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 17:32:32

Po pierwsze," Programowanie genetyczne " Jonathana Kozy (na amazon ) jest w zasadzie książką o genetycznych i ewolucyjnych algorytmach / technikach programowania, z wieloma przykładami. Proponuję to sprawdzić.

Jeśli chodzi o własne użycie algorytmu genetycznego, użyłem (domowego) algorytmu genetycznego, aby wyewoluować algorytm roju dla scenariusza zbierania/niszczenia obiektów (praktycznym celem mogło być oczyszczenie pola minowego). Oto link do gazety . Najbardziej interesującą częścią tego, co zrobiłem, była wielostopniowa funkcja fitness, która była koniecznością, ponieważ proste funkcje fitness nie dostarczyły wystarczającej informacji dla algorytmu genetycznego, aby wystarczająco odróżnić członków populacji.

 7
Author: miko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 10:54:13

Jestem częścią zespołu badającego wykorzystanie obliczeń ewolucyjnych (EC) do automatycznego naprawiania błędów w istniejących programach. Udało nam się naprawić wiele błędów w rzeczywistych projektach oprogramowania (zobacz Strona główna tego projektu).

Mamy dwa zastosowania tej techniki naprawy EC.

  • Pierwsze (informacje o kodzie i reprodukcji dostępne na stronie projektu ) ewoluuje abstrakcyjne drzewa składni przetwarzane z istniejącego C programy i jest realizowany w Ocaml przy użyciu naszego własnego custom EC engine.

  • Drugi (kod i informacje o reprodukcji dostępne za pośrednictwem Strony Projektu ), mój osobisty wkład w projekt, ewoluuje x86 assembly lub Java kod bajtowy skompilowany z programów napisanych w wielu językach programowania. Aplikacja ta jest zaimplementowana w Clojure, a także wykorzystuje własny, niestandardowy silnik EC.

Jednym z ładnych aspektów obliczeń ewolucyjnych jest prostota techniki umożliwia pisanie własnych, niestandardowych implementacji bez większych trudności. Aby uzyskać dobry, swobodnie dostępny tekst wprowadzający na temat programowania genetycznego, zobacz Field Guide to Genetic Programming .

 7
Author: eschulte,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-12 21:43:23

Razem ze współpracownikiem pracujemy nad rozwiązaniem do załadunku ładunków na samochody ciężarowe według różnych kryteriów, jakich wymaga nasza firma. Pracowałem nad rozwiązaniem algorytmu genetycznego, kiedy on używa gałęzi i jest związany z agresywnym przycinaniem. Wciąż jesteśmy w trakcie wdrażania tego rozwiązania, ale do tej pory osiągaliśmy dobre wyniki.

 6
Author: user192531,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 16:08:14

Kilka lat temu korzystałem z ga do optymalizacji gramatyki asr (automatic speech recognition) dla lepszego rozpoznawania. Zacząłem od dość prostych list wyborów (gdzie ga testował kombinacje możliwych terminów dla każdego gniazda) i pracowałem na drodze do bardziej otwartych i złożonych gramatyk. Sprawność określano poprzez pomiar separacji terminów/sekwencji w ramach pewnego rodzaju funkcji odległości fonetycznej. Eksperymentowałem również z tworzeniem słabo równoważnych odmian gramatyki, aby znaleźć to skompilowane do bardziej zwartej reprezentacji (w końcu poszedłem z bezpośrednim algorytmem, a to drastycznie zwiększyło rozmiar "języka", który możemy używać w aplikacjach).

Ostatnio używałem ich jako domyślnej hipotezy, na podstawie której sprawdzałem jakość rozwiązań generowanych z różnych algorytmów. To w dużej mierze wiązało się z kategoryzacją i różnymi rodzajami problemów z dopasowaniem (tj. stworzyć "regułę", która wyjaśnia zestaw wyborów dokonywanych przez recenzentów nad dataset (s)).

 5
Author: Steve Roberts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-12 03:44:33

Zrobiłem kompletny framework GA o nazwie "GALAB", aby rozwiązać wiele problemów:

  • lokalizowanie mrówek GSM (BTS), aby zmniejszyć nakładanie się i puste lokalizacje.
  • [[3]}Planowanie projektu ograniczenia zasobów.
  • ewolucyjne tworzenie obrazu. (Evopic)
  • Problem z podróżnym sprzedawcą.
  • N-Queen & N-Color problems.
  • Knight ' s tour & Knapsack problems.
  • Magiczny kwadrat i łamigłówki Sudoku.
  • kompresja strun, oparta na Superstringu problem.
  • problem z opakowaniem 2D.
  • Mała aplikacja do sztucznego życia. Rubik puzzle.
 4
Author: MShams,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-12 03:55:55

Kiedyś użyłem GA do optymalizacji funkcji hash dla adresów pamięci. Adresy miały Rozmiar stron 4K lub 8K, więc wykazywały pewną przewidywalność w wzorze bitowym adresu (najmniej znaczące bity to zero; środkowe bity regularnie zwiększające się itp.) Oryginalna funkcja hash była "chunky" - miała tendencję do cluster hits na co trzecim wiadrze hash. Ulepszony algorytm miał prawie idealny rozkład.

 4
Author: Brett Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-11 17:49:03

Zbudowałem prosty GA do wydobywania użytecznych wzorców ze spektrum częstotliwości muzyki, gdy była odtwarzana. Wyjście zostało użyte do wyświetlania efektów graficznych w wtyczce Winampa.

    W tym celu należy wykonać następujące czynności:]}
  • Wyjście: pojedyncza wartość zmiennoprzecinkowa (ważona suma wejść), próg 0.0 lub 1.0
  • geny: waga wejściowa
  • Funkcja Fitness: połączenie cyklu pracy, szerokości impulsu i BPM w rozsądnym zakresie.

I miał kilka gazów dostrojonych do różnych części widma, a także różne limity BPM, więc nie miały tendencji do zbieżności w kierunku tego samego wzoru. Wyniki z pierwszej 4 z każdej populacji zostały wysłane do silnika renderującego.

Interesującym efektem ubocznym było to, że średnia sprawność w całej populacji była dobrym wskaźnikiem zmian w muzyce, chociaż zwykle zajęło to 4-5 sekund, aby to zrozumieć.

 4
Author: geofftnz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-13 22:44:19

Nie wiem, czy praca domowa się liczy...

Podczas moich studiów zwijaliśmy nasz własny program, aby rozwiązać problem komiwojażera.

Chodziło o porównanie kilku kryteriów (trudności w mapowaniu problemu, wydajności itp.), a my również użyliśmy innych technik, takich jak symulowane wyżarzanie.

To działało całkiem dobrze, ale zajęło nam trochę czasu, aby zrozumieć, jak zrobić fazę "reprodukcji" poprawnie: modelowanie problemu pod ręką w coś odpowiedniego ponieważ Programowanie genetyczne naprawdę uderzyło mnie jako najtrudniejszą część...

To był interesujący kurs, ponieważ zajmowaliśmy się również sieciami neuronowymi i tym podobnymi.

Chciałbym się dowiedzieć, czy ktoś używał tego typu programowania w kodzie 'produkcyjnym'.

 3
Author: Matthieu M.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-08 14:48:50

Użyłem prostego algorytmu genetycznego, aby zoptymalizować stosunek sygnału do szumu fali reprezentowanej jako ciąg binarny. Przez przerzucanie bitów na kilka milionów generacji udało mi się wytworzyć transformację, która zaowocowała wyższym stosunkiem sygnału do szumu tej fali. Algorytm mógł być również "symulowanym wyżarzaniem", ale nie został w tym przypadku użyty. W ich rdzeniu algorytmy genetyczne są proste, a to był tak prosty przypadek użycia, że widziałem, więc nie używałem frameworka do tworzenia i selekcji generacji-tylko losowe ziarno i funkcja stosunek sygnału Do Szumu pod ręką.

 3
Author: Alex Sexton,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-19 18:50:01

W ramach pracy napisałam generyczny framework Javy dla algorytmu optymalizacji wielu celów mPOEMS( Multiobjective prototype optimization with evolved improvement steps), który jest GA wykorzystującym koncepcje ewolucyjne. Jest to ogólne w taki sposób, że wszystkie części niezależne od problemów zostały oddzielone od części zależnych od problemów, a interfejs jest povided do korzystania z frameworku tylko dodanie części zależnych od problemów. Tym samym kto chce korzystać z algorytmu nie musi zacznij od zera, a to znacznie ułatwia pracę.

Kod znajdziesz tutaj .

Rozwiązania, które można znaleźć za pomocą tego algorytmu, zostały porównane w pracy naukowej z najnowocześniejszymi algorytmami SPEA-2 i NSGA i udowodniono, że algorytm działa porównywalnie lub nawet lepiej, w zależności od metryk, które przyjmujesz do pomiaru wydajności, a zwłaszcza w zależności od problemu optymalizacji, na który patrzysz.

Znajdziesz go tutaj .

Również w ramach pracy dyplomowej i proof of work zastosowałem ten framework do problemu wyboru projektów w zarządzaniu portfelem. Chodzi o wybór projektów, które dodają firmie największą wartość, wspierają najbardziej strategię firmy lub wspierają dowolny inny arbitralny cel. Np. wybór określonej liczby projektów z określonej kategorii lub maksymalizacja synergii projektowych ...

Moja praca, która stosuje ten framework do projektu problem z wyborem: http://www.ub.tuwien.ac.at/dipl/2008/AC05038968.pdf

Potem pracowałem w dziale zarządzania portfelem w jednym z fortune 500, gdzie używali komercyjnego oprogramowania, które również zastosowało GA do problemu wyboru projektu / optymalizacji portfela.

Dalsze zasoby:

Dokumentacja RAM: http://thomaskremmel.com/mpoems/mpoems_in_java_documentation.pdf

Prezentacja MPOEMS papier: http://portal.acm.org/citation.cfm?id=1792634.1792653

Właściwie z odrobiną entuzjazmu każdy mógł łatwo dostosować kod generycznego frameworka do arbitralnego problemu optymalizacji wielu celów.

 3
Author: Thomas Kremmel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-31 12:48:06

W pracy miałem następujący problem: biorąc pod uwagę zadania M I N DSP, jaki był najlepszy sposób przypisywania zadań do DSP? "Najlepszy" został zdefiniowany jako "minimalizacja obciążenia najbardziej obciążonego DSP". Były różne typy zadań, a różne typy zadań miały różne konsekwencje wydajności w zależności od tego, gdzie zostały przydzielone, więc zakodowałem zestaw zadań od zadania do DSP jako "ciąg DNA", a następnie użyłem algorytmu genetycznego ,aby "wyhodować" najlepszy ciąg zadań, jaki mogłem.

To działało uczciwie cóż (znacznie lepiej niż moja poprzednia metoda, która polegała na ocenie każdej możliwej kombinacji... w przypadku nietrywialnych rozmiarów problemów, ukończenie ich zajęłoby lata!), jedynym problemem było to, że nie było sposobu, aby stwierdzić, czy optymalne rozwiązanie zostało osiągnięte, czy nie. Można było tylko zdecydować, czy obecny "najlepszy wysiłek" był wystarczająco dobry, lub pozwolić działać dłużej, aby zobaczyć, czy może zrobić lepiej.

 2
Author: Jeremy Friesner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 21:30:06

Odbył się konkurs na codechef.com (świetna strona przy okazji, comiesięczne konkursy programistyczne), gdzie należało rozwiązać nierozwiązywalne sudoku (należy podejść jak najbliżej z jak najmniej błędnych kolumnów / wierszy / etc).

To, co bym zrobił, to najpierw wygenerować idealne sudoku, a następnie nadpisać pola, które zostały podane. Z tej całkiem dobrej podstawy użyłem programowania genetycznego, aby poprawić moje rozwiązanie.

I couldn ' t think of a deterministyczne podejście w tym przypadku, ponieważ sudoku było 300x300 i wyszukiwanie zajęłoby zbyt długo.

 2
Author: Dave O.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 23:52:15

Na seminarium w szkole rozwijamy aplikację do generowania muzyki w oparciu o tryb muzyczny. Program został zbudowany w Javie, a wyjściem był plik midi z utworem. Do generowania muzyki używamy charakterystyk ga. Myślę, że ten program może być przydatny do odkrywania nowych kompozycji.

 2
Author: user181945,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-20 05:02:02

W trakcie studiów wykorzystaliśmy NERO (połączenie sieci neuronowej i algorytmu genetycznego), aby nauczyć roboty w grze podejmowania inteligentnych decyzji. To było całkiem fajne.

 2
Author: user197801,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-19 07:30:08

Opracowałem wielowątkową symulację poruszania się robotów na podstawie zestawu randomizowanego terenu siatkowego źródeł żywności i kopalń oraz opracowałem strategię opartą na algorytmie genetycznym badającą optymalizację zachowań robotów i przetrwanie najsilniejszych genów dla robotycznego chromosomu. Dokonano tego za pomocą wykresów i mapowania każdego cyklu iteracji.

Od tego czasu rozwinąłem jeszcze więcej zachowań w grze. Przykładowa aplikacja, którą zbudowałem niedawno dla siebie, była genetyczną algorytm rozwiązywania problemu podróżujących sprzedawców w poszukiwaniu trasy w Wielkiej Brytanii, biorąc pod uwagę Stany startowe i cele, a także jeden / wiele punktów połączeń, opóźnienia, odwołania, roboty budowlane, godziny szczytu, strajki publiczne, rozważenie między najszybszymi a najtańszymi trasami. Następnie zapewnienie wyważonej rekomendacji dla trasy do podjęcia w danym dniu.

Ogólnie moją strategią jest użycie reprezentatora genów opartego na POJO, a następnie zastosowanie konkretnych implementacji interfejsu dla selekcja, mutacja, strategie crossover i punkt kryteriów. Moja funkcja fitness w zasadzie staje się dość złożona w oparciu o strategię i kryteria, które muszę zastosować jako środek heurystyczny.

Przyjrzałem się również zastosowaniu algorytmu genetycznego do zautomatyzowanych testów w kodzie przy użyciu systematycznych cykli mutacji, gdzie algorytm rozumie logikę i próbuje ustalić raport o błędzie z zaleceniami dotyczącymi poprawek kodu. Zasadniczo, sposób, aby zoptymalizować mój kod i zapewnić zalecenia dotyczące ulepszeń, a także sposób automatyzacji odkrywania nowego kodu programowego. Próbowałem również zastosować algorytmy genetyczne do produkcji muzyki między innymi.

Ogólnie rzecz biorąc, uważam strategie ewolucyjne jak większość strategii metaheurystycznych / globalnych optymalizacji, są one powoli uczyć się na początku, ale zaczynają podnosić jak rozwiązania stają się coraz bliżej stanu celu i tak długo, jak funkcja fitness i heurystyka są dobrze dopasowane do produkcji ta zbieżność w przestrzeni poszukiwań.

 2
Author: Martin Capodici,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-22 06:04:38

Kiedyś próbowałem stworzyć gracza komputerowego do gry Go, wyłącznie w oparciu o programowanie genetyczne. Każdy program będzie traktowany jako funkcja oceny sekwencji ruchów. Produkowane programy nie były jednak zbyt dobre, nawet na raczej malejącej płycie 3x4.

Użyłem Perla i sam wszystko zakodowałem. Dzisiaj zrobiłbym to inaczej.

 1
Author: Svante,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 21:40:01

Po przeczytaniu The Blind Watchmaker zainteresował mnie program Pascala, który Dawkins powiedział, że opracował, aby tworzyć modele organizmów, które mogą ewoluować w czasie. Byłem na tyle zainteresowany, aby napisać swój własny za pomocą Rój . Nie zrobiłem tych wszystkich fantazyjnych grafik, które zrobił, ale moje 'chromosomy' kontrolowały cechy, które wpływały na zdolność organizmów do przetrwania. Żyli w prostym świecie i mogli walczyć ze sobą i Swoim otoczeniem.

Organizmy żyły lub umierały częściowo dzięki przypadkowi, ale także na podstawie tego, jak skutecznie przystosowały się do lokalnego środowiska, jak dobrze spożywały składniki odżywcze i jak skutecznie rozmnażały się. To było zabawne, ale także dowód dla mojej żony, że jestem maniakiem.

 1
Author: DaveParillo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-15 21:44:05

To było jakiś czas temu, ale przewróciłem GA, aby ewoluować, co było w efekcie jąder przetwarzania obrazów, aby usunąć ślady promieniowania kosmicznego z obrazów Hubble Space Telescope (HST). Standardowym podejściem jest wykonywanie wielu ekspozycji za pomocą Hubble ' a i zachowywanie tylko tych rzeczy, które są takie same we wszystkich obrazach. Ponieważ czas HST jest tak cenny, jestem miłośnikiem astronomii i niedawno uczestniczyłem w Kongresie obliczeń ewolucyjnych, pomyślałem o użyciu GA do czyszczenia pojedynczych ekspozycji.

The osoby były w postaci drzew, które miały obszar pikseli 3x3 jako wejście, wykonały pewne obliczenia i podjęły decyzję o tym, czy i jak zmodyfikować środkowy piksel. Kondycję oceniano porównując wyjście z obrazem oczyszczonym w tradycyjny sposób(tj. układanie ekspozycji).

To faktycznie działa, ale nie na tyle dobrze, aby uzasadnić rezygnację z pierwotnego podejścia. Gdybym nie został ograniczony czasowo przez moją tezę, mógłbym rozszerzyć genetyczne części bin dostępne dla algorytmu. Jestem prawie pewien, że mogłem go znacznie poprawić.

Używane biblioteki: jeśli dobrze pamiętam, IRAF i cfitsio do przetwarzania danych astronomicznych i I/o.

 1
Author: Adam Hollidge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-11 13:34:34

Eksperymentowałem z GA w młodości. Napisałem symulator w Pythonie, który działał w następujący sposób.

Geny zakodowały masę sieci neuronowej.

Wejścia sieci neuronowej były "antenami", które wykrywały dotknięcia. Wyższe wartości oznaczały bardzo bliskie, a 0 nie dotykające.

Wyjścia były do dwóch "kół". Jeśli oba koła poszły do przodu, facet poszedł do przodu. Jeśli koła były w przeciwnych kierunkach, facet odwrócił się. Siła wyjściowa określała prędkość obrotu koła.

Powstał prosty labirynt. To było naprawdę proste, nawet głupie. Początek był na dole ekranu, a cel na górze, z czterema ścianami pomiędzy. Każda ściana miała miejsce losowo, więc zawsze była ścieżka.

Zacząłem przypadkowych facetów (myślałem o nich jak robaki) na początku. Jak tylko jeden facet osiągnął cel, lub limit czasu został osiągnięty, kondycja została obliczona. Była odwrotnie proporcjonalna do odległości do / align = "left" /

Potem sparowałem je i "wyhodowałem", aby stworzyć następne pokolenie. Prawdopodobieństwo wyboru do hodowli było proporcjonalne do jego sprawności. Czasami oznaczało to, że jeden był hodowany z siebie wielokrotnie, jeśli miał bardzo wysoką sprawność względną.

Myślałem, że rozwiną zachowanie "ściskania lewej ściany" , ale zawsze wydawało się, że podążają za czymś mniej optymalnym. W każdym eksperymencie robaki zbiegały się w spiralny wzór. Spirali Na Zewnątrz dopóki nie dotknęli ściany po prawej. Podążali za tym, a gdy dotarli do szczeliny, spirali w dół (z dala od szczeliny)i dookoła. Wykonują obrót o 270 stopni w lewo, a następnie zwykle wchodzą w lukę. Dzięki temu przebijali się przez większość murów, a często do celu.

Jedną z funkcji, którą dodałem, było wprowadzenie wektora koloru do genów, aby śledzić pokrewieństwo między osobnikami. Po kilku pokoleniach wszystkie byłyby w tym samym kolorze, co mówi mi, że powinnam mieć lepsza strategia hodowli.

Próbowałem nakłonić ich do opracowania lepszej strategii. Skomplikowałem sieć neuronową. dodałem pamięć i w ogóle. To nie pomogło. Zawsze widziałem tę samą strategię.

Próbowałem różnych rzeczy, takich jak posiadanie osobnych puli genów, które rekombinowały dopiero po 100 pokoleniach. Ale nic nie popchnie ich do lepszej strategii. Może to było niemożliwe.

Kolejną ciekawą rzeczą jest wykresy sprawności w czasie. Były określone wzory, takie jak maksymalna sprawność spada, zanim pójdzie w górę. Nigdy nie widziałem książki o ewolucji mówiącej o tej możliwości.

 1
Author: Eric Normand,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-09-11 15:56:12