Combo actions for better macro quality

This commit is contained in:
Asriel Camora
2023-07-13 12:08:17 +02:00
parent 49b84e966e
commit 7787ae32d5
11 changed files with 210 additions and 10 deletions
+9
View File
@@ -19,6 +19,10 @@ public sealed class Simulator : SimulatorNoRandom
public static readonly ActionType[] AcceptedActions = new[]
{
ActionType.StandardTouchCombo,
ActionType.AdvancedTouchCombo,
ActionType.FocusedTouchCombo,
ActionType.FocusedSynthesisCombo,
ActionType.TrainedFinesse,
ActionType.PrudentSynthesis,
ActionType.Groundwork,
@@ -101,6 +105,11 @@ public sealed class Simulator : SimulatorNoRandom
CP > 10)
return false;
// don't allow combo actions if the combo is already in progress
if (ActionStates.TouchComboIdx != 0 &&
(action == ActionType.StandardTouchCombo || action == ActionType.AdvancedTouchCombo))
return false;
// don't allow pure quality moves under Veneration
if (HasEffect(EffectType.Veneration) &&
!baseAction.IncreasesProgress &&
+6 -6
View File
@@ -298,7 +298,7 @@ public sealed class Solver
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private void Search(CancellationToken token, int iterations)
private void Search(int iterations, CancellationToken token)
{
Simulator simulator = new(rootNode.State.State, config.MaxStepCount);
var random = rootNode.State.State.Input.Random;
@@ -360,7 +360,7 @@ public sealed class Solver
Task.Run(() =>
{
var solver = new Solver(config, activeStates[stateIdx].State);
solver.Search(token, config.Iterations / config.ForkCount);
solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, stateIdx, solver.Solution());
}, token)
);
@@ -461,7 +461,7 @@ public sealed class Solver
tasks[i] = Task.Run(() =>
{
var solver = new Solver(config, state);
solver.Search(token, config.Iterations / config.ForkCount);
solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, solver.Solution());
}, token);
Task.WaitAll(tasks, CancellationToken.None);
@@ -504,7 +504,7 @@ public sealed class Solver
var solver = new Solver(config, state);
var s = Stopwatch.StartNew();
solver.Search(token, config.Iterations);
solver.Search(config.Iterations, token);
s.Stop();
var (solution_actions, solution_node) = solver.Solution();
@@ -536,7 +536,7 @@ public sealed class Solver
tasks[i] = Task.Run(() =>
{
var solver = new Solver(config, state);
solver.Search(token, config.Iterations / config.ForkCount);
solver.Search(config.Iterations / config.ForkCount, token);
return (solver.MaxScore, solver.Solution());
}, token);
Task.WaitAll(tasks, CancellationToken.None);
@@ -551,7 +551,7 @@ public sealed class Solver
public static (List<ActionType> Actions, SimulationState State) SearchOneshot(SolverConfig config, SimulationState state, CancellationToken token = default)
{
var solver = new Solver(config, state);
solver.Search(token, config.Iterations);
solver.Search(config.Iterations, token);
var (solution_actions, solution_node) = solver.Solution();
return (solution_actions, solution_node.State);
}