예제 #1
0
        static void Simulate()
        {
            var heuristic = new GaHeuristic(-0.317854214844296, -0.548457056926845, -0.434173510009484, -0.640044465657585);
            //var heuristic = new YiyuanLeeHeuristic();
            //var heuristic = new ElTetrisHeuristic();
            //var heuristic = new ExperimentalHeuristic();
            //var heuristic = new MaxBergmarkHeuristic();

            var tetrisSearch = new TwoPieceSearch(heuristic);

            //var tetrisSearch = new OnePieceSearch(heuristic);
            //var tetrisSearch = new PredictiveSearch(heuristic);
            //tetrisSearch.Cache = true;
            //var tetrisSearch = new RecursiveSearch(heuristic);
            //tetrisSearch.Depth = 3;

            for (int i = 0; i < _games; i++)
            {
                Console.WriteLine($"Game {i + 1}");

                var tetrisSimulator = new TetrisSimulator();
                var engine          = new SimulatorEngine(tetrisSearch, tetrisSimulator);
                engine.FrameUpdateDelay = 1;
                engine.PauseTime        = 0;
                engine.Multiplayer      = false;
                //engine.MaxHeight = 10;
                engine.Render = false;

                engine.Run();
            }
        }
예제 #2
0
        public double EvaluateFitness(Chromosome chromosome)
        {
            var p1 = chromosome.Genes[0].RealValue;
            var p2 = chromosome.Genes[1].RealValue;
            var p3 = chromosome.Genes[2].RealValue;
            var p4 = chromosome.Genes[3].RealValue;

            var heuristic = new GaHeuristic(p1, p2, p3, p4);
            var search    = new TwoPieceSearch(heuristic);
            var lines     = SimulateAvg(search, _games, _pieces);

            return(System.Math.Min((1.0 + lines) / 1000000.0, 1.0));
        }