Remove redundant initial state in sims
This commit is contained in:
@@ -106,7 +106,7 @@ internal static class Program
|
|||||||
MaxStepCount = 30,
|
MaxStepCount = 30,
|
||||||
};
|
};
|
||||||
|
|
||||||
var sim = new SimulatorNoRandom(new(input));
|
var sim = new SimulatorNoRandom();
|
||||||
(_, var state) = sim.Execute(new(input), ActionType.MuscleMemory);
|
(_, var state) = sim.Execute(new(input), ActionType.MuscleMemory);
|
||||||
(_, state) = sim.Execute(state, ActionType.PrudentTouch);
|
(_, state) = sim.Execute(state, ActionType.PrudentTouch);
|
||||||
//(_, state) = sim.Execute(state, ActionType.Manipulation);
|
//(_, state) = sim.Execute(state, ActionType.Manipulation);
|
||||||
|
|||||||
@@ -143,7 +143,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
|
|
||||||
for (var i = 0; i < iterCount; ++i)
|
for (var i = 0; i < iterCount; ++i)
|
||||||
{
|
{
|
||||||
var sim = new Sim(startState);
|
var sim = new Sim();
|
||||||
var (_, state, _) = sim.ExecuteMultiple(startState, actions);
|
var (_, state, _) = sim.ExecuteMultiple(startState, actions);
|
||||||
Progress.Add(state.Progress);
|
Progress.Add(state.Progress);
|
||||||
Quality.Add(state.Quality);
|
Quality.Add(state.Quality);
|
||||||
@@ -1018,7 +1018,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
|
|
||||||
private void DrawActionHotbars()
|
private void DrawActionHotbars()
|
||||||
{
|
{
|
||||||
var sim = CreateSim(State);
|
var sim = CreateSim();
|
||||||
|
|
||||||
var imageSize = ImGui.GetFrameHeight() * 2;
|
var imageSize = ImGui.GetFrameHeight() * 2;
|
||||||
var spacing = ImGui.GetStyle().ItemSpacing.Y;
|
var spacing = ImGui.GetStyle().ItemSpacing.Y;
|
||||||
@@ -1283,7 +1283,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
}
|
}
|
||||||
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
if (ImGui.IsItemHovered(ImGuiHoveredFlags.AllowWhenDisabled))
|
||||||
{
|
{
|
||||||
var sim = CreateSim(lastState);
|
var sim = CreateSim();
|
||||||
ImGui.SetTooltip($"{action.GetName(RecipeData!.ClassJob)}\n{actionBase.GetTooltip(sim, true)}");
|
ImGui.SetTooltip($"{action.GetName(RecipeData!.ClassJob)}\n{actionBase.GetTooltip(sim, true)}");
|
||||||
}
|
}
|
||||||
lastState = state;
|
lastState = state;
|
||||||
@@ -1644,14 +1644,14 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
private void RecalculateState()
|
private void RecalculateState()
|
||||||
{
|
{
|
||||||
InitialState = new SimulationState(new(CharacterStats, RecipeData.RecipeInfo, StartingQuality));
|
InitialState = new SimulationState(new(CharacterStats, RecipeData.RecipeInfo, StartingQuality));
|
||||||
var sim = CreateSim(InitialState);
|
var sim = CreateSim();
|
||||||
var lastState = InitialState;
|
var lastState = InitialState;
|
||||||
for (var i = 0; i < Macro.Count; i++)
|
for (var i = 0; i < Macro.Count; i++)
|
||||||
lastState = Macro[i].Recalculate(sim, lastState);
|
lastState = Macro[i].Recalculate(sim, lastState);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Sim CreateSim(in SimulationState state) =>
|
private static Sim CreateSim() =>
|
||||||
Service.Configuration.ConditionRandomness ? new Sim(state) : new SimNoRandom(state);
|
Service.Configuration.ConditionRandomness ? new Sim() : new SimNoRandom();
|
||||||
|
|
||||||
private void AddStep(ActionType action, int index = -1, bool isSolver = false)
|
private void AddStep(ActionType action, int index = -1, bool isSolver = false)
|
||||||
{
|
{
|
||||||
@@ -1664,13 +1664,13 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
|
|
||||||
if (index == -1)
|
if (index == -1)
|
||||||
{
|
{
|
||||||
var sim = CreateSim(State);
|
var sim = CreateSim();
|
||||||
Macro.Add(new(action, sim, State, out _));
|
Macro.Add(new(action, sim, State, out _));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var state = index == 0 ? InitialState : Macro[index - 1].State;
|
var state = index == 0 ? InitialState : Macro[index - 1].State;
|
||||||
var sim = CreateSim(state);
|
var sim = CreateSim();
|
||||||
Macro.Insert(index, new(action, sim, state, out state));
|
Macro.Insert(index, new(action, sim, state, out state));
|
||||||
|
|
||||||
for (var i = index + 1; i < Macro.Count; i++)
|
for (var i = index + 1; i < Macro.Count; i++)
|
||||||
@@ -1689,7 +1689,7 @@ public sealed class MacroEditor : Window, IDisposable
|
|||||||
Macro.RemoveAt(index);
|
Macro.RemoveAt(index);
|
||||||
|
|
||||||
var state = index == 0 ? InitialState : Macro[index - 1].State;
|
var state = index == 0 ? InitialState : Macro[index - 1].State;
|
||||||
var sim = CreateSim(state);
|
var sim = CreateSim();
|
||||||
for (var i = index; i < Macro.Count; i++)
|
for (var i = index; i < Macro.Count; i++)
|
||||||
state = Macro[i].Recalculate(sim, state);
|
state = Macro[i].Recalculate(sim, state);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -329,7 +329,7 @@ public sealed class MacroList : Window, IDisposable
|
|||||||
return state;
|
return state;
|
||||||
|
|
||||||
state = new SimulationState(new(CharacterStats, RecipeData.RecipeInfo));
|
state = new SimulationState(new(CharacterStats, RecipeData.RecipeInfo));
|
||||||
var sim = new Sim(state);
|
var sim = new Sim();
|
||||||
(_, state, _) = sim.ExecuteMultiple(state, macro.Actions);
|
(_, state, _) = sim.ExecuteMultiple(state, macro.Actions);
|
||||||
return MacroStateCache[macro] = state;
|
return MacroStateCache[macro] = state;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -824,7 +824,7 @@ public sealed unsafe class RecipeNote : Window, IDisposable
|
|||||||
var state = new SimulationState(input);
|
var state = new SimulationState(input);
|
||||||
var config = Service.Configuration.SimulatorSolverConfig;
|
var config = Service.Configuration.SimulatorSolverConfig;
|
||||||
var mctsConfig = new MCTSConfig(config);
|
var mctsConfig = new MCTSConfig(config);
|
||||||
var simulator = new SimulatorNoRandom(state);
|
var simulator = new SimulatorNoRandom();
|
||||||
List<Macro> macros = new(Service.Configuration.Macros);
|
List<Macro> macros = new(Service.Configuration.Macros);
|
||||||
|
|
||||||
token.ThrowIfCancellationRequested();
|
token.ThrowIfCancellationRequested();
|
||||||
|
|||||||
@@ -35,16 +35,6 @@ public class Simulator
|
|||||||
|
|
||||||
public IEnumerable<ActionType> AvailableActions => ActionUtils.AvailableActions(this);
|
public IEnumerable<ActionType> AvailableActions => ActionUtils.AvailableActions(this);
|
||||||
|
|
||||||
public Simulator(in SimulationState state)
|
|
||||||
{
|
|
||||||
State = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void SetState(in SimulationState state)
|
|
||||||
{
|
|
||||||
State = state;
|
|
||||||
}
|
|
||||||
|
|
||||||
public (ActionResponse Response, SimulationState NewState) Execute(in SimulationState state, ActionType action)
|
public (ActionResponse Response, SimulationState NewState) Execute(in SimulationState state, ActionType action)
|
||||||
{
|
{
|
||||||
State = state;
|
State = state;
|
||||||
|
|||||||
@@ -2,10 +2,6 @@ namespace Craftimizer.Simulator;
|
|||||||
|
|
||||||
public class SimulatorNoRandom : Simulator
|
public class SimulatorNoRandom : Simulator
|
||||||
{
|
{
|
||||||
public SimulatorNoRandom(in SimulationState state) : base(state)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public sealed override bool RollSuccessRaw(float successRate) => successRate == 1;
|
public sealed override bool RollSuccessRaw(float successRate) => successRate == 1;
|
||||||
public sealed override Condition GetNextRandomCondition() => Condition.Normal;
|
public sealed override Condition GetNextRandomCondition() => Condition.Normal;
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-2
@@ -20,7 +20,7 @@ public sealed class MCTS
|
|||||||
public MCTS(in MCTSConfig config, in SimulationState state)
|
public MCTS(in MCTSConfig config, in SimulationState state)
|
||||||
{
|
{
|
||||||
this.config = config;
|
this.config = config;
|
||||||
var sim = new Simulator(state, config.MaxStepCount);
|
var sim = new Simulator(config.MaxStepCount);
|
||||||
rootNode = new(new(
|
rootNode = new(new(
|
||||||
state,
|
state,
|
||||||
null,
|
null,
|
||||||
@@ -280,7 +280,7 @@ public sealed class MCTS
|
|||||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public void Search(int iterations, CancellationToken token)
|
public void Search(int iterations, CancellationToken token)
|
||||||
{
|
{
|
||||||
Simulator simulator = new(rootNode.State.State, config.MaxStepCount);
|
Simulator simulator = new(config.MaxStepCount);
|
||||||
var random = rootNode.State.State.Input.Random;
|
var random = rootNode.State.State.Input.Random;
|
||||||
var n = 0;
|
var n = 0;
|
||||||
for (var i = 0; i < iterations || MaxScore == 0; i++)
|
for (var i = 0; i < iterations || MaxScore == 0; i++)
|
||||||
|
|||||||
+1
-1
@@ -20,7 +20,7 @@ internal sealed class Simulator : SimulatorNoRandom
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Simulator(in SimulationState state, int maxStepCount) : base(state)
|
public Simulator(int maxStepCount)
|
||||||
{
|
{
|
||||||
this.maxStepCount = maxStepCount;
|
this.maxStepCount = maxStepCount;
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -116,7 +116,7 @@ public sealed class Solver : IDisposable
|
|||||||
var bestSims = new List<(float Score, SolverSolution Result)>();
|
var bestSims = new List<(float Score, SolverSolution Result)>();
|
||||||
|
|
||||||
var state = State;
|
var state = State;
|
||||||
var sim = new Simulator(state, Config.MaxStepCount);
|
var sim = new Simulator(Config.MaxStepCount);
|
||||||
|
|
||||||
var activeStates = new List<SolverSolution>() { new(Array.Empty<ActionType>(), state) };
|
var activeStates = new List<SolverSolution>() { new(Array.Empty<ActionType>(), state) };
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ public sealed class Solver : IDisposable
|
|||||||
{
|
{
|
||||||
var actions = new List<ActionType>();
|
var actions = new List<ActionType>();
|
||||||
var state = State;
|
var state = State;
|
||||||
var sim = new Simulator(state, Config.MaxStepCount);
|
var sim = new Simulator(Config.MaxStepCount);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Token.ThrowIfCancellationRequested();
|
Token.ThrowIfCancellationRequested();
|
||||||
@@ -303,7 +303,7 @@ public sealed class Solver : IDisposable
|
|||||||
{
|
{
|
||||||
var actions = new List<ActionType>();
|
var actions = new List<ActionType>();
|
||||||
var state = State;
|
var state = State;
|
||||||
var sim = new Simulator(state, Config.MaxStepCount);
|
var sim = new Simulator(Config.MaxStepCount);
|
||||||
while (true)
|
while (true)
|
||||||
{
|
{
|
||||||
Token.ThrowIfCancellationRequested();
|
Token.ThrowIfCancellationRequested();
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class SimulatorTests
|
|||||||
int progress, int quality,
|
int progress, int quality,
|
||||||
int durability, int cp)
|
int durability, int cp)
|
||||||
{
|
{
|
||||||
var simulator = new SimulatorNoRandom(new(input));
|
var simulator = new SimulatorNoRandom();
|
||||||
var (_, state, _) = simulator.ExecuteMultiple(new(input), actions);
|
var (_, state, _) = simulator.ExecuteMultiple(new(input), actions);
|
||||||
Assert.AreEqual(progress, state.Progress);
|
Assert.AreEqual(progress, state.Progress);
|
||||||
Assert.AreEqual(quality, state.Quality);
|
Assert.AreEqual(quality, state.Quality);
|
||||||
@@ -170,7 +170,7 @@ public class SimulatorTests
|
|||||||
},
|
},
|
||||||
0, 4064, 15, 332);
|
0, 4064, 15, 332);
|
||||||
Assert.AreEqual(10, state.ActiveEffects.InnerQuiet);
|
Assert.AreEqual(10, state.ActiveEffects.InnerQuiet);
|
||||||
Assert.IsTrue(ActionType.TrainedFinesse.Base().CanUse(new SimulatorNoRandom(state)));
|
Assert.IsTrue(ActionType.TrainedFinesse.Base().CanUse(new SimulatorNoRandom()));
|
||||||
}
|
}
|
||||||
|
|
||||||
[TestMethod]
|
[TestMethod]
|
||||||
|
|||||||
Reference in New Issue
Block a user