Autor Wątek: AI które się uczy.  (Przeczytany 8034 razy)

Vipa

  • Gość
# Grudzień 09, 2009, 21:49:01
...Wyzywasz ludzi,..
Hm... Ciekawe ...
Jeśli "Jeśli brać za odnośnik twój poziom inteligencji , to masz rację , Quake 2 miał uczące się boty." to jest obrażanie ludzi ,
To dla ciebie GTFO , STFU jest ok ?
Obore to niekiedy może i robię  , z tym się zgodzę.

Dadane
Zresztą jak ludzie klną , albo robią oborę to nic , a ja jak zawsze dostaje ,jak czarna owca , szary kruk , itp

Dadane
A wesz tylko gada o tej ortografii , i np. nic w moim ostatnim temacie ciekawego nie wniósł.
« Ostatnia zmiana: Grudzień 09, 2009, 21:56:35 wysłana przez Wladekprogramista »

Offline Mr. Spam

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

Offline Khaine

  • Użytkownik

# Grudzień 09, 2009, 22:12:03
Cytuj
Witam

Postanowiłem zrobić program o którym z dawien dawna marzyłem. Program który zaczyna jako tabula rasa, z czasem zaś przerasta swego nauczyciela.  Wink

Pierwsze pytanie jest o literaturę, o samym AI(działanie sieci, uczenie, zbiory rozmyte, algorytmy) jestem myślę dobrze poinformowany, niestety o konkretnych zastosowaniach nie wiem za wiele. Czy mógł by ktoś polecić konkretną pozycję, która jemu samemu pomogła. Oczywiście mam parę na oku, czyli to co akurat jest w bibliotece, jednak czytanie na chybił trafił jest może nie bezproduktywne ale na pewno mało efektywne.

Teraz o problemie. Wymyśliłem prostą grę, pozbawioną elementów poruszania się, organizacji przestrzennej jednostek etc tak aby uprościć zadanie AI.
Rozpoczynamy z określoną pulą możliwych ruchów, powiedzmy A- buduj food B-hoduj X C-sprzedaj , celem niech będzie uzbieranie jakieś kwoty. Oczywiście więcej fooda kosztują Xy wydajniejsze.

Pytanie jak nauczyć i jak zaprojektować system który znajdzie optymalną drogę między kosztem a przyszłym przychodem. No i oczywiście który będzie analizować poczynania przeciwnika.

Myślę na początek nad prostym systemem wagowym i tablicą ruchów. IF przeciwnik ma się cienko THEN warto poczekać skoro dysponuję jednostką wydajniejszą ale brak mi jeszcze fooda, itd.

Proszę o jakieś wskazówki, proponowane techniki, algorytmy, może przykłady. Sam oczywiście także przeczesuję książki i google, ale myślę nie zawadzi zapytać.
Proponowal bym, jak juz wczesniej koledzy nadmienili, sieci neuronowe. Pewnie wystarczy n-warstwowa siec z propagacja wsteczna. Jesli bys chcial cos lepszego to zapoznaj sie z SONN'ami. Charakteryzuja sie m.in. tym, ze potrafia w 100% rozpoznac wzorzec i maja duzo wiekszy % 'nieomylnosci', no i, co ciekawe mozna taka siec zwinac do jednej warstwy -_- (glowy nie dam czy kazda, nie pamietam :P). Oczywiscie sieci neuronowe, a szczegolnie SONN'y do najszybszych rozwiazan AI nie naleza.

Offline Liosan

  • Moderator

# Grudzień 09, 2009, 23:16:30
A propos szybkości sieci neuronowych, fajna jest biblioteka FANN. A o SONNach nie słyszałem, obadam :) (self-organizing czy self-optimizing? czy to to samo?)

Wladek, nie rób obory. Dostałeś ostrzeżenie, wystarczy. Za to doceniam posta bez ortów :)

Liosan

Offline Charibo

  • Redaktor

