#programowanie #datascience #matematyka
Mam na studiach zajęcia z projektu zespołowego (mamy coś zrobić w grupie 4 studentów).
Prowadzący nam podsunął żeby zrobić coś z algorytmami genetycznymi.
Umówiliśmy sie ze ekipą że przez tydzień poprzeglądamy literature na ten temat, i sprawdzimy czy jest to coś co damy radę ogarnąć.
Temat wydaje sie w miare łatwy, i nawet zrobiłem prosty program który wykorzystuje algorytm genetyczny (narazie tylko do szukania ekstremów funkcji 1 i 2 zmiennych, i faktycznie umie je dobrze przybliżać nie wiedząc jaki wzór ma funkcja), i tu pojawia się pytanie:

znacie jakiś praktyczny projekt który by wykorzystywał taki algorytm?
Nie musi być skomplikowany, ale zwykłe szukanie ekstremum funkcji zadanej znanym wzorem jest dosyć nudne.
Chce zrobić coś, co nie będzie nudne przy pracy, tylko faktycznie będzie można poobserwać jakieś ciekawe rezultaty

EDIT: Pytam sie o coś na czym można fajnie zaprezentować taki algorytm
b62a559b-2bb1-49d1-9149-fa06e0493bbb
plemnik_w_piwie

@redve123 ale to jak on działa? Ja np mogę mieć funkcję z 5 zmiennymi, prosty wielomian, gdzie znalezienie maksimum jest dość łatwe analitycznie.

Chyba se podasz przykład z jakim ten algorytm sobie ładnie radzi to się coś wymyśli:] a na screenie gowno widać.

redve123

@plemnik_w_piwie poradzi sobie i z 50 zmiennymi, ale testowałem na mniejszych danych.

Działa tak, że na wstępie ma ileś osobników gdzie każdy osobnik jest losowym ciągiem 0 i 1 (dla algorytmu to nieistotne co one oznaczają. To my jako programista nadajemy mu znaczenie), oraz funkcje która ocenia jak dobrze sobie radzi dany osobnik (na przykład, mamy ciąg 0 i 1 o długości 32 znaków. Ustalamy że pierwsze 16 bitów odpowiada zapisowi binarnemu zmiennej X, a drugie 16 znaków zmiennej Y. Oceniamy każdego osobnika na podstawie funkcji f(x,y) faworyzując przy rozmnażaniu te osobniki, których wynik jest największy)


Algorytm jedyne co robi, to tak przetasowuje między sobą osobniki, żeby dostać taki ciąg 0 i 1 który na wyjściu da największy wynik, i to wszystko.


W obecnej formie ten algorytm prędzej czy później znajdzie ekstremum funkcji 1, 2, czy 50 zmiennych, a główne ograniczenia to pamięć i czas. Algorytm widzi tylko i wyłącznie string który ma 32 znaki, i ile wynosi funkcja przystosowania która jako argument przyjmie dany string. Tylko tyle go obchodzi


Pytam o jakiś przykład gdzie ten algorytm zrobi coś jakkolwiek widowiskowego, namacalnego. Na screenie widać wynik funkcji f(x,y) dla najlepszego osobnika z populacji na początku, i po 500 generacjach. Na początku najlepszy osobnik miał wynik 0.64, a na końcu 0.98, więc ewidentna poprawa

redve123

@plemnik_w_piwie a znalezienie ekstremum dla dowolnego wielomianu nie jest takie proste, bo może go po prostu nie być. Znalezienie go analitycznie to też wyższa szkoła jazdy (już dla 2 zmiennych jest ciekawie, bo dostajemy tylko punkty "podejrzane" o to że jest w nich ekstremum, ale każdy z nich trzeba badać z osobna czy faktycznie nim jest)

plemnik_w_piwie

@redve123 no to powiedzmy że mam model statystyczny z eksperymentów z DoE, czyli znalezione istotne parametry, dopasowany model z wysokim R2 itp no i oczywiscie współczynnik regresji dla niego. Jest w nim ok 6 zmiennych, w tym jedna kwadratowa i dwie skorelowane. Znajdzie mi maxa?:>

redve123

@plemnik_w_piwie jeżeli ten max istnieje, to prędzej czy później dzięki losowej mutacji go znajdzie. Wnioskując po opisie, zakładam znajdzie go zdecydowanie później niż prędzej ( ͡° ͜ʖ ͡°)

plemnik_w_piwie

@redve123 model jest tylko modelem, może nie mieć teoretycznego maxa, bo wybiją np w kosmos w jakimś zakresie. Ale można mu ograniczyć granice w szukaniu? Bo wiesz, to model fizycznego procesu i są w nim ograniczenia, jak np x, odpowiadający za temperaturę, nigdy nie będzie niższy niż -273 itp

redve123

@plemnik_w_piwie jedyne co musze w nim ustawic przed uruchomieniem, to sposób interpretacji ciągu 0 i 1, oraz jak ma ocenić każdy ciąg. Bez problemu powinno sie dać zrobic to o czym mówisz

groman43

@redve123 Metoda Newtona łapie się jako algorytm genetyczny? Ewentualnie gradient descent / stochastic gradient descent.

redve123

@groman43 nie to miałem na myśli. Zobacz edycje wpisu

redve123

Źle mnie rozumiecie. Ja sie pytam o to, na czym można pokazać że algorytm robi coś więcej, a nie o to jaki algorytm wybrać XD

plemnik_w_piwie

@redve123 no ja pytam czy jak ci dam funkcję kilku zmiennych, to czy znajdziesz mi maximum, od którego mój księgowy dostanie erekcji? XD

redve123

@plemnik_w_piwie do tego potrzebujesz AI które ci wygeneruje obrazek z gołą babą

inskpektor

@redve123 znajdowanie drogi w labiryncie

redve123

@inskpektor o, moze byc fajne

GrindFaterAnona

@redve123 @inskpektor generalnie problem komiwojażera. I myślę też czy procesy chemiczne by nie dało rady tym modelować.. też ciekawa działka. Np warzenie piwa jest takim procesem, chociaz bardziej biologiczno-chemicznym

TryingMyBest

Na studiach rozwiązywaliśmy problem n-queens za pomocą genetycznego ale to chyba trochę mało jak na projekt zespołowy.

jakibytulogin

U mnie na studiach był problem optymalnego użycia elektrowni różnych rodzajów (węglowe, szczytowo-pompowe itd.) na podstawie dobowego wykresu zapotrzebowania i parametrów poszczególnych elektrowni. Zadanie na 6: dokładamy el. wiatrowe losowo generujące prąd.

Zaloguj się aby komentować