Autor Wątek: Sztuczna inteligencja w grach  (Przeczytany 5236 razy)

Offline gmpro

  • Użytkownik

# Kwiecień 11, 2016, 12:53:20
Muszę na zaliczenie z SI zaimplementować sieć neuronową.. Wybrałem sobie temat SI w grach.
Poza sieciami neuronowymi takie metody grafy decyzyjne, odnajdywanie drogi jestem w stanie stworzyć. Ale z sieciami nie miałem nigdy do czynienia. Moglibyście polecić jakieś pozycje książkowe, dzięki którym będę wiedział jak zaimplementować sieć w prostej grze? Oczywiście widziałem w sieci mnóstwo książek, ale nie mam pewności czy są one opisowe czy zawierają też przykłady implementacji.

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Durson

  • Użytkownik

# Kwiecień 11, 2016, 15:33:10
Cześć, nie polecam zaczynania od książek. Sieci to jest prężna dziedzina i po paru latach te techniki odchodzą do lamusa. W większości książek przez 3/4 leci o perceptronie jednowarstwowym, mapie kohonena i pełnej maszynie boltzmanna. Te rzeczy są dobre aby jakieś podstawy machine learningu ogarnąć, ale superinteligencji w grze tym nie zbudujesz. Aha, i kodu w nich raczej nie uświadczysz. To jest wąska dziedzina, może jakieś współczesne książki z zagranicy ściągniesz, ale chyba najwięcej i najszybciej można się nauczyć w internecie i w pracach naukowych. Poszukaj pod hasłami reinforcement learning, no i popatrz na githuba, można znaleź dobre toolkity. Powodzenia, bo temat prosty nie jest.

Offline JasonVoorhees

  • Użytkownik
    • The Immortal Life of the Son of Jay

# Kwiecień 12, 2016, 09:51:50
W prostej grze nie implementuje się SI z siecią neuronową. Po prostu piszesz:
- jeśli gracz jest w zasięgu wzroku, to w niego wyceluj
- jeśli już wycelowałeś, odczekaj 0.2s
- wykonaj strzał

Uczenie maszynowe w takiej grze nie ma sensu.

Może warto byłoby wziąć coś mniej wymagającego niż gra? Zwłaszcza, że to tylko zaliczenie. Mój kumpel napisał na zaliczenie z SI prostszy projekt niż gra - rozpoznawanie znaków (OCR) na perceptronie. Znam gościa, co na pracę dyplomową pisał grę w warcaby z uczeniem maszynowym.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Kwiecień 12, 2016, 11:18:41
W prostej grze nie implementuje się SI z siecią neuronową. Po prostu piszesz:
- jeśli gracz jest w zasięgu wzroku, to w niego wyceluj
- jeśli już wycelowałeś, odczekaj 0.2s
- wykonaj strzał

Uczenie maszynowe w takiej grze nie ma sensu.
Bo wybrałeś akurat taką grę, w której to sensu nie ma. :) Za to chociażby w najprostszej implementacji kółko i krzyżyk to już sens ma. :)

Offline gmpro

  • Użytkownik

# Kwiecień 12, 2016, 13:22:24
Kółko i krzyżyk to byłoby już coś :)

Takie coś znalazłem
https://www.udacity.com/course/viewer#!/c-ud675/

Offline CheshireCat

  • Użytkownik

# Kwiecień 12, 2016, 13:51:46
Proszę bardzo:

Sieć neuronowa, która w połączeniu z przeszukiwaniem drzewa pomogła stworzyć super-silnego gracza w Go (a to bardzo ciężka dla komputerów gra).

"Mastering the game of Go with deep neural networks and tree search"
https://vk.com/doc-44016343_437229031?dl=56ce06e325d42fbc72

Offline koirat

  • Użytkownik

  • +1
# Kwiecień 12, 2016, 17:34:04
Bo wybrałeś akurat taką grę, w której to sensu nie ma. :) Za to chociażby w najprostszej implementacji kółko i krzyżyk to już sens ma. :)
Niestety w najprostszej implementacji kółko i krzyżyk też nie ma, ilość rozwiązań tak ograniczona że już łatwiej to zrobić na drzewie.

