Пример #1
0
        /// <summary>
        /// Returns the amount of wins the challenger got (from 100)
        /// </summary>
        private static int CalculateChallengerWinsFrom100(IMoveDecisionMaker best, IMoveDecisionMaker challenger)
        {
            int challengerWins = 0;

            Parallel.For(0, 200, (i) =>
            {
                var state          = new SimulationState(SimulationHelpers.GetRandomPieces(i / 2), 0);
                state.ActivePlayer = i % 2;
                state.Fidelity     = SimulationFidelity.NoPiecePlacing;
                //TODO: May need a cheaper placement engine
                var runner = new SimulationRunner(state,
                                                  new PlayerDecisionMaker(best, null),
                                                  new PlayerDecisionMaker(challenger, null));

                while (!state.GameHasEnded)
                {
                    runner.PerformNextStep();
                }

                if (state.WinningPlayer == 1)
                {
                    Interlocked.Increment(ref challengerWins);
                }
            });

            return(challengerWins);
        }
Пример #2
0
        private void Evaluate()
        {
            Console.WriteLine($"Evaluating vs " + _opp.Name);

            var players = new IMoveDecisionMaker[] { _ai, _opp };

            //Play X games (even amount), each player gets to start on each of the boards once
            for (var game = 0; game < 4; game++)
            {
                var state = new SimulationState(SimulationHelpers.GetRandomPieces(game / 2), 0);
                state.Fidelity     = SimulationFidelity.NoPiecePlacing;
                state.ActivePlayer = game % 2;

                while (!state.GameHasEnded)
                {
                    players[state.ActivePlayer].MakeMove(state);
                }

                Console.WriteLine($"Game {game}. Winner {state.WinningPlayer}. Scores: {state.CalculatePlayerEndGameWorth(0)} / {state.CalculatePlayerEndGameWorth(1)}");
            }
        }
            public void CreateMoveMaker()
            {
                //TODO: Garbage generation here
                var moveMakers = new IMoveDecisionMaker[SimulationState.EndLocation];

                for (var i = 0; i < SimulationState.EndLocation; i++)
                {
                    var offset = i * 8;
                    moveMakers[i] = new TuneableUtilityMoveMaker(
                        Gene[offset + 0],
                        Gene[offset + 1],
                        Gene[offset + 2],
                        Gene[offset + 3],
                        Gene[offset + 4],
                        Gene[offset + 5],
                        Gene[offset + 6],
                        Gene[offset + 7]
                        );
                }
                MoveMaker = new RangeSplitByBoardPositionDelegationMoveMaker(moveMakers);
            }
Пример #4
0
 public MoveOnlyMonteCarloTreeSearchWithPreplacerMoveMaker(int iterations, IMoveDecisionMaker rolloutMoveMaker, PreplacerStrategy preplacer) : base(iterations, rolloutMoveMaker)
 {
     _preplacer = preplacer;
 }
 public MonteCarloTreeSearchPlacementExpander(int iterations, IMoveDecisionMaker rolloutMoveMaker, IBoardEvaluator boardEvaluator, int maxChildrenPerPiece) : base(iterations, rolloutMoveMaker)
 {
     MaxChildrenPerPiece = maxChildrenPerPiece;
     BoardEvaluator      = boardEvaluator;
 }
 public MonteCarloTreeSearchMoveMaker(int iterations, IMoveDecisionMaker rolloutMoveMaker, IBoardEvaluator boardEvaluator, int maxChildrenPerPiece)
 {
     _mcts = new MonteCarloTreeSearchPlacementExpander(iterations, rolloutMoveMaker, boardEvaluator, maxChildrenPerPiece);
 }
 protected BaseMoveOnlyMonteCarloTreeSearchMoveMaker(int iterations, IMoveDecisionMaker rolloutMoveMaker = null)
 {
     Mcts = new MonteCarloTreeSearch <SearchNode>(iterations, rolloutMoveMaker);
 }
 public MoveOnlyMonteCarloTreeSearchMoveMaker(int iterations, IMoveDecisionMaker rolloutMoveMaker = null, bool useMinusOne = false, double progressiveBiasWeight = 0) : base(iterations, rolloutMoveMaker)
 {
     _useMinusOne           = useMinusOne;
     _progressiveBiasWeight = progressiveBiasWeight;
 }
Пример #9
0
 public PlayerDecisionMaker(IMoveDecisionMaker moveDecisionMaker, IPlacementDecisionMaker placementDecisionMaker)
 {
     MoveDecisionMaker      = moveDecisionMaker;
     PlacementDecisionMaker = placementDecisionMaker;
 }
Пример #10
0
 public MonteCarloTreeSearch(int iterations, IMoveDecisionMaker rolloutMoveMaker)
 {
     Iterations       = iterations;
     RolloutMoveMaker = rolloutMoveMaker ?? new RandomMoveMaker(0);
 }