예제 #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);
        }
예제 #2
0
        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();
            }
        }
예제 #3
0
        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
                       ));
        }