Jeśli miał bym coś polecić OP-owi to coś z boidami.

Np: boidy podążające za kursorem, nie mogą dogonić kursora trzeba ja przeprowadzić do punktu docelowego z omijaniem przeszkód.

Offline gmpro

  • Użytkownik

# Kwiecień 12, 2016, 21:40:00
@koirat
Chodzi o algorytm stada + omijanie przeszkód?

Offline koirat

  • Użytkownik

# Kwiecień 13, 2016, 01:15:14
Tak, ale zrealizowane za pomocą sieci neuronowej.

Offline Durson

  • Użytkownik

# Kwiecień 15, 2016, 08:44:48
Jakiś czas temu znalazłem coś takiego, ale się nnie przymierzałem. Więc nie wiem czy się nadaje ;)
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC4758071/

Offline gmpro

  • Użytkownik

# Maj 24, 2016, 06:32:41
Powracam do tematu.
Poczytałem trochę o sieciach, przerobiłem też pare tutków w necie.

Z boidami nie wiem co zrobić.
Spodobało mi się to:
https://www.youtube.com/watch?v=tCPzYM7B338

- Na wejściu jest tak jakby zmapowany świat na okręgu wokół obiektu. Czyli widziałbym to jako tablicę o rozmiarze n (im większe n tym dokładniej), gdzie 0 to kąt 0, a (n-1) to kąt 2pi. Wartość pojedyńczego elementu to wartość (-1.0, 1.0) znak oznacza czy to pożywienie czy przeszkoda. Natomiast wartość bezwzględna to odległość - im większa tym bliżej.
- Wyjście to zapewne przyśpieszenie oraz skręt.
Czy dobrze myślę?

Ponieważ algorytm wstecznej propagacji błędów niebardzo tu pasuje (a przynajmniej nie chciałbym go w takim systemie implementować) nastawiam się na genetyczne uczenie wg tego:
http://www.codeproject.com/Articles/16732/AI-Neural-Network-for-Beginners-Part-of
« Ostatnia zmiana: Maj 24, 2016, 06:41:41 wysłana przez gmpro »

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Maj 27, 2016, 01:52:27
Cytuj
Niestety w najprostszej implementacji kółko i krzyżyk też nie ma, ilość rozwiązań tak ograniczona że już łatwiej to zrobić na drzewie.
Jak zrobisz prosto na drzewie to taka implementacja będzie grała jedynie poprawnie. A tu raz na laborkach na uczelni kodowaliśmy kółko krzyżyk metodą Monte-Carlo, które co prawda bywało że robiło karygodne błędy, ale za to próbowało podpuszczać gracza i stawiać go w trudnych sytuacjach.

Offline gmpro

  • Użytkownik

  • +2
# Czerwiec 30, 2016, 10:01:55
Gdyby to kogoś interesowało to przesyłam moje dzieło.
Skorzystałem z algorytmu genetycznego do nauki sieci neuronowej.
Przedmiotem nauki jest omijanie asteroid przez statek.

Na wejściu statek otrzymuje bliskość przeszkody w kierunkach od -50 do 50 stopni.
Na wyjściu oczekuje się od niego wygenerowania kierunku skrętu.
Funkcja trafności to odległość od miejsca startu do miejsca kolizji (lub przerwania lotu po 10k ramek) - im więcej tym lepiej.
Stworzyłem sieci w populacji 30 egzemplarzy. 15 najlepszych sieci "nadpisuje" 15 gorszych + drobne mutacje.
 
Po ok. 300 generacjach radzi sobie całkiem dobrze :)

Używanie:
Spacja - nauka 100 generacji
F1 - przedstawia ostatni wynik najlepszej sieci
F2 - przedstawia ostatni wynik średniej sieci
F3 - przedstawia ostatni wynik najgorszej sieci

http://l00k.pl/SI.rar
« Ostatnia zmiana: Czerwiec 30, 2016, 10:04:14 wysłana przez gmpro »