poniedziałek, 30 kwietnia 2018

niedziela, 8 kwietnia 2018

Aktualizacja 0.26.0

Nową wersję gry można pobrać pod tym adresem:
https://drive.google.com/open?id=0B_YKEPym2wKDVGJKZk9Vb0pPVk0

Zasady gry można znaleźć pod adresem:
http://tokenbattle.blogspot.com/2016/07/zasady-gry.html

Nowości

- 6 nowych wyzwań.

Zmiany w balansie




Po wprowadzeniu zmiany w działaniu jednej z umiejętności przejmującej żetony przeciwnika doprowadzono do tego, że w grze istniały karty o dosyć niskim ryzyku zagrania (bardzo często poprawiały nasz bilans o co najmniej 4 punkty), które zostawiały na planszy żeton o wartości 2 który generował punkty przeciwnikowi. W rezultacie często mogliśmy przemienić taki żeton, czyli otrzymywaliśmy sposobność wykonania zagrania, które poprawiało nasz bilans przyrostu punktów o 7 (przeciwnik generował o 2 punkty mniej, my o 2x2 więcej i jeszcze otrzymywaliśmy zagrany żeton). Problem był o tyle problematyczny, że idealnym kontr-zagranie na to zagranie jest właśnie identyczne zagranie (czyli przejęcie złotego żetonu), co doprowadzało do monotonnej rozgrywki.

Nowe karty




Żeton ten sprawia, ze żetony zagrywane przez nas w pobliżu tego żetonu maja wartość zwiększaną o 1, ale w zamian wartość tego żetonu spada o 1. Można to interpretować jako przekazanie po 1 pkt. wartości z tego żetonu do następnych, czyli suma naszych wartości sie nie zmienia. Z drugiej strony jeśli będziemy potem zagrywać wartościowe żetony, to będą one trudniejsze do zniszczenia, co może zwiększyć ich skuteczność. Wadą tego żetonu jest fakt, ze nie warto zagrywać w jego pobliżu niektórych zetonów z negatywnymi efektami, ponieważ wtedy uzyskujemy odwrotny rezultat.


Umiejętność ta sprawia, że jeśli tylko jedno pole będące celem jest puste, to na tym polu powstaje kopia zagranego żetonu. Wchodzi to w dobra synergie z kartami, które zwiększają wartość następnego zagranego żetonu, ponieważ wtedy zwiekszona jest także wartość kopii.

niedziela, 1 kwietnia 2018

Sieci neuronowe w rozwiniętej grze.

Następna wersja gry pojawi się w następnym tygodniu.

Jakiś czas temu pisałem o walkach sztucznej inteligencji przeciwko sztucznej inteligencji i o tym jak wspomagają proces tworzenia gry:
http://tokenbattle.blogspot.com/2017/08/ai-vs-ai-i-statystyki.html

Myślę że minęło wystarczająco dużo czasu aby do tematu powrócić i go rozwinąć.

Sieć neuronowa


W zwykłej sieci neuronowej zasady jest proste: na początku zbierane są dane testowe, a potem tworzony jest graf, którego poszczególne krawędzie mają analizować odpowiadające im informacje z danych testowych. Taki graf jest wypełniany losowymi lub określonymi wagami, a następnie dane testowe są przez niego przepuszczane. Z każdą iteracją wagi grafu są losowo lekko modyfikowane i sprawdzane jest, czy taka zmodyfikowana sieć lepiej przewiduje wyniki. Jeśli tak, to loswe zmiany są zapisywane, w przeciwnym razie przywracane są poprzednie wartości.

 Ale jest parę rzeczy które mój algorytm odróżnia od typowych sieci neuronowych. Po pierwsze - wynik nie jest określany na podstawie sieci neuronowej, lecz na podstawie wyniku AI vs AI. Co więcej: to dane testowe są dobierane losowo, wykorzystując dane z sieci neuronowej, a nie na odwrót. Można by rzecz, że jest to taka odwrócona sięc neuronowa, ale w gruncie rzeczy główna myśl jest taka sama: utworzyć grafy danych które będą ciągle modyfikowały same siebie w sposób lekko losowy do momentu aż uzyska się satysfakcjonujące wyniki.

Nie jestem więc pewny, czy nazywanie mojego tworu siecią neuronową jest poprawne, ale póki co będę go tak nazywał.


Cykliczna siła kart



Cykliczne zmiany w sile kart następują wtedy, gdy jakaś strategia jest bardzo silna, ale istnieje do niej mocna kontr-strategia. W takiej sytuacji taka silna strategia najpierw zyskuje na popularności, a gdy stanie się wystarczająco popularna zwiększa się siła jej kontr-strategii, co zmniejsza siłę i popularność kontrowanej strategii, a gdy kontrowana strategia przestaje być grana, kontr-strategia także zaczyna tracić na popularności. Gdy obie strategie przestaną być popularne, silna strategia znowu zaczyna być doceniana przez AI i koło się zatacza.

Świadomość takiej cykliczności jest bardzo ważna, ponieważ dzięki niej wiadomo, że nie można oceniać siły kart na podstawie samego wyniku końcowego - wyniki z sieci neuronowej powinny być przeglądane w miarę regularnie. Jeśli na wyniki spojrzymy w nieodpowiednim momencie może się okazać, że strategia którą uznaliśmy za zbyt silną okałaby się słaba po lekkim przesunięciu cyklu, a osłabienie przez nas tej strategii pogłębiłoby ten efekt.

