예제 #1
0
    // ========================================== 闲置函数 ==========================================
    /// <summary>
    /// 从当前游戏状态出发,向前模拟一步,并将带有新状态的节点作为当前节点的子节点
    /// </summary>
    public void expand()
    {
        if (!existsUnexpandedChild())
        {
            return;
        }
        MCTSGameState stateOfChild = gameState.expand(getChildrenGameStates());
        LevelType     typeOfChild  = levelType == LevelType.Computer ? LevelType.Player : LevelType.Computer;
        Node          child        = new Node(typeOfChild, stateOfChild, this);

        children.Add(child);
    }
예제 #2
0
 /// <summary>
 /// 扩展传入节点
 /// </summary>
 /// <param name="node">待扩展节点</param>
 /// <returns>扩展成功返回子节点;若不存在未扩展子节点,或已经是终局节点,则返回null</returns>
 static Node expand(Node node)
 {
     if (node.existsUnexpandedChild())
     {
         MCTSGameState stateOfChild = node.gameState.expand(node.getChildrenGameStates());
         LevelType     typeOfChild  = node.getLevelType() == LevelType.Computer ? LevelType.Player : LevelType.Computer;
         Node          child        = new Node(typeOfChild, stateOfChild, node);
         node.appendChild(child);
         return(child);
     }
     else
     {
         return(null);
     }
 }
예제 #3
0
    readonly int N_SIMULATION_TIMES = 10000; // 博弈树的节点数

    public MCTS(MCTSGameState gameState, int nSimulationTimes)
    {
        root = new Node(LevelType.Computer, gameState, null);
        N_SIMULATION_TIMES = nSimulationTimes;
    }
예제 #4
0
 public Node(LevelType levelType, MCTSGameState gameState, Node parent)
 {
     this.levelType = levelType;
     this.parent    = parent;
     this.gameState = gameState;
 }