// ========================================== 闲置函数 ========================================== /// <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); }
/// <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); } }
readonly int N_SIMULATION_TIMES = 10000; // 博弈树的节点数 public MCTS(MCTSGameState gameState, int nSimulationTimes) { root = new Node(LevelType.Computer, gameState, null); N_SIMULATION_TIMES = nSimulationTimes; }
public Node(LevelType levelType, MCTSGameState gameState, Node parent) { this.levelType = levelType; this.parent = parent; this.gameState = gameState; }