Solver token handling fixes, formatting tweaks
This commit is contained in:
@@ -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);
|
||||||
|
|
||||||
|
|||||||
+13
-9
@@ -283,7 +283,7 @@ public sealed class Solver
|
|||||||
}
|
}
|
||||||
else
|
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))!;
|
var n = node.ChildAt((i >> 3, i & 7))!;
|
||||||
if (NodesIncomplete(n, path))
|
if (NodesIncomplete(n, path))
|
||||||
@@ -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];
|
||||||
@@ -403,7 +404,7 @@ public sealed class Solver
|
|||||||
var definiteCount = definiteActionCount;
|
var definiteCount = definiteActionCount;
|
||||||
var equalCount = int.MaxValue;
|
var equalCount = int.MaxValue;
|
||||||
var refActions = newStates[0].Actions;
|
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 cmpActions = newStates[i].Actions;
|
||||||
var possibleCount = Math.Min(Math.Min(refActions.Count, cmpActions.Count), equalCount);
|
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);
|
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)
|
||||||
|
|||||||
Reference in New Issue
Block a user