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 Population(int index, CraftingSim sim, int maxSize, int chromosomeSize, ushort[] availableValues, ushort[] initialValues = null) { Index = index; Sim = sim; MaxSize = maxSize; Chromosomes = new Chromosome[MaxSize]; DefaultChromosomeSize = chromosomeSize; ChromosomeSize = chromosomeSize; AvailableValues = availableValues; LeaveInitialValues = false; for (int i = 0; i < MaxSize; i++) { Chromosomes[i] = new Chromosome(sim, availableValues, chromosomeSize); } if (initialValues != null) { initialValues.CopyTo(Chromosomes[0].Values, 0); } Array.Sort(Chromosomes); Best = Chromosomes[0]; for (int i = 1; i < Chromosomes.Length; i++) { if (Chromosomes[i - 1].Fitness < Chromosomes[i].Fitness) { Debugger.Break(); } } CurrentGeneration = 0; }
public virtual void Remove(CraftingSim sim) { if (sim.CraftingBuffs.Contains(this)) { sim.CraftingBuffs.Remove(this); } }
public override CraftingActionResult CheckInner(CraftingSim sim) { if (sim.NameOfTheElementsUsed) { return(CraftingActionResult.BuffUsedUp); } return(CraftingActionResult.Success); }
public override CraftingActionResult CheckInner(CraftingSim sim) { if (sim.ObserveBuff == null) { return(CraftingActionResult.NeedsBuff); } return(CraftingActionResult.Success); }
public override double GetEfficiency(CraftingSim sim) { if (sim.InnerQuietBuff != null) { return(1d + 0.2 * (sim.InnerQuietBuff.Stack - 1)); } return(1d); }
public CraftingCondition(CraftingSim sim, CraftingAction craftingAction) { Sim = sim; CraftingAction = craftingAction; ActionSettings = new ActionSettings(); Conditions = new ObservableCollection <PropertyComparisonInfo>(); Conditions.CollectionChanged += Conditions_CollectionChanged; }
public Chromosome(CraftingSim sim, ushort[] availableValues, int valueCount, ushort[] values) { Sim = sim.Clone(); AvailableValues = availableValues; Values = new ushort[valueCount]; values.CopyTo(Values, 0); Fitness = Evaluate(); }
public override double GetEfficiency(CraftingSim sim) { if (sim.CurrentDurability < GetDurabilityCost(sim)) { return(1.5d); } return(3d); }
public override double GetEfficiency(CraftingSim sim) { if (sim.Level >= 31) { return(1.2d); } return(1d); }
public override void Step(CraftingSim sim) { Stack--; if (Stack == 0) { NeedsRemove = true; } }
public override CraftingActionResult CheckInner(CraftingSim sim) { if (sim.InnerQuietBuff != null) { return(CraftingActionResult.NeedsNoBuff); } return(CraftingActionResult.Success); }
public override void AddBuff(CraftingSim sim) { if (sim.GreatStridesBuff == null) { sim.GreatStridesBuff = new GreatStridesBuff(); sim.CraftingBuffs.Add(sim.GreatStridesBuff); } sim.GreatStridesBuff.Stack = 3; }
public override void AddBuff(CraftingSim sim) { if (sim.ManipulationBuff == null) { sim.ManipulationBuff = new ManipulationBuff(); sim.CraftingBuffs.Add(sim.ManipulationBuff); } sim.ManipulationBuff.Stack = 8; }
public override void AddBuff(CraftingSim sim) { if (sim.VenerationBuff == null) { sim.VenerationBuff = new VenerationBuff(); sim.CraftingBuffs.Add(sim.VenerationBuff); } sim.VenerationBuff.Stack = 4; }
public override double GetEfficiency(CraftingSim sim) { if (sim.NameOfTheElementsBuff != null) { return(1d + (2 * Math.Ceiling((1 - (double)sim.CurrentProgress / sim.CurrentRecipe.MaxProgress) * 100)) / 100); } return(1); }
public override void AddBuff(CraftingSim sim) { if (sim.WasteNotBuff == null) { sim.WasteNotBuff = new WasteNotBuff(); sim.CraftingBuffs.Add(sim.WasteNotBuff); } sim.WasteNotBuff.Stack = 8; }
public override void AddBuff(CraftingSim sim) { if (sim.ObserveBuff == null) { sim.ObserveBuff = new ObserveBuff(); sim.CraftingBuffs.Add(sim.ObserveBuff); } sim.ObserveBuff.Stack = 1; }
public override void AddBuff(CraftingSim sim) { if (sim.NameOfTheElementsBuff == null) { sim.NameOfTheElementsUsed = true; sim.NameOfTheElementsBuff = new NameOfTheElementsBuff(); sim.CraftingBuffs.Add(sim.NameOfTheElementsBuff); } sim.NameOfTheElementsBuff.Stack = 3; }
public int GetCPCost(CraftingSim sim) { int cpCost = CPCost; if (sim.GetStepSettings().RecipeCondition == RecipeCondition.Pliant) { cpCost = (int)Math.Ceiling(cpCost / 2d); } return(cpCost); }
public override void IncreaseQuality(CraftingSim sim) { sim.CurrentQuality += sim.GetQualityIncrease(GetEfficiency(sim)); sim.InnerQuietBuff.NeedsRemove = true; if (sim.GreatStridesBuff != null) { sim.GreatStridesBuff.NeedsRemove = true; } }
public virtual void IncreaseProgress(CraftingSim sim) { if (IncreasesProgress) { sim.CurrentProgress += sim.GetProgressIncrease(GetEfficiency(sim)); if (sim.MuscleMemoryBuff != null) { sim.MuscleMemoryBuff.NeedsRemove = true; } } }
public Chromosome(CraftingSim sim, ushort[] availableValues, int valueCount) { Sim = sim.Clone(); AvailableValues = availableValues; Values = new ushort[valueCount]; for (int i = 0; i < Values.Length; i++) { Values[i] = AvailableValues.GetRandom(); } Fitness = Evaluate(); }
public static CraftingState GetState(CraftingSim sim) { return(new CraftingState { CurrentDurability = sim.CurrentDurability, CurrentCP = sim.CurrentCP, CurrentProgress = sim.CurrentProgress, CurrentQuality = sim.CurrentQuality, ActionIds = sim.GetCraftingActions().Select(x => x.Id).ToArray(), CanAddActions = !(sim.CurrentDurability == 0 || sim.CurrentProgress >= sim.CurrentRecipe.MaxProgress || sim.CurrentCP == sim.MaxCP) }); }
private double GetQualityScore(CraftingSim sim) { int quality = sim.CurrentQuality; if (quality > sim.CurrentRecipe.MaxQuality) { quality = sim.CurrentRecipe.MaxQuality; } double result = quality * 100000 / sim.CurrentRecipe.MaxQuality; var actions = sim.GetCraftingActions(); result += sim.CraftingActionsLength; return(result); }
private void Sim_FinishedExecution(CraftingSim sim) { Dispatcher.Invoke(() => { if (ListViewActions.ItemsSource != null) { var list = (ListViewActions.ItemsSource as List <CraftingActionContainer>); for (int i = 0; i < list.Count; i++) { list[i].Dispose(); } } if (Sim.CraftingActionsLength > 0) { for (int i = 0; i < CurrentActions.Count; i++) { CurrentActions[i].Update(); } } else { CurrentActions.Clear(); } ListViewActions.ItemsSource = CurrentActions.ToList(); if (ListViewCraftingBuffs.ItemsSource != null) { var list = (ListViewCraftingBuffs.ItemsSource as List <CraftingBuffContainer>); for (int i = 0; i < list.Count; i++) { list[i].Source = null; } } ListViewCraftingBuffs.ItemsSource = sim.CraftingBuffs.Select(x => new CraftingBuffContainer(G.Actions[x.Name].Images[sim.CurrentRecipe.ClassJob], x)).ToList(); if (AvailableActions != null) { for (int i = 0; i < AvailableActions.Length; i++) { AvailableActions[i].Update(); } } LabelScore.Content = "Score: " + Sim.Score.ToString("#.###"); }); }
public override void Step(CraftingSim sim) { if (!(sim.CraftingActions[sim.Step] is Manipulation) && sim.CurrentDurability > 0) { sim.CurrentDurability += 5; if (sim.CurrentDurability > sim.CurrentRecipe.Durability) { sim.CurrentDurability = sim.CurrentRecipe.Durability; } Stack--; } if (Stack == 0) { NeedsRemove = true; } }
public int GetDurabilityCost(CraftingSim sim) { if (DurabilityCost <= 0) { return(DurabilityCost); } int durabilityCost = DurabilityCost; if (sim.GetStepSettings().RecipeCondition == RecipeCondition.Sturdy) { durabilityCost /= 2; } if (sim.WasteNotBuff != null) { durabilityCost = (int)Math.Ceiling(durabilityCost / 2d); } return(durabilityCost); }
public void Solve(CraftingSim sim) { Sim = sim.Clone(); MaxProgress = Sim.CurrentRecipe.MaxProgress; MaxQuality = Sim.CurrentRecipe.MaxQuality; var a = C.CraftingActions.Values.Where(x => x.IncreasesQuality).ToList(); a.Add(C.InnerQuiet); a.Add(C.WasteNot); a.Add(C.WasteNotII); a.Add(C.GreatStrides); a.Add(C.Manipulation); a.Add(C.MastersMend); a.Add(C.Observe); Sim.RemoveActions(); //Sim.AddActions(C.Reflect); ushort[] actions = new ushort[4]; for (int i = 0; i < 4; i++) { actions[i] = 0; } Dictionary <ExtendedArray <ushort>, int> QValues = new Dictionary <ExtendedArray <ushort>, int>(); PossibleCraftingAction pAction = new PossibleCraftingAction(a.Select(x => x.Id)); while (true) { Sim.RemoveActions(); Sim.AddActions(true, actions.Select(x => C.CraftingActions[x])); QValues[Sim.GetCraftingActions().Select(x => x.Id).ToArray()] = Sim.CurrentQuality; int index = 0; while (a[index] == a.Last()) { actions[index] = a[0].Id; index++; } actions[index]++; } }
public virtual void IncreaseQuality(CraftingSim sim) { if (IncreasesQuality) { sim.CurrentQuality += sim.GetQualityIncrease(GetEfficiency(sim)); if (sim.InnerQuietBuff != null) { sim.InnerQuietBuff.Stack++; if (sim.InnerQuietBuff.Stack > 11) { sim.InnerQuietBuff.Stack = 11; } } if (sim.GreatStridesBuff != null) { sim.GreatStridesBuff.NeedsRemove = true; } } }