Exemple #1
0
        /// <summary>
        /// Produces offspring decks from the current population.
        /// </summary>
        private List <HSGAIndividual> ProduceNextGeneration(List <HSGAIndividual> localCurrentPop)
        {
            List <string>         cards       = new List <string>();
            List <HSGAIndividual> localNewPop = new List <HSGAIndividual>();


            while (localNewPop.Count != 10)
            {
                GeneFunctions         gene     = new GeneFunctions();
                List <HSGAIndividual> parents  = new List <HSGAIndividual>();
                List <HSGAIndividual> children = new List <HSGAIndividual>();

                // select parents
                parents.Add(gene.SelectIndividual(localCurrentPop, logger));
                parents.Add(gene.SelectIndividual(localCurrentPop, logger));



                //crossover
                children = gene.Crossover(parents, crossoverProbability, logger);
                //mutation
                children[0].cardList = MutateIndividual(children[0].cardList);

                // sort the newly edited list
                List <Card> test = new List <Card>();
                test.AddRange(children[0].cardList.OrderBy(Card => Card._CardID.Split('_')[1].ToCharArray()[0])
                              .ThenBy(Card => Card._CardID.Split('_').Count() >= 3 ? Card._CardID.Split('_')[2].ToCharArray()[0] : Card._CardID.Split('_')[1].ToCharArray()[0]).ToList());
                children[0].cardList.Clear();
                children[0].cardList.AddRange(test);

                cards.Clear();
                for (int i = 0; i < children[0].cardList.Count; i++)
                {
                    cards.Add(children[0].cardList[i]._CardID);
                }

                children[1].cardList = MutateIndividual(children[1].cardList);

                cards.Clear();
                for (int i = 0; i < children[1].cardList.Count; i++)
                {
                    cards.Add(children[1].cardList[i]._CardID);
                }
                // add children to new population
                localNewPop.Add(children[0]);
                localNewPop.Add(children[1]);
            }
            return(localNewPop);
        }
Exemple #2
0
        /// <summary>
        /// Generates a single, validated and randomised deck.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void GenDeckButton_Click(object sender, EventArgs e)
        {
            GeneFunctions         g = new GeneFunctions();
            List <HSGAIndividual> l = new List <HSGAIndividual>();

            l.Add(new HSGAIndividual());
            l.Add(new HSGAIndividual());
            l.Add(new HSGAIndividual());
            l.Add(new HSGAIndividual());
            l[0].winRateFitness           = 25f;
            l[0].standardDeviationFitness = 1.2f;
            l[0].legalFitness             = -1f;
            l[1].winRateFitness           = 43f;
            l[1].standardDeviationFitness = 1.1f;
            l[1].legalFitness             = -1f;
            l[2].winRateFitness           = 50f;
            l[2].standardDeviationFitness = 2.0f;
            l[2].legalFitness             = -1f;
            l[3].winRateFitness           = 5f;
            l[3].standardDeviationFitness = 0.11f;
            l[3].legalFitness             = -1f;
            g.SelectIndividual(l, logger);
        }