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) }); }
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)); }