# Grudzień 09, 2009, 23:30:50
...Wyzywasz ludzi,..
Hm... Ciekawe ...
(...)to jest obrażanie ludzi(...). Obore to niekiedy może i robię  , z tym się zgodzę.
Cieszę się, że się zgadzamy i że widzisz swoje błędy. Obyśmy nie musieli więcej interweniować. :)

Offline kosmatkao

  • Użytkownik

# Grudzień 09, 2009, 23:38:03
Też uważam, że prosta sieć neuronowa na początku wystarczy. Wiem z doświadczenia bo nie tylko czytałem ale też zastosowałem w grze, gdzie było dużo parametrów rozgrywki i mało chęci na pisanie pełnego algorytmu decyzyjnego. A uczyłem się z tej świetnej strony: http://nrn.prv.pl/

PS: Jeśli dobrze zaprojektujesz i użyjesz SSN to otrzymasz błyskawiczny, rozszerzalny, łatwy do podziału na poziomy trudności, uczący się (sam lub od kogoś) algorytm, który Cię zaskoczy;)

Offline Khaine

  • Użytkownik

# Grudzień 10, 2009, 00:05:21
Cytuj
A o SONNach nie słyszałem, obadam Smiley (self-organizing czy self-optimizing? czy to to samo?)
SONN - self optimizing neural networks ;) Te sieci buduja automatycznie swoja topologie - taka ciekawostka i zarazem potezny ficzer.

Offline Kos

  • Użytkownik
    • kos.gd

# Grudzień 10, 2009, 00:13:41
Ho, ciekawe! Dzięki za keyword.

Offline Tryllion

  • Użytkownik

# Grudzień 10, 2009, 14:15:17
O widzę duży odzew, dzięki.  :)

Najpierw do zgryźliwych, nie chodzi o programowanie i nie jest tak że podczas programu wyjdzie co i jak, już się w życiu narobiłem projektów gdzie zaczynało się z zieloną głową z nadzieją że jakoś to będzie, a potem reorganizacja kodu zajmowała 3 razy więcej czasu co cały projekt.
Lepiej najpierw zrozumieć problematykę.

Problem jest natury metodologicznej, jaką przyjąć metodę rozwiązywania problemu i jakich użyć narzędzi.
Trochę to dziwne ale potrafię stworzyć sieć, uczyłem się ich struktury i sposobu uczenia, np. wspomnianej przez kogoś propagacji wstecznej. Otrzymywałem jakieś tam wyniki, ale to były suche liczby, teraz natomiast kiedy stoję przed konkretnym problemem to sciana.  ???

Podsumowując, chodzi mi o ogólne wytyczne, o ogólny kocept, na szczegóły przyjdzie czas.

Po pierwsze co to znaczy że program się uczy ?
(Jeszcze o samej grze, wydaje się prosta, ale myślę że dzięki np. losowym wartością początkowym, albo zróżnicowanym bonusą sytuacja może stać się dostatecznie dynamiczna aby tworzenie tabeli IF THEN nie miało sensu ;) )

Wymyśliłem takie zasadnicze podejścia tworzenia AI:
 - albo program analizuje obecną sytuację swoją i przeciwników i porównuje profity jakie przyniesie dana akcja
 - albo np. dokonuje losowej akcji, po czym po całej grze ocenia swoje postępowanie wstecz, przy kolejnej grze wyszukuje w bazi pamięci podobne zdarzenia i dokonuje wyboru opierając się na doświadczeniu
 - albo np. rozgrywa w "głowie" wirtualne partie, coś jak w szachach, wszystkie możliwe kombinacje po czym wybiera ruch najbardziej efektywny
 
Takie 3 podejścia, te 2 wydaje się najbardziej zbliżone do nauki, ale pytanie jest takie czy nie stworzy to zupełnego deblia, jeśli np. przeciwnik podłoży się w 1 partii, to komputer nauczy się idiotycznej zagrywki i w kolejnej partii przegra.

Hmm jakieś pomysły czym jest nauka w AI, jakiś pomysł jak ją zasymulować ?

Offline siso

  • Użytkownik

