package monteCarlo.gvg; import core.game.StateObservation; import monteCarlo.core.StateSpace; import ontology.Types; import java.util.ArrayList; import java.util.List; import java.util.Random; public class GVG_StateSpace extends StateSpace { private StateObservation state; private Random random = new Random(); private GVG_StateSpace(StateObservation state, Types.ACTIONS action, GVG_StateSpace parent) { this.action = action; this.state = state; this.parent = parent; if (parent != null) this.timeout = parent.timeout;​ } public GVG_StateSpace(StateObservation stateObs, Types.ACTIONS actions) { this(stateObs, actions, null); } @Override public boolean gameEnd() { // pobierz informację ze StateObservation } @Override public List getActions() { // pobierz informację ze StateObservation } @Override public StateSpace makeSpace(Types.ACTIONS action) { // stwórz kopię obecnego stanu gry // na kopię nanieś akcję // zwróć nową instancję GVG_StateSpace ze sotwrzoną kopią i akcją z argumentu ​i `this` jako rodzicem } @Override public double sim() { // zwróć wynik głębokiej symulacji na kopii obecnego stanu, np dla 7 zagłębień } private double deepSim(StateObservation copy, int depth) { // jeżeli czas się zakończył lub osiągnięto stan końca gry lub zagłębiono się wystarczająco // pobierz wynik gry // pobierz zwycięzcę // gdy jest nim gracz, to zwiększ wynik o dużą wartość // jeśli gracz jest przegrywem, zmniejsz wynik o dużą wartość // jeśli gracz zdyskwalifikowany, to zmniejsz wynik o dużą, dużą wartość (nielegalny ruch) // zwróć uzyskany wynik // w innym przypadku // pobierz dostępne akcje // wylosuj następną i zaaplikuj na stanie gry // wykonaj symulację na zaaplikowanym stanie dla zmniejszonego licznika zagłębienia } }