Samo regularne przeglądanie danych nie rozwiązuje problemu. Może się bowiem okazać, że dane będą przez nas analizowane co pełen cykl. Innymi słowy może się okazać, że strategie które przy każdej naszej analizie uznajemy za zbyt silne w rzeczywistości są silne tylko przez 20% czasu.

Większa liczba kart



Liczba kart dostępnych w grze zwiększa się z każdą aktualizacją. Im więcej kart, tym więcej różnych zestawów kart można ułożyć. Przekłada się to na to, że AI musi przetestować większą liczbę opcji aby dać rzetelny wynik na temat tego, czy dana karta jest odpowiednio mocna. Gdy kart było niewiele, po paru godzinach widoczna już była przybliżona siła kart, a po paru dniach wyniki były raczej ustabilizowane, chyba że siła kart zmieniała się cyklicznie.

Obecnie liczba kart jest na tyle duża, że nawet tydzień nie jest wystarczająco długim czasem na ustabilizowanie się sieci i ten stan jest teraz czymś, do czego mogę się jedynie zbliżyć (biorąc pod uwagę tempo wypuszczania nowych kart).

Jeśli jakaś zrównoważona karta wymaga bardzo dużego zgrania z innymi kartami aby była skuteczna, to sieć przeważnie tego nie wyłapuje, bo po prostu działa za wolno. Czy to oznacza, że sieć neuronowa stała się bezużyteczna? Nie. Jeśli jakaś karta jest mocna i jednocześnie uniwersalna, to sieć neuronowa relatywnie szybko wskazuje jej dużą siłą i informację o tym mamy już po godzinie lub kilku. Jeśli zaś karta jest mocna ale wymaga synergii do działania, to zwykle zostaje to wyłapane po kilku godzinach, choć czasem trzeba na to czekać tydzień.

Warto też dodać że liczba kart nie tylko zwiększa liczbę możliwych do utworzenia zestawów kart, ale także zwiększa ilość informacji które AI powinno sprawdzać w trakcie gry wykonując ruch. Przykładowo jeśli nowy żeton wchodzi w interakcję z pobliskimi żetonami, AI w każdym swoim ruchu musi zacząć sprawdzać czy taka interakcja istnieje.

Dlaczego sieć wyłapuje synergie?



Zwykle gdy do sieci zostają wpuszczone nowe karty, muszą one się mierzyć ze strategiami które są bardzo dopracowane. AI potrafi określić jakie stare karty dobrze współpracują z innymi starymi kartami, więc talie są naprawdę zgrane. Niestety AI nie posiada takich informacji o nowych kartach, więc dobiera je w niemal całkowicie losowy sposób. Sprawia to, że nowe karty bardzo szybko zyskują niskie win ratio, nawet jeśli kilka kart z losowych zestawów było całkiem nieźle zgranych.

Więc po co to komu? Nawet jeśli nowe karty przegrywają większość gier, to niektóre pary kart będą miały mniejsze win ratio niż pozostałe. Powiedzmy że jedna para kart ma 46% win ratio, a inna 47%. Obie są słabe, ale ta drobna różnica sprawia, że słabsza para będzie wybierana rzadziej. Z biegiem czasu coraz więcej par kart jest niemal ignorowanych, co sprawia że pozostałe są wybierane częściej. Po pewnym czasie nowe karty będą dobierane głównie do kart które się z nimi zgrywają, a wtedy ich win ratio nie będzie już spadać i może nawet wzrośnie.

Dosyć często się zdarza, że win ratio nowych kart najpierw spada do 40%. a potem wzrasta aż do 53% i później utrzymuje się już na tym poziomie.


Uszkodzenia sieci neuronowych

Jeśli jakaś karta jest bardzo mocna, zaczyna dominować i wymusza zagrywanie kontr-synergii i doprowadza do cyklicznych zmian sił. Gorzej jest gdy jakaś karta okaże się absurdalnie mocna - wtedy jest na tyle silna, że nawet jeśli może być skontrowana przez popularną strategię to warto ją mieć na wypadek gdyby przeciwnik kontry nie posiadał. To sprawia, że ani ta silna strategia ani jej kontra nie tracą na popularności, czyli nie zachodzi cykl.

Brak cyklu jest tutaj zgubny, ponieważ niektóre karty zaczynają przegrywać zbyt często do tego stopnia, że nawet synergie między nimi zostają uznawane za zbyt słabe aby w ogóle brać takie karty do gry. O ile odrzucenie najsłabszych par ma pozytywny wpływ na sieć neuronową, to odrzucenie najlepszych par kompletnie niszczy użyteczność jej fragmentów. Zniszczenia które mogą nastąpić w parę godzin mogą być potem naprawiane kilka razy dłużej, a czasem nawet mogą minąć tygodnie lub miesiące nim do tego dojdzie.

Po zauważeniu takich zniszczeń trzeba zrozumieć ich przyczynę i odpowiednio zmodyfikować grę, np. poprzez osłabienie lub usunięcie tych kart. Ale zniszczenia pozostają. Aby im zapobiec warto jest robić backup'y. Nawet jeśli cofając się o kilka godzin bezpowrotnie tracimy ten czas, to ostatecznie zyskujemy tym, że nie będziemy musieli tracić większej ilości czasu na naprawienie tego błędu.

Sieć neuronową można też próbować naprawiać ręcznie, ale różne karty często potrzebują indywidualnego podejścia do ich naprawy. Przykładowo możemy zwiększyć win ratio każdej synergii danej karty o 3 punkty procentowe, ale jeśli ta karta współgra dobrze tylko z kilkoma kartami, to sprawimy że będzie częściej grana z kartami z którymi się nie zgrywa, czyli w rzeczywistości jedynie pogorszymy sytuację zamiast ją naprawić.