Example #1
0
        public void Merge(SortList <AIPlayer> individuals, List <AIPlayer> offspring, Simulation simulation)
        {
            //If having only a single parent, replace it if better
            foreach (AIPlayer o in offspring)
            {
                if (o.Parent2 == null)
                {
                    for (int i = 0; i < individuals.Count; i++)
                    {
                        if (individuals.Get(i) == o.Parent1)
                        {
                            if (o.GetFitness() > individuals.Get(i).GetFitness())
                            {
                                individuals.Remove(individuals.Get(i));
                                individuals.Add(o);
                            }
                        }
                    }
                }
                else
                {
                    //The offspring were made from 2 parents
                    //If offspring is better than both parents, replace both parents and add a random AIPlayer
                    bool betterThanParent1 = false;
                    bool betterThanParent2 = false;
                    for (int i = 0; i < individuals.Count; i++)
                    {
                        if (individuals.Get(i) == o.Parent1 && individuals.Get(i).GetFitness() < o.Parent1.GetFitness())
                        {
                            betterThanParent1 = true;
                        }
                        if (individuals.Get(i) == o.Parent2 && individuals.Get(i).GetFitness() < o.Parent2.GetFitness())
                        {
                            betterThanParent2 = true;
                        }
                    }

                    //if better than both parents, remove both parents and add a random immigrant
                    if (betterThanParent1 && betterThanParent2)
                    {
                        individuals.Remove(o.Parent1);
                        individuals.Remove(o.Parent2);
                        individuals.Add(o);
                        AIPlayer randomImmagrant = new AIPlayer(simulation.NeuralNetworkMaker);
                        randomImmagrant.CalcFitness(simulation.Game);
                        individuals.Add(randomImmagrant);
                    }
                }
            }
            individuals.Crop(individuals.Count / 2);
            while (individuals.Count < simulation.PopulationSize)
            {
                AIPlayer randomImmagrant = new AIPlayer(simulation.NeuralNetworkMaker);
                randomImmagrant.CalcFitness(simulation.Game);
                individuals.Add(randomImmagrant);
            }
        }
 public void Merge(SortList <AIPlayer> individuals, List <AIPlayer> offspring, Simulation simulation)
 {
     //If having only single parent, replace it with a probability
     foreach (AIPlayer o in offspring)
     {
         if (o.Parent2 == null)
         {
             if (o.GetFitness() > o.Parent1.GetFitness() && individuals.Contains(o.Parent1))
             {
                 individuals.Remove(o.Parent1);
             }
             individuals.Add(o);
         }
         else
         {
             //The offspring were made from 2 parents
             AIPlayer firstPriority  = null;
             AIPlayer secondPriority = null;
             if (Utility.RandomNum.RandomInt(0, 2) == 0)
             {
                 firstPriority  = o.Parent1;
                 secondPriority = o.Parent2;
             }
             else
             {
                 firstPriority  = o.Parent2;
                 secondPriority = o.Parent1;
             }
             if (o.GetFitness() > firstPriority.GetFitness() && individuals.Contains(firstPriority))
             {
                 individuals.Remove(firstPriority);
                 individuals.Add(o);
             }
             else if (o.GetFitness() > secondPriority.GetFitness() && individuals.Contains(secondPriority))
             {
                 individuals.Remove(secondPriority);
                 individuals.Add(o);
             }
         }
     }
 }
Example #3
0
        public void RemoveProfession(Type type)
        {
            Profession pro = null;
            foreach (Profession profession in Professions.Get())
                if (profession.GetType() == type)
                    pro = profession;

            if (pro == null)
                return;

            pro.RemoveEffect();
            Professions.Remove(pro.Importance);
            if (MainProfession == pro)
            {
                if (Professions.Length == 0)
                    MainProfession = null;
                Profession[] un = Professions.Get();
                List<Profession> list = un.ToList();
                list.Reverse();
                MainProfession = list[0];
            }
        }