Ejemplo n.º 1
0
 // 初期化
 public override void Initialize()
 {
     for (int i = 0; i < InitialPopulationSize; i++)
     {
         _genes.Add(GAUtility.GenerateGene(ChromosomesType, CalcFunc, GeneLength));
         _populationSize++;
     }
 }
Ejemplo n.º 2
0
 public override void Mutation(int index)
 {
     switch (MutationType)
     {
     case MutationType.Swap:
         _genes[index].Chromosomes = GAUtility.SwapMutation(_genes[index].Chromosomes, MutationRate);
         break;
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 選択
        /// </summary>
        /// <returns>選択された遺伝子のインデックス</returns>
        public override int Selection()
        {
            var fittnessValues = _genes.Select(x => x.Fittness).ToArray();

            switch (SelectionType)
            {
            case SelectionType.Roulette:
                return(GAUtility.RouletteSelection(fittnessValues));

            case SelectionType.Rank:
                return(GAUtility.RankSelection(fittnessValues));

            default:
                throw new ArgumentException();
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 交叉
        /// </summary>
        public override List <int>[] CrossOver()
        {
            var targetIndeces = Enumerable.Range(0, _genes.Count).Shuffle().Take(2).ToArray();

            switch (CrossOverType)
            {
            case CrossOverType.SinglePoint:
                return(GAUtility.SinglePointCrossOver(_genes[targetIndeces[0]].Chromosomes, _genes[targetIndeces[1]].Chromosomes));

            case CrossOverType.DoublePoint:
                return(null);

            case CrossOverType.PermutationSinglePoint:
                return(GAUtility.PermutationCrossOver(_genes[targetIndeces[0]].Chromosomes, _genes[targetIndeces[1]].Chromosomes, isSingleCross: true));

            case CrossOverType.PermutationDoublePoint:
                return(GAUtility.PermutationCrossOver(_genes[targetIndeces[0]].Chromosomes, _genes[targetIndeces[1]].Chromosomes, isSingleCross: false));

            default:
                return(null);
            }
        }