Autor Wątek: AI, a jak to się robi?  (Przeczytany 3564 razy)

Offline Kuba Z

  • Użytkownik

# Listopad 07, 2009, 16:52:59
Witam,
Mam taki całkiem spory problem, otóż pracuję nad komputerową wersją gry "super farmer", którą chciałbym wzbogacić o możliwość gry z komputerowym przeciwnikiem. Niestety nie mam pojęcia jak mógłbym zaimplementować AI, myślałem co prawda nad metodą logiki rozmytej.
W grze chodzi o to że sześciu graczy rzuca 12 bocznymi kośćmi i w zależności od wyników owych rzutów dostają oni zwierzątka do swoich stad. W grze możliwa jest jeszcze wymiana ze stadem głównym. Wygrywa natomiast ten, który pierwszy uzbiera wszystkie z 5 rodzai zwierzątek, które różnią się wartością i stopniem skomplikowania z jakim je można zdobyć- jedne występują na kostkach rzadzej inne częściej. Jeśli ktoś ma jakieś sugestie proszę się nimi podzielić.

Offline Mr. Spam

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

Offline Liosan

  • Moderator

# Listopad 07, 2009, 17:14:29
Monte Carlo :)

Liosan

Offline lethern

  • Użytkownik

# Listopad 07, 2009, 18:02:30
jeśli masz "umysł analityczny", to może uda Ci się z tym:
Spróbuj sam siebie zapytać, co zrobić żeby tę grę wygrąc. Jakie kroki podejmowac, jakie decyzje, ogólnie algorytm którym kieruje się człowiek. Od tego możesz dojść do AI

Offline Liosan

  • Moderator

# Listopad 07, 2009, 18:34:46
Jeśli masz umysł analityczny, to zbuduj sieć Bayessowską. Pasuje jak ulał (ale więcej myślenia niż MC).

Liosan

Offline englu

  • Użytkownik

# Listopad 07, 2009, 19:06:02
Tu nie potrzeba żadnego skomplikowanego AI. Wystarczy kilka prostych reguł, np: jak tylko to możliwe to wymieniaj posiadane zwierzęta na te, których nie masz, ale tak żeby ci zostało przynajmniej jedno, z tych które zamieniasz. I to w sumie wystarczy na początek. Potem możesz dodać czy gracz komputerowy jest ostrożny (wtedy wymieniasz najpierw na psa, zamiast coś innego) albo ryzykujący (wtedy nie wymieniasz w ogóle na psy).
Komputerową wersję gry bez AI znajdziesz tu: http://wierzba.wzks.uj.edu.pl/~bukiel/farmer/cgi-bin/farmer.cgi

Offline Kuba Z

  • Użytkownik

# Listopad 07, 2009, 19:48:20
No dobrze ale takie wymienianie za wszelką cenę nie jest chyba najlepszym rozwiązaniem? A ja chciałbym osiągnąć możliwie jak najlepsze.
Chce by program rozważał szereg możliwości i wybierał faktycznie najlepszą z nich.

Offline Liosan

  • Moderator

# Listopad 07, 2009, 20:04:28
Podałem Ci dwa różne podejścia... co jeszcze Ci potrzeba? :)

Liosan

Offline MadBonsai

  • Użytkownik
    • Ifrit

# Listopad 07, 2009, 20:07:55
Spróbuj na początek zaimplementować MiniMax z obcinaniem Alfa-Beta w grze... kółko i krzyżyk. Pojęcia nie mam, czy pasuje do tego projektu, ale nabędziesz nieco praktycznej wiedzy ;) Jeśli masz czas na takie rozkminki oczywiście ;)
Jeśli zależności są rzeczywiście skomplikowane, to może się nie sprawdzić.

Offline Liosan

  • Moderator

# Listopad 07, 2009, 20:45:23
Spróbuj na początek zaimplementować MiniMax z obcinaniem Alfa-Beta w grze... kółko i krzyżyk. Pojęcia nie mam, czy pasuje do tego projektu...
Rozpisywanie drzewa mini-max w grach losowych wymaga wprowadzenia "trzeciego gracza" - losu - oraz rozbijania każdego węzła, w którym jest losowa czynność (rzut kostkami) na tyle węzłów, ile jest możliwych wyników (nie mam pojęcia ile, niektóre zwierzaki są po kilka razy, inne tylko na jednej kostce) wraz z odpowiednimi wagami (w tym przypadku rozpisanymi na kartce). Czyli, przy zejściu na drugi (pomijając losowość) poziom (a tu jeszcze a-b nie pomaga :]) liczba potencjalnych węzłów sięga 1000. Da się z tym żyć, ale Monte Carlo da lepsze wyniki mniejszym kosztem (chyba, że masz naprawdę dobrą funkcję oceny).

Liosan

Offline Liki

  • Użytkownik

