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)
{
// always used Trained Eye if it's available
// always use Trained Eye if it's available
if (action == ActionType.TrainedEye)
return baseAction.CanUse(this);
+13 -9
View File
@@ -283,7 +283,7 @@ public sealed class Solver
}
else
{
for(var i = 0; i < node.Children.Count; ++i)
for (var i = 0; i < node.Children.Count; ++i)
{
var n = node.ChildAt((i >> 3, i & 7))!;
if (NodesIncomplete(n, path))
@@ -350,23 +350,24 @@ public sealed class Solver
break;
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++)
{
var stateIdx = (int)((float)i / config.ForkCount * activeStates.Count);
var st = activeStates[stateIdx];
tasks.Add(
Task.Run(() =>
tasks[i] = Task.Run(() =>
{
var solver = new Solver(config, activeStates[stateIdx].State);
solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, stateIdx, solver.Solution());
}, token)
);
}, token);
}
Task.WaitAll(tasks.ToArray(), CancellationToken.None);
Task.WaitAll(tasks, token);
s.Stop();
if (token.IsCancellationRequested)
break;
var bestActions = tasks.Select(t => t.Result).OrderByDescending(r => r.MaxScore).Take(config.FurcatedActionCount).ToArray();
var bestAction = bestActions[0];
@@ -403,7 +404,7 @@ public sealed class Solver
var definiteCount = definiteActionCount;
var equalCount = int.MaxValue;
var refActions = newStates[0].Actions;
for(var i = 1; i < newStates.Count; ++i)
for (var i = 1; i < newStates.Count; ++i)
{
var cmpActions = newStates[i].Actions;
var possibleCount = Math.Min(Math.Min(refActions.Count, cmpActions.Count), equalCount);
@@ -469,9 +470,12 @@ public sealed class Solver
solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, solver.Solution());
}, token);
Task.WaitAll(tasks, CancellationToken.None);
Task.WaitAll(tasks, token);
s.Stop();
if (token.IsCancellationRequested)
break;
var (maxScore, solution) = tasks.Select(t => t.Result).MaxBy(r => r.MaxScore);
if (maxScore >= config.ScoreStorageThreshold)