Optimize trace build, add trace sim code

This commit is contained in:
Asriel Camora
2023-11-04 18:44:30 -07:00
parent 4f953f2fa3
commit 269a7f9870
5 changed files with 118 additions and 55 deletions
+16
View File
@@ -9,6 +9,12 @@
<Configurations>Debug;Release;Trace</Configurations> <Configurations>Debug;Release;Trace</Configurations>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="BenchmarkDotNet.Artifacts\**" />
<EmbeddedResource Remove="BenchmarkDotNet.Artifacts\**" />
<None Remove="BenchmarkDotNet.Artifacts\**" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="BenchmarkDotNet" Version="0.13.8" /> <PackageReference Include="BenchmarkDotNet" Version="0.13.8" />
<PackageReference Include="Meziantou.Analyzer" Version="2.0.92"> <PackageReference Include="Meziantou.Analyzer" Version="2.0.92">
@@ -22,4 +28,14 @@
<ProjectReference Include="..\Simulator\Craftimizer.Simulator.csproj" /> <ProjectReference Include="..\Simulator\Craftimizer.Simulator.csproj" />
<ProjectReference Include="..\Solver\Craftimizer.Solver.csproj" /> <ProjectReference Include="..\Solver\Craftimizer.Solver.csproj" />
</ItemGroup> </ItemGroup>
<PropertyGroup Condition="'$(IS_BENCH)'=='1'">
<DefineConstants>$(DefineConstants);IS_DETERMINISTIC</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Trace'">
<Optimize>True</Optimize>
<DefineConstants>$(DefineConstants);IS_DETERMINISTIC;IS_TRACE</DefineConstants>
</PropertyGroup>
</Project> </Project>
+85 -46
View File
@@ -1,4 +1,3 @@
using BenchmarkDotNet.Running;
using Craftimizer.Simulator; using Craftimizer.Simulator;
using Craftimizer.Simulator.Actions; using Craftimizer.Simulator.Actions;
using Craftimizer.Solver; using Craftimizer.Solver;
@@ -10,19 +9,16 @@ internal static class Program
{ {
private static async Task Main(string[] args) private static async Task Main(string[] args)
{ {
#if !IS_TRACE
Environment.SetEnvironmentVariable("IS_BENCH", "1"); Environment.SetEnvironmentVariable("IS_BENCH", "1");
BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args); BenchmarkDotNet.Running.BenchmarkSwitcher.FromAssembly(typeof(Program).Assembly).Run(args);
return; #else
//TypeLayout.PrintLayout<ArenaNode<SimulationNode>>(true);
//return;
var input = new SimulationInput( var input = new SimulationInput(
new CharacterStats new()
{ {
Craftsmanship = 4078, Craftsmanship = 4041,
Control = 3897, Control = 3905,
CP = 704, CP = 609,
Level = 90, Level = 90,
CanUseManipulation = true, CanUseManipulation = true,
HasSplendorousBuff = false, HasSplendorousBuff = false,
@@ -44,47 +40,90 @@ internal static class Program
ProgressDivider = 130, ProgressDivider = 130,
} }
); );
var config = new SolverConfig() var config = new SolverConfig()
{ {
Iterations = 100_000, Algorithm = SolverAlgorithm.Stepwise,
ForkCount = 32, Iterations = 30000
FurcatedActionCount = 16,
MaxStepCount = 30,
}; };
var solver = new Solver.Solver(config, new(input));
var sim = new SimulatorNoRandom(new(input)); solver.OnNewAction += s => Console.WriteLine($">{s}");
(_, var state) = sim.Execute(new(input), ActionType.MuscleMemory);
(_, state) = sim.Execute(state, ActionType.PrudentTouch);
//(_, state) = sim.Execute(state, ActionType.Manipulation);
//(_, state) = sim.Execute(state, ActionType.Veneration);
//(_, state) = sim.Execute(state, ActionType.WasteNot);
//(_, state) = sim.Execute(state, ActionType.Groundwork);
//(_, state) = sim.Execute(state, ActionType.Groundwork);
//(_, state) = sim.Execute(state, ActionType.Groundwork);
//(_, state) = sim.Execute(state, ActionType.Innovation);
//(_, state) = sim.Execute(state, ActionType.PrudentTouch);
//(_, state) = sim.Execute(state, ActionType.AdvancedTouchCombo);
//(_, state) = sim.Execute(state, ActionType.Manipulation);
//(_, state) = sim.Execute(state, ActionType.Innovation);
//(_, state) = sim.Execute(state, ActionType.PrudentTouch);
//(_, state) = sim.Execute(state, ActionType.AdvancedTouchCombo);
//(_, state) = sim.Execute(state, ActionType.GreatStrides);
//(_, state) = sim.Execute(state, ActionType.Innovation);
//(_, state) = sim.Execute(state, ActionType.FocusedTouchCombo);
//(_, state) = sim.Execute(state, ActionType.GreatStrides);
//(_, state) = sim.Execute(state, ActionType.ByregotsBlessing);
//(_, state) = sim.Execute(state, ActionType.CarefulSynthesis);
//(_, state) = sim.Execute(state, ActionType.CarefulSynthesis);
Console.WriteLine($"{state.Quality} {state.CP} {state.Progress} {state.Durability}");
//return;
var solver = new Solver.Solver(config, state);
solver.OnLog += Console.WriteLine;
solver.OnNewAction += s => Console.WriteLine(s);
solver.Start(); solver.Start();
var (_, s) = await solver.GetTask().ConfigureAwait(false); var (_, s) = await solver.GetTask().ConfigureAwait(false);
Console.WriteLine($"Qual: {s.Quality}/{s.Input.Recipe.MaxQuality}"); Console.WriteLine($"Qual: {s.Quality}/{s.Input.Recipe.MaxQuality}");
#endif
return;
////TypeLayout.PrintLayout<ArenaNode<SimulationNode>>(true);
////return;
//var input = new SimulationInput(
// new CharacterStats
// {
// Craftsmanship = 4078,
// Control = 3897,
// CP = 704,
// Level = 90,
// CanUseManipulation = true,
// HasSplendorousBuff = false,
// IsSpecialist = false,
// CLvl = 560,
// },
// new RecipeInfo()
// {
// IsExpert = false,
// ClassJobLevel = 90,
// RLvl = 640,
// ConditionsFlag = 15,
// MaxDurability = 70,
// MaxQuality = 14040,
// MaxProgress = 6600,
// QualityModifier = 70,
// QualityDivider = 115,
// ProgressModifier = 80,
// ProgressDivider = 130,
// }
//);
//var config = new SolverConfig()
//{
// Iterations = 100_000,
// ForkCount = 32,
// FurcatedActionCount = 16,
// MaxStepCount = 30,
//};
//var sim = new SimulatorNoRandom(new(input));
//(_, var state) = sim.Execute(new(input), ActionType.MuscleMemory);
//(_, state) = sim.Execute(state, ActionType.PrudentTouch);
////(_, state) = sim.Execute(state, ActionType.Manipulation);
////(_, state) = sim.Execute(state, ActionType.Veneration);
////(_, state) = sim.Execute(state, ActionType.WasteNot);
////(_, state) = sim.Execute(state, ActionType.Groundwork);
////(_, state) = sim.Execute(state, ActionType.Groundwork);
////(_, state) = sim.Execute(state, ActionType.Groundwork);
////(_, state) = sim.Execute(state, ActionType.Innovation);
////(_, state) = sim.Execute(state, ActionType.PrudentTouch);
////(_, state) = sim.Execute(state, ActionType.AdvancedTouchCombo);
////(_, state) = sim.Execute(state, ActionType.Manipulation);
////(_, state) = sim.Execute(state, ActionType.Innovation);
////(_, state) = sim.Execute(state, ActionType.PrudentTouch);
////(_, state) = sim.Execute(state, ActionType.AdvancedTouchCombo);
////(_, state) = sim.Execute(state, ActionType.GreatStrides);
////(_, state) = sim.Execute(state, ActionType.Innovation);
////(_, state) = sim.Execute(state, ActionType.FocusedTouchCombo);
////(_, state) = sim.Execute(state, ActionType.GreatStrides);
////(_, state) = sim.Execute(state, ActionType.ByregotsBlessing);
////(_, state) = sim.Execute(state, ActionType.CarefulSynthesis);
////(_, state) = sim.Execute(state, ActionType.CarefulSynthesis);
//Console.WriteLine($"{state.Quality} {state.CP} {state.Progress} {state.Durability}");
////return;
//var solver = new Solver.Solver(config, state);
//solver.OnLog += Console.WriteLine;
//solver.OnNewAction += s => Console.WriteLine(s);
//solver.Start();
//var (_, s) = await solver.GetTask().ConfigureAwait(false);
//Console.WriteLine($"Qual: {s.Quality}/{s.Input.Recipe.MaxQuality}");
} }
private static void Benchmark(Func<SolverSolution> search) private static void Benchmark(Func<SolverSolution> search)
+2 -2
View File
@@ -23,8 +23,8 @@
<ProjectReference Include="..\Solver\Craftimizer.Solver.csproj" /> <ProjectReference Include="..\Solver\Craftimizer.Solver.csproj" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup Condition="'$(IS_BENCH)'=='1'">
<DefineConstants Condition="'$(IS_BENCH)'=='1'">$(DefineConstants);IS_DETERMINISTIC</DefineConstants> <DefineConstants>$(DefineConstants);IS_DETERMINISTIC</DefineConstants>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
+7 -3
View File
@@ -15,9 +15,13 @@
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup Condition="'$(IS_BENCH)'=='1'">
<DefineConstants Condition="'$(IS_BENCH)'=='1'">$(DefineConstants);IS_DETERMINISTIC</DefineConstants> <DefineConstants>$(DefineConstants);IS_DETERMINISTIC</DefineConstants>
<DefineConstants Condition="'$(Configuration)' == 'Trace'">$(DefineConstants);IS_DETERMINISTIC;IS_TRACE</DefineConstants> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Trace'">
<Optimize>True</Optimize>
<DefineConstants>$(DefineConstants);IS_DETERMINISTIC;IS_TRACE</DefineConstants>
</PropertyGroup> </PropertyGroup>
</Project> </Project>
+7 -3
View File
@@ -20,9 +20,13 @@
<ProjectReference Include="..\Simulator\Craftimizer.Simulator.csproj" /> <ProjectReference Include="..\Simulator\Craftimizer.Simulator.csproj" />
</ItemGroup> </ItemGroup>
<PropertyGroup> <PropertyGroup Condition="'$(IS_BENCH)'=='1'">
<DefineConstants Condition="'$(IS_BENCH)'=='1'">$(DefineConstants);IS_DETERMINISTIC</DefineConstants> <DefineConstants>$(DefineConstants);IS_DETERMINISTIC</DefineConstants>
<DefineConstants Condition="'$(Configuration)' == 'Trace'">$(DefineConstants);IS_DETERMINISTIC;IS_TRACE</DefineConstants> </PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='Trace'">
<Optimize>True</Optimize>
<DefineConstants>$(DefineConstants);IS_DETERMINISTIC;IS_TRACE</DefineConstants>
</PropertyGroup> </PropertyGroup>
</Project> </Project>