# Grudzień 10, 2009, 14:46:57
Cytuj
Hmm jakieś pomysły czym jest nauka w AI, jakiś pomysł jak ją zasymulować ?
Hmmm, nauka to zawsze jest zbieranie informacji i budowanie na ich podstawie jakiegoś modelu. Czy to będzie sień neuronowa, zbiór zasad czy cokolwiek innego - ogólnie zawsze jest to baza wiedzy, do której ładujesz dane w odpowiednim formacie w procesie uczenia i otrzymujesz odpowiedzi na stawiane pytania w procesie wnioskowania. W sieciach trochę mniej się to rzuca w oczy niż przy regułach if-then, ale sprowadza się do podobnego założenia. Metody postępowania przy różnych modelach będą oczywiście różne.

Zanim uzyskasz odpowiedź na postawione pytanie, najpierw IMO musisz odpowiedzieć na inne: z czego konkretnie chcesz swoje AI zbudować?

Offline Tryllion

  • Użytkownik

# Grudzień 10, 2009, 20:14:10
Szerze powiem iż jest mi to obojętne, ponieważ mimo znajomości podstaw, nie wiem, jakoś nigdzie takowych informacji nie moge znaleźć, co też dana metoda wniesie do mojej AI.

Wymieniłem 3 zadania które powinna realizować AI, to jest przeprowadzić analizę obecnej sytuacji, prostym algorytmem obliczeniowym, przewidzieć wszystkie możliwe posunięcia przeciwnika i własne oraz po rozgrywce ocenić się samym.
Jeśli np. takie zadania dla mojej prostej gry potrafiła by odpowiednio zaprojektowana sieć neuronowa, to jestem za siecią, tylko jak ?
Tutaj zaczyna się dla mnie czysta magia, jak z teorii przejść do praktyki ?  ???

dodano:
kosmatkao
http://nrn.prv.pl/ ciekawa stron, ale ja to już wiem, teraz chodzi jak to konkretnie zastosować w AI  ;)

Kuba D.
W takim razie zajrzę do perełek.
« Ostatnia zmiana: Grudzień 10, 2009, 20:18:04 wysłana przez Tryllion »

Vipa

  • Gość
# Grudzień 10, 2009, 20:29:06
Można w sumie pakować dane do gałęzi i bez badania wszystkich możliwości z góry usuwać te błędne. Słowem coś pokroju opisanego przez Liosana drzewka.
Na podobnej zasadzie kiedyś robiło się szachy na komputery 8bit z 64 kb ramu. W sumie na tej samej zasadzie działa Saper. Badasz możliwości, odrzucasz z góry błędne, resztę dzielisz na priorytety. Te badasz od najniższego, znowu odrzucając błędne. I tak w koło Macieju aż trafisz na jedyną poprawną odpowiedź.

Pamiętam, że bodajże jak robiłem szachy na Atari, to stopień trudności komputera polegał na głębokości badania. Badań jest za każdym razem n, więc nawet arcymistrz potrafił popełnić błąd, ale popełniał go znacznie rzadziej niż arcycymbał. Proste.

Nie wiem czy do końca zrozumiałem co chcesz zrobić, ale nauka w tym przypadku polega na deklaracji z góry błędnych zachowań w uzależnieniu od zachowania przeciwnika. Po ludzku, na przykładzie: na początku można wystawić piechura przeciwko czołgom. A nuż się uda. Dopiero jak sobie nie poradzi, zrezygnować z tego kroku przy następnych planowanych posunięciach.

Algorytmów tutaj nie ma. Do szachów napiszesz co innego jak do Command & Conquer. Są co prawda usystematyzowane metody, ale one także potrafią się nie sprawdzić. Po prostu napisz to sam, zastanawiając się dlaczego to co robi komputerowy gracz nie daje rezultatów i dodając kolejne warunki (najprostsza metoda).

Offline Tryllion

  • Użytkownik

# Grudzień 15, 2009, 17:36:04
Cytuj
na początku można wystawić piechura przeciwko czołgom. A nuż się uda. Dopiero jak sobie nie poradzi, zrezygnować z tego kroku przy następnych planowanych posunięciach.
O coś takiego mniej więcej mi chodziło. Na razie robię tak iż zapisuje swoje poczynania do bazy danych, nie ocenia ich, ale przy kolejnej podobnej sytuacji będzie już znać efekt swoich poczynań.

