Пример #1
0
//	public void MCTS(int playerTurn, SkyNetNode prevNode){
//		IBoard board = localGame.getBoard();
//		int ind = 0;
//		bool expanding = true;
//		while(expanding){
//
//			string[][] bString = localGame.getBoardAsString (board, playerTurn);
//			string bHash = hashAndSlasher.HashIt (bString);
//
//			List<GameMove> availMoves = localGame.getAllPlayerMoves (board, playerTurn);
//
//			if (!shortTermMemory.ContainsKey (bHash)) {
//				shortTermMemory.Add (bHash, new List<SkyNetNode> ());
//			}
//
//			List<SkyNetNode> movesInMem = shortTermMemory[bHash];
//			GameMove selected = availMoves [ind];
//			SkyNetNode selectAsNode = new SkyNetNode (selected, prevNode, playerTurn, false);
//			int memInd = movesInMem.IndexOf (selectAsNode);
//			if (memInd != -1) { // We've done this move from this state before
//				selectAsNode = movesInMem[memInd];
//				selectAsNode.prevNode = prevNode;
//			} else {
//				movesInMem.Add (selectAsNode);
//			}
//			selectAsNode.incVisit ();
//
//			board = mockMove (board, selectAsNode);
//			if (!CheckTerminalNode (board)) {
//
//			} else {
//				expanding = false;
//				backpropWin (selectAsNode);
//			}
//		}
//	}

    private void MCTSExpand(SkyNetNode curNode)
    {
        Console.WriteLine("ENTERING MCTS EXPANSION");
        bool            playerOne        = !curNode.playerOne;
        List <GameMove> availMoves       = localGame.getAllPlayerMoves(localBoard, playerOne);
        int             cnt              = availMoves.Count;
        string          hash             = hashAndSlasher.HashIt(localGame.getBoardAsString(localBoard, playerOne));
        bool            curBoardTerminal = CheckTerminalNode(localBoard);

        if (cnt > 0 && !curBoardTerminal)
        {
            curNode.children = new List <SkyNetNode>();
            for (int i = 0; i < cnt; i++)
            {
                curNode.children.Add(new SkyNetNode(availMoves [i], curNode, playerOne, hash));
                Console.WriteLine(String.Format("Added new Child Node at Index: {1}{2}", i.ToString(), curNode.children[i].ToString()));
            }
        }
        else
        {
            Console.WriteLine(String.Format("Found Terminal Node {1}", curNode.ToString()));
            curNode.setTerminalFlag(true);
        }
        Console.WriteLine("EXITING MCTS EXPANSION");
    }
Пример #2
0
 public MCTSkyNet(IGame game, bool playerOne)
 {
     hashAndSlasher  = ZobristKiller.GetTheKiller();
     shortTermMemory = new Dictionary <string, List <SkyNetNode> > ();
     localBoard      = game.getBoard();
     localBString    = game.getBoardAsString(localBoard, playerOne);
     rootNode        = new SkyNetNode(hashAndSlasher.HashIt(localBString), playerOne);
 }