Wpis z mikrobloga

No, to ten.

tl:dr


Tutaj pisałem o tym, że zaczynam przygodę z algorytmem genetycznym:
http://www.wykop.pl/wpis/15765773/mirki-pisal-ktos-ai-sztucznainteligencja-czy-co-ta/
Trochę poczytałem, trochę podziabałem. Najpierw żebym ogarnął co z czym i dlaczego jak działa napisałem algorytm, którego zadaniem było stworzenie binarnego ciągu znaków który najbardziej odpowiadałby moim kryteriom. Akurat chciałem, żeby naprzemiennie występowały 1 i 0. Fajna sprawa, szybko działało no bo nie jest to jakieś super skomplikowane i można cieszyć oko.
Pomocna przydała się tutaj publikacja, którą znalazłem na serwerach Uniwerku Łódzkiego:
http://kolos.math.uni.lodz.pl/~archive/Sztuczna%20inteligencja/6%20Klasyczny%20algorytm%20genetyczny%20cz1.pdf

Później zabrałem się za tetrisa. Zdecydowałem się użyć modelu bota opartego o 4 czynniki:
- Ilość dziur na mapie
- Ilość linii do skasowania (pełnych)
- Wypukłość całej mapy
- Łączna wysokość wszystkich słupków

Zaimplementowanie tego nie było trudne (samego bota) i pierwsze efekty pojawiły się stosunkowo szybko. Następnie musiałem tak przekształcić implementację algorytmu działającego na binarnych ciągach aby było to w stanie współpracować z liczbami zmiennoprzecinkowymi i 4 genami zamiast jednym.
Trochę męczenia się było, ale jakoś poszło.

Tutaj duże propsy lecą do @NFCH u którego leciały obliczenia algorytmu, bo mój procesor C2D do najszybszych nie należy i przeprowadzenie symulacji trwało łoooooooo i jeszcze trochę czasu.

Całość zaimplementowałem w Javie, ponieważ najlepiej się w niej obecnie czuję, a i wiele mechanizmów jest prostszych niż w C++.

Gdyby ktoś chciał uruchomić u siebie aplikację (przeprowadzić symulację/obliczenia lub zobaczyć jak komputer gra) to jest ona do pobrania tutaj:
http://www27.zippyshare.com/v/63slNtIE/file.html

Kod jest otwarty i każdy może go używać jak chce. Fajnie byłoby tylko gdyby ktoś jakimś cudem go sobie do czegoś użyje dał mi o tym znać. Tak po prostu.
O tutaj jest repo:
https://bitbucket.org/grzegorz_molicki/geneticalgorithmfortetris/overview

Co dalej:
Do poprawy jest kilka drobiazgów. Wiem, że naciśnięcie start kiedy jedna gra się jeszcze nie skończyła spowoduje uruchomienie nowego wątku i przez to nakładanie się gier. Poprawię to po sesji.
Chcę zrobić z tej symulacji aplikację rozproszoną, gdzie serwer rozrzucałby zadania, a klienci przeprowadzaliby obliczenia. No, coś w rodzaju klastra w taki sposób powstanie.

Płynnego opadania/poruszania klockiem nie dodam sam z siebie, bo ani mi się nie chce ani nie ma to celu. Jeżeli ktoś chce to napisać i dorzucić do kodu to droga otwarta.

Ta gałąź it spodobała mi się już na tyle, że będę dalej kombinował z ai i tego typu algorytmami. Mam nadzieję, że z powodzeniem.

#programowanie #ai #sztucznainteligencja trochę #algorytmygenetyczne #algorytmy
Wyrewolwerowanyrewolwer - No, to ten.

tl:dr

SPOILER

Tutaj pisałem o tym, że ...
  • 12
@MacDada: Tak szczerze to nie sprawdzałem tego jakoś super dokładnie. Tyle co na rozsądek to wziąłem i podliczyłem (to co w komentarzu). Wiem, że niektóre rzeczy są optymalizowane, ale nie byłem tego tutaj pewien.
Nawet gdyby nie były i zarobiłem tutaj odrobinę czasu, to gdzieś pewnie machnąłem kawałek brzydkiego kodu który i tak traci więcej czasu niż to przypisywanie. Przy krzyżowaniu zwłaszcza...
zwykłym algorytmem z funkcją celu?


@rotflolmaomgeez: Nie bardzo rozumiem co masz na myśli mówiąc zwykły algorytm z funkcją celu. Chodzi o algorytm wyszukiwania ścieżki/drogi do punktu?
Jeżeli tak to gdybym dołączył taki do rozgrywki - efekty byłyby jeszcze lepsze. Teraz bot gra w taki sposób, że ustawia sobie klocek w osi x, odpowiednio obraca i opuszcza. Nie dokonuje poprawek w trakcie lotu klocka. Gdyby wyszukiwał drogę do najlepszego punktu/położenia dla klocka