Solver token handling fixes, formatting tweaks

This commit is contained in:
Asriel Camora
2023-07-21 15:51:52 +04:00
parent 807e0838a2
commit 8c73796b75
2 changed files with 14 additions and 10 deletions
+1 -1
View File
@@ -82,7 +82,7 @@ public sealed class Simulator : SimulatorNoRandom
if (strict) if (strict)
{ {
// always used Trained Eye if it's available // always use Trained Eye if it's available
if (action == ActionType.TrainedEye) if (action == ActionType.TrainedEye)
return baseAction.CanUse(this); return baseAction.CanUse(this);
+11 -7
View File
@@ -350,23 +350,24 @@ public sealed class Solver
break; break;
var s = Stopwatch.StartNew(); var s = Stopwatch.StartNew();
var tasks = new List<Task<(float MaxScore, int FurcatedActionIdx, SolverSolution Solution)>>(config.ForkCount); var tasks = new Task<(float MaxScore, int FurcatedActionIdx, SolverSolution Solution)>[config.ForkCount];
for (var i = 0; i < config.ForkCount; i++) for (var i = 0; i < config.ForkCount; i++)
{ {
var stateIdx = (int)((float)i / config.ForkCount * activeStates.Count); var stateIdx = (int)((float)i / config.ForkCount * activeStates.Count);
var st = activeStates[stateIdx]; var st = activeStates[stateIdx];
tasks.Add( tasks[i] = Task.Run(() =>
Task.Run(() =>
{ {
var solver = new Solver(config, activeStates[stateIdx].State); var solver = new Solver(config, activeStates[stateIdx].State);
solver.Search(config.Iterations / config.ForkCount, token); solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, stateIdx, solver.Solution()); return (solver.MaxScore, stateIdx, solver.Solution());
}, token) }, token);
);
} }
Task.WaitAll(tasks.ToArray(), CancellationToken.None); Task.WaitAll(tasks, token);
s.Stop(); s.Stop();
if (token.IsCancellationRequested)
break;
var bestActions = tasks.Select(t => t.Result).OrderByDescending(r => r.MaxScore).Take(config.FurcatedActionCount).ToArray(); var bestActions = tasks.Select(t => t.Result).OrderByDescending(r => r.MaxScore).Take(config.FurcatedActionCount).ToArray();
var bestAction = bestActions[0]; var bestAction = bestActions[0];
@@ -469,9 +470,12 @@ public sealed class Solver
solver.Search(config.Iterations / config.ForkCount, token); solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, solver.Solution()); return (solver.MaxScore, solver.Solution());
}, token); }, token);
Task.WaitAll(tasks, CancellationToken.None); Task.WaitAll(tasks, token);
s.Stop(); s.Stop();
if (token.IsCancellationRequested)
break;
var (maxScore, solution) = tasks.Select(t => t.Result).MaxBy(r => r.MaxScore); var (maxScore, solution) = tasks.Select(t => t.Result).MaxBy(r => r.MaxScore);
if (maxScore >= config.ScoreStorageThreshold) if (maxScore >= config.ScoreStorageThreshold)