Example #1
0
        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;
        }
Example #3
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();
 }
Example #9
0
 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;
     }
 }
Example #12
0
 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;
 }
Example #14
0
 public override void AddBuff(CraftingSim sim)
 {
     if (sim.ManipulationBuff == null)
     {
         sim.ManipulationBuff = new ManipulationBuff();
         sim.CraftingBuffs.Add(sim.ManipulationBuff);
     }
     sim.ManipulationBuff.Stack = 8;
 }
Example #15
0
 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);
        }
Example #17
0
 public override void AddBuff(CraftingSim sim)
 {
     if (sim.WasteNotBuff == null)
     {
         sim.WasteNotBuff = new WasteNotBuff();
         sim.CraftingBuffs.Add(sim.WasteNotBuff);
     }
     sim.WasteNotBuff.Stack = 8;
 }
Example #18
0
 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;
         }
     }
 }
Example #23
0
        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();
        }
Example #24
0
 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)
     });
 }
Example #25
0
        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);
        }
Example #29
0
        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;
                }
            }
        }