Пример #1
0
        public async Task <Result> Start()
        {
            Routes = new List <Route>();
            for (int i = 0; i < RoundCount; i++)
            {
                //Gen Board
                Board b = new Board();
                b.Random(6, 5, BeadTypes, Rand);
                b.SelectStartX  = 0;
                b.SelectEndX    = b.Width;
                b.SelectStartY  = 0;
                b.SelectEndY    = b.Height;
                b.StepLimit     = 40;
                b.MoveDirection = 4;
                if (TargetScore > 0)
                {
                    b.TargetScore = TargetScore;
                }
                else
                {
                    b.SetMaxTargetScore();
                }
                //Console.WriteLine("Generated Board");
                //Console.WriteLine(b.ToString());
                //Console.WriteLine(b.Dump());

                var solver = Factory.GenSolver();
                solver.ThreadCount     = this.ThreadCount;
                solver.EnableScoreDrop = this.EnableScoreDrop;
                solver.ScoreDropPerSec = this.ScoreDropPerSec;
                var route = await solver.SolveBoard(b);

                //Console.WriteLine(route.ToString());
                //Console.WriteLine(route.Result.Dump(b.Width));

                Routes.Add(route);
            }

            return(new Result()
            {
                SolverName = Factory.solverName,
                RoundCount = this.RoundCount,
                AvgScore = Routes.Select(x => x.Score).Average(),
                AvgTimeMs = Routes.Select(x => x.TimeComsumedMs).Average(),
                AvgIterationPerRoute = Routes.Select(x => x.Iteration).Average(),
                AvgSteps = Routes.Select(x => x.Directions.Count).Average(),
                AvgIterationPerSecond = Routes.Select(x => x.Iteration).Sum() / (Routes.Select(x => x.TimeComsumedMs).Sum() / 1000)
            });
        }
Пример #2
0
        public async Task <ActionResult <string> > Post([FromQuery] string solvername, [FromBody] Board board)
        {
            //var board = JsonConvert.DeserializeObject<Board>(boardjson);
            SolverFactory factory = new SolverFactory(solvername);
            var           solver  = factory.GenSolver();

            solver.ThreadCount     = 6;
            solver.EnableScoreDrop = true;
            solver.ScoreDropPerSec = 200;
            Console.Write("Receive board:");
            Console.WriteLine(board.ToString());
            Console.WriteLine(board.Dump());

            var route = await solver.SolveBoard(board);

            Console.Write("Solved:");
            Console.WriteLine(route.ToString());

            return(JsonConvert.SerializeObject(route));
        }