Cytuj
Algorytmów tutaj nie ma. Do szachów napiszesz co innego jak do Command & Conquer. Są co prawda usystematyzowane metody, ale one także potrafią się nie sprawdzić. Po prostu napisz to sam, zastanawiając się dlaczego to co robi komputerowy gracz nie daje rezultatów i dodając kolejne warunki (najprostsza metoda).
rozumiem, w takim razie myślę iż od tego zacznę i zobaczę na ile sobie taki system radzi, a w razie czego będę całość rozbudowywać.

Offline GorskY.exe

  • Użytkownik

# Grudzień 16, 2009, 17:41:40
W jakiejś polskiej książce o siechach neuronowych (bodajże przegląd konkretnych przypadków zastosowania i efektów - w różnych dziedzinach) był całkiem niezły przykład zastosowania wielowarstwowej sieci neuronowej z propagacją wsteczną.

Autor stworzył prościutką "gierkę" polegającą na trafianiu czołgiem w cel (pozycja czołgu i celu losowana, sterowaniem było - o ile pamiętam - kąt lufy i siła strzału - takie uproszczone scorched earth). Dane uczące zbierał też metodą losową :P Losowanie kąta lufy i siły strzału i symulacja (przy wyłączonym renderowaniu grafiki), czy trafi w cel. Jak trafi - siup do wora z danymi uczącymi (razem z pozycjami czołgu i celu). Jak nie - do kosza, nowe losowanie, i tak w kółko. Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą ;)

Offline rm-f

  • Użytkownik
    • Tu trolluje

# Grudzień 16, 2009, 17:47:06
Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą ;)
Racja, ale ten przykład jest nietrafione... szybciej jest napisać algorytm. :)

Offline Khaine

  • Użytkownik

# Grudzień 16, 2009, 18:57:06
Cytuj
W jakiejś polskiej książce o siechach neuronowych (bodajże przegląd konkretnych przypadków zastosowania i efektów - w różnych dziedzinach) był całkiem niezły przykład zastosowania wielowarstwowej sieci neuronowej z propagacją wsteczną.

Autor stworzył prościutką "gierkę" polegającą na trafianiu czołgiem w cel (pozycja czołgu i celu losowana, sterowaniem było - o ile pamiętam - kąt lufy i siła strzału - takie uproszczone scorched earth). Dane uczące zbierał też metodą losową Tongue Losowanie kąta lufy i siły strzału i symulacja (przy wyłączonym renderowaniu grafiki), czy trafi w cel. Jak trafi - siup do wora z danymi uczącymi (razem z pozycjami czołgu i celu). Jak nie - do kosza, nowe losowanie, i tak w kółko. Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą Wink
Tez napisalem taka 'gre', z tym, ze moja siec uczyla sie znacznie szybciej. Po kilku rundach siec strzelala bezblednie. Wszystko zalezy od wspolczynnika uczenia. A jesli chodzi o zmienne zachowanie srodowiska to naturalnym jest, ze siec zglupieje, gdyz beda nowe-inne dane wejsciowe. Wtedy bedzie musiala sie uczyc od nowa. Tylko, ze moze byc cieko napisac siec, ktora ma rozne dane wejsciowe. Jesli juz to rone sieci.

Cytuj
Podobno noc na średnim komputerze wystarczyła żeby zebrać dane uczące do nauczenia sieci z 90% celnością. Wada - jak zmienisz lekko zachowanie środowiska (np. wzór na trajektorię pocisku, dodasz wiatr, etc.), to sieć może stać się inwalidą Wink
Racja, ale ten przykład jest nietrafione... szybciej jest napisać algorytm. Smiley
A od kiedy siec neuronowa to nie jest algorytm?
Poza tym jest to dobry przyklad, a w zasadzie punkt zaczepienia, dla kogos kto chce sie zapoznac z sieciami neuronowymi w grach.