# Listopad 18, 2009, 00:36:24
Grając samemu w tę grę też stosujesz pewien algorytm, który nie jest jakoś specjalnie złożony. Spróbuj zbudować AI stopniowo. W końcu i tak będziesz potrzebował różne poziomy trudności od bardzo łatwego poprzez średni po bardzo trudny.
Zacznij od tego, żeby komputer wymieniał zwierzęta na te, których mu brakuje do zwycięstwa. Po pewnej liczbie tur komputer powinien wygrać, o ile drugi gracz nie będzie nic robił.
Możesz rozbudować to tak, żeby inwestował w króliki, jeśli ma małego psa, lub w wyższe zwierzęta, jeśli ma dużego. Jeśli to możliwe, powinien dokonać wymiany zwierząt na konia. Z tego co policzyłem 2 konie = wygrana, bo 1 konia można wymienić na wszystkie pozostałe. 2 konie = 192 króliki, ale to zdecydowanie za dużo do zwycięstwa, wystarczy 163 króliki, ale należy brać pod uwagę to, że ilość zwierząt w stadzie jest ograniczona i zawsze trzeba wymieniać na to czego jest dużo w stadzie, żeby ewentualne "rozmnożenie" było pełne (tzn. w stadzie było więcej zwierząt danego typu niż otrzymamy po wylosowaniu ich na 2 kostkach).

Oczywiście należy wziąć pod uwagę jakie stado posiada przeciwnik i ile brakuje mu do zwycięstwa. Jeśli brakuje mu dużo, to niech komputer zbiera stado wolniej, ale ostrożniej, a jeśli gracz jest blisko wygranej, to komputer niech gra agresywniej.

Zawsze można uwzględnić też losowanie kilku rzutów kostek na zapas, żeby algorytm wiedział co go czeka w przyszłości, to jest pewne oszustwo jakby nie patrzeć, ale ułatwia stworzenie AI nie do pokonania.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 18, 2009, 13:45:12
Cytuj
W grze chodzi o to że sześciu graczy rzuca 12 bocznymi kośćmi i w zależności od wyników owych rzutów dostają oni zwierzątka do swoich stad.
Na pewno sześciu i na pewno 12-bocznymi? Z instrukcji wynika, że 2-4 graczy i mam wrażenie, że kostki są 6-ścienne. :)

Cytuj
Jeśli to możliwe, powinien dokonać wymiany zwierząt na konia.
Ja bym raczej powiedział: jeżeli to możliwe, powinien wymieniać na duże psy. W stadzie są tylko dwa, więc jeżeli zgarniesz oba, pozostali gracze będą mieli dość niefajną sytuację z wilkami.

Offline Liosan

  • Moderator

# Listopad 18, 2009, 13:48:56
Cytuj
W grze chodzi o to że sześciu graczy rzuca 12 bocznymi kośćmi i w zależności od wyników owych rzutów dostają oni zwierzątka do swoich stad.
Na pewno sześciu i na pewno 12-bocznymi? Z instrukcji wynika, że 2-4 graczy i mam wrażenie, że kostki są 6-ścienne. :)
E, ja grałem w wersję, gdzie się rzuca 12-ściennymi... zresztą zobacz np tutaj: http://www.superfarmer.pl/o-grze.html

Liosan

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 18, 2009, 13:52:42
E, ja grałem w wersję, gdzie się rzuca 12-ściennymi... zresztą zobacz np tutaj: http://www.superfarmer.pl/o-grze.html
Już po poprzednim poście zdążyłem to zrobić - mój błąd. :)


EDIT: A zapoznając się nieco z samą grą, to mam wrażenie, że inna metoda niż Monte Carlo nie ma wielkiego sensu (chyba że masz na tyle doświadczenia z grą, że jesteś w stanie opracować dobry zestaw heurystyk).
« Ostatnia zmiana: Listopad 18, 2009, 14:00:06 wysłana przez Krzysiek K. »

Offline Kuba Z

  • Użytkownik

# Listopad 18, 2009, 20:40:30
Cytuj
Ja bym raczej powiedział: jeżeli to możliwe, powinien wymieniać na duże psy. W stadzie są tylko dwa, więc jeżeli zgarniesz oba, pozostali gracze będą mieli dość niefajną sytuację z wilkami.
Można mieć tylko jednego dużego psa i jednego małego psa:)
Puki co to kończe jeszcze samą grę i cały czas zastanawiam się nad AI.

Offline Krzysiek K.

  • Redaktor
    • DevKK.net

# Listopad 19, 2009, 00:03:28
Można mieć tylko jednego dużego psa i jednego małego psa:)
Nie widziałem oryginalnych zasad, ale podlinkowana wcześniej wersja online pozwala mieć psów ile się chce. Z drugiej strony psy są jednorazowego użytku (chronią tylko raz). :)