Esempio n. 1
0
    public MonteCarloNode(MonteCarloNode _newNode)
    {
        this._children = new List <MonteCarloNode>();

        this._state = new MonteCarloState(_newNode.GetState());

        if (_newNode.GetParent() != null)
        {
            this._parent = _newNode.GetParent();
        }

        List <MonteCarloNode> _nodeChildren = _newNode.GetChildren();

        foreach (MonteCarloNode _child in _nodeChildren)
        {
            this._children.Add(new MonteCarloNode(_child));
        }
    }
Esempio n. 2
0
    //function used to perform simulation of the MCTS cycle
    private int Simulation(MonteCarloNode _nodeToSimulate)
    {
        //sets the turn number to the enemy value, so that the simulation begins within the right turn
        int _turn = MonteCarloBoard._enemyVal;

        //creates a temporary node, setting the values to that of the node to simulate
        MonteCarloNode _tempNode = new MonteCarloNode(_nodeToSimulate);

        //creates a tempporary state, setting the values to that of the temporary node's state
        MonteCarloState _tempState = _tempNode.GetState();

        //checks for the current board status of the temporary node
        int _boardStatus = _tempState.GetBoard().CheckStatus();

        //checks if the current board state produces a win for the player
        if (_boardStatus == MonteCarloBoard._playerVal)
        {
            //sets the score of the temp node's parent's state to the minimum integer value
            _tempNode.GetParent().GetState().SetScore(int.MinValue);

            //returns the board status value
            return(_boardStatus);
        }

        //loops while the board state is in progress
        while (_boardStatus == MonteCarloBoard._inProgress)
        {
            //changes the turn between the player and the enemy
            _turn = 3 - _turn;

            //performs a random play from the current tempstate
            _tempState.randomPlay(_turn);

            //sets the board status to the current board state of the temp state board
            _boardStatus = _tempState.GetBoard().CheckStatus();
        }

        //returns the board status value
        return(_boardStatus);
    }
    //function that returns all legal states available for current action
    public List <MonteCarloState> GetLegalStates()
    {
        //creates a list to store the legal states
        List <MonteCarloState> _legalStates = new List <MonteCarloState>();

        //creates a list to store all legal positions and stores it with all legal positions returned from a function
        List <MonteCarloPosition> _legalPositions = this._board.GetLegalPositions(MonteCarloBoard._enemyVal);

        //loops through each position in the legal positions list
        foreach (MonteCarloPosition _p in _legalPositions)
        {
            //creates a new state with the current board
            MonteCarloState _newState = new MonteCarloState(this._board);

            //performs the enemy action within the new state
            _newState.GetBoard().performEnemyMove(_p);

            //adds the new state to the list of legal states
            _legalStates.Add(_newState);
        }

        return(_legalStates);
    }
Esempio n. 4
0
 public MonteCarloNode(MonteCarloState _newState)
 {
     this._state = _newState;
     _children   = new List <MonteCarloNode>();
 }
Esempio n. 5
0
 //class constructors
 public MonteCarloNode()
 {
     this._state = new MonteCarloState();
     _children   = new List <MonteCarloNode>();
 }
Esempio n. 6
0
 public void SetState(MonteCarloState _newState)
 {
     this._state = _newState;
 }
 public MonteCarloState(MonteCarloState _state)
 {
     this._board  = new MonteCarloBoard(_state.GetBoard());
     this._visits = _state.GetVisits();
     this._score  = _state.GetScore();
 }