public CraftingState FindBetterState(CraftingSim sim, IEnumerable <int> actions, CraftingState betterThan) { int l = sim.CraftingActionsLength; foreach (var i in actions) { CraftingSim s = new CraftingSim(); sim.CopyTo(s, true); s.AddActions(true, C.CraftingActions[i]); CraftingState state = GetState(s); if (s.CurrentQuality >= s.CurrentRecipe.MaxQuality) { if (state.ActionIds.Length < betterThan.ActionIds.Length) { return(state); } } if (s.CraftingActionsLength == l) { state.CanAddActions = false; } else { NextStates.Add(state); if (state.CanAddActions) { return(state.FindBetterState(s, actions, betterThan)); } } } return(null); }
public void Reevaluate(CraftingSim sim, bool leaveInitialValues) { LeaveInitialValues = leaveInitialValues; Sim.SetRecipe(sim.CurrentRecipe); sim.CopyTo(Sim); InitialValues = sim.GetCraftingActions().Select(x => (ushort)x.Id).ToArray(); ChromosomeSize = DefaultChromosomeSize; for (int i = 0; i < MaxSize; i++) { if (LeaveInitialValues) { Array.Copy(InitialValues, Chromosomes[i].Values, InitialValues.Length); } Chromosomes[i].Sim.SetRecipe(sim.CurrentRecipe); sim.CopyTo(Chromosomes[i].Sim); Chromosomes[i].Fitness = Chromosomes[i].Evaluate(); } }
public RotationStats GetStats(CraftingSim sim) { CraftingSim copy = sim.Clone(); sim.CopyTo(copy, true); int progress = sim.CurrentProgress; int quality = sim.CurrentQuality; int cp = sim.CurrentCP; int durability = sim.CurrentDurability; var actions = sim.GetCraftingActions().ToList(); actions.AddRange(Rotation.Array.Select(x => CraftingAction.CraftingActions[x])); copy.AddActions(true, actions); return(new RotationStats( Rotation.Array.Length, copy.CurrentProgress - progress, copy.CurrentQuality - quality, cp - copy.CurrentCP, durability - copy.CurrentDurability )); }