72 lines
2.2 KiB
C#
72 lines
2.2 KiB
C#
using System.Runtime.InteropServices;
|
|
|
|
namespace Craftimizer.Solver;
|
|
|
|
public enum SolverAlgorithm
|
|
{
|
|
Oneshot,
|
|
OneshotForked,
|
|
Stepwise,
|
|
StepwiseForked,
|
|
StepwiseFurcated,
|
|
}
|
|
|
|
[StructLayout(LayoutKind.Auto)]
|
|
public readonly record struct SolverConfig
|
|
{
|
|
public int Iterations { get; init; }
|
|
public float ScoreStorageThreshold { get; init; }
|
|
public float MaxScoreWeightingConstant { get; init; }
|
|
public float ExplorationConstant { get; init; }
|
|
public int MaxStepCount { get; init; }
|
|
public int MaxRolloutStepCount { get; init; }
|
|
public int MaxThreadCount { get; init; }
|
|
public int ForkCount { get; init; }
|
|
public int FurcatedActionCount { get; init; }
|
|
public bool StrictActions { get; init; }
|
|
|
|
public float ScoreProgress { get; init; }
|
|
public float ScoreQuality { get; init; }
|
|
public float ScoreDurability { get; init; }
|
|
public float ScoreCP { get; init; }
|
|
public float ScoreSteps { get; init; }
|
|
|
|
public ActionPool ActionPool { get; init; }
|
|
public SolverAlgorithm Algorithm { get; init; }
|
|
|
|
public SolverConfig()
|
|
{
|
|
Iterations = 100000;
|
|
ScoreStorageThreshold = 1f;
|
|
MaxScoreWeightingConstant = 0.1f;
|
|
ExplorationConstant = 4;
|
|
MaxStepCount = 30;
|
|
MaxRolloutStepCount = 99;
|
|
// Use 80% of all cores if less than 20 cores are available, otherwise use all but 4 cores. Keep at least 1 core.
|
|
MaxThreadCount = Math.Max(1, Math.Max(Environment.ProcessorCount - 4, (int)MathF.Floor(Environment.ProcessorCount * 0.8f)));
|
|
// Use 32 forks at minimum, or the number of cores, whichever is higher.
|
|
ForkCount = Math.Max(Environment.ProcessorCount, 32);
|
|
FurcatedActionCount = ForkCount / 2;
|
|
StrictActions = true;
|
|
|
|
ScoreProgress = .20f;
|
|
ScoreQuality = .65f;
|
|
ScoreDurability = .05f;
|
|
ScoreCP = .05f;
|
|
ScoreSteps = .05f;
|
|
|
|
ActionPool = ActionPool.Default;
|
|
Algorithm = SolverAlgorithm.StepwiseFurcated;
|
|
}
|
|
|
|
public static readonly SolverConfig SimulatorDefault = new SolverConfig() with
|
|
{
|
|
|
|
};
|
|
|
|
public static readonly SolverConfig SynthHelperDefault = new SolverConfig() with
|
|
{
|
|
// Add properties if necessary
|
|
};
|
|
}
|