C#实现遗传算法 模拟花朵的进化

以下代码实现了一个简单的花朵进化的模拟过程。
  花朵的种群数量是10,共进化了50代。  通过运行程序,你会发现通过不断的进化,种群的总的适应环境的能力在逐步提高(fitness的值下降)。
  实现代码:


  using System;
  using System.Collections.Generic;
  using System.Text;
  namespace GA
  {
  class Program
  {
  static void Main(string[] args)
  {
  World world = new World();
  world.Init();
  for (int i = 0; i < 50; i++)
  {
  world.Evolve();
  Console.WriteLine(i);
  world.Show();
  }
  }
  }
  class World
  {
  int kMaxFlowers = 11;
  Random Rnd = new Random();
  public int[] temperature;
  public int[] water;
  public int[] sunlight;
  public int[] nutrient;
  public int[] beneficialInsect;
  public int[] harmfulInsect;
  public int currentTemperature;
  public int currentWater;
  public int currentSunlight;
  public int currentNutrient;
  public int currentBeneficialInsect;
  public int currentHarmfulInsect;
  public World()
  {
  temperature = new int[kMaxFlowers];
  water = new int[kMaxFlowers];
  sunlight = new int[kMaxFlowers];
  nutrient = new int[kMaxFlowers];
  beneficialInsect = new int[kMaxFlowers];
  harmfulInsect = new int[kMaxFlowers];
  }
  /**//// <summary>
  /// 初始化第一代花朵的基因结构
  /// </summary>
  public void Init()
  {
  for (int i = 1; i < kMaxFlowers; i++)
  {
  temperature = Rnd.Next(1, 75);
  water = Rnd.Next(1, 75);
  sunlight = Rnd.Next(1, 75);
  nutrient = Rnd.Next(1, 75);
  beneficialInsect = Rnd.Next(1, 75);
  harmfulInsect = Rnd.Next(1, 75);
  }
  currentTemperature = Rnd.Next(1, 75);
  currentWater = Rnd.Next(1, 75);
  currentSunlight = Rnd.Next(1, 75);
  currentNutrient = Rnd.Next(1, 75);
  currentBeneficialInsect = Rnd.Next(1, 75);
  currentHarmfulInsect = Rnd.Next(1, 75);
  }
  /**//// <summary>
  /// 越大说明花朵的适应环境的能力差,小说明适应环境的能力强
  /// </summary>
  /// <param name="flower"></param>
  /// <returns></returns>
  private int Fitness(int flower)
  {
  int theFitness = 0;
  theFitness = Math.Abs(temperature[flower] - currentTemperature);
  theFitness = theFitness + Math.Abs(water[flower] - currentWater);
  theFitness = theFitness + Math.Abs(sunlight[flower] -
  currentSunlight);
  theFitness = theFitness + Math.Abs(nutrient[flower] -
  currentNutrient);
  theFitness = theFitness + Math.Abs(beneficialInsect[flower] -
  currentBeneficialInsect);
  theFitness = theFitness + Math.Abs(harmfulInsect[flower] -
  currentHarmfulInsect);
  return (theFitness);
  }
  /**//// <summary>
  /// 排除适应能力差的花朵,让适应能力强的花朵杂交繁殖,产生下一代。同时有一定的概率变异。
  /// </summary>
  public void Evolve()
  {
  int[] fitTemperature = new int[kMaxFlowers];
  int[] fitWater = new int[kMaxFlowers];
  int[] fitSunlight = new int[kMaxFlowers];
  int[] fitNutrient = new int[kMaxFlowers];
  int[] fitBeneficialInsect = new int[kMaxFlowers];
  int[] fitHarmfulInsect = new int[kMaxFlowers];
  int[] fitness = new int[kMaxFlowers];
  int i;
  int leastFit = 0;
  int leastFitIndex = 1;
  for (i = 1; i < kMaxFlowers; i++)
  if (Fitness(i) > leastFit)
  {
  leastFit = Fitness(i);
  leastFitIndex = i;
  }
  temperature[leastFitIndex] = temperature[Rnd.Next(1, 10)];
  water[leastFitIndex] = water[Rnd.Next(1, 10)];
  sunlight[leastFitIndex] = sunlight[Rnd.Next(1, 10)];
  nutrient[leastFitIndex] = nutrient[Rnd.Next(1, 10)];
  beneficialInsect[leastFitIndex] = beneficialInsect[Rnd.Next(1, 10)];
  harmfulInsect[leastFitIndex] = harmfulInsect[Rnd.Next(1, 10)];
  for (i = 1; i < kMaxFlowers; i++)
  {
  fitTemperature = temperature[Rnd.Next(1, 10)];
  fitWater = water[Rnd.Next(1, 10)];
  fitSunlight = sunlight[Rnd.Next(1, 10)];
  fitNutrient = nutrient[Rnd.Next(1, 10)];
  fitBeneficialInsect = beneficialInsect[Rnd.Next(1, 10)];
  fitHarmfulInsect = harmfulInsect[Rnd.Next(1, 10)];
  }
  for (i = 1; i < kMaxFlowers; i++)
  {
  temperature = fitTemperature;
  water = fitWater;
  sunlight = fitSunlight;
  nutrient = fitNutrient;
  beneficialInsect = fitBeneficialInsect;
  harmfulInsect = fitHarmfulInsect;
  }
  for (i = 1; i < kMaxFlowers; i++)
  {
  if (Rnd.Next(1, 100) == 1)
  temperature = Rnd.Next(1, 75);
  if (Rnd.Next(1, 100) == 1)
  water = Rnd.Next(1, 75);
  if (Rnd.Next(1, 100) == 1)
  sunlight = Rnd.Next(1, 75);
  if (Rnd.Next(1, 100) == 1)
  nutrient = Rnd.Next(1, 75);
  if (Rnd.Next(1, 100) == 1)
  beneficialInsect = Rnd.Next(1, 75);
  if (Rnd.Next(1, 100) == 1)
  harmfulInsect = Rnd.Next(1, 75);
  }
  }
  /**//// <summary>
  /// 显示种群中个体对环境的适应能力,还有所有个体对环境的适应能力之和。
  /// </summary>
  public void Show()
  {
  int sum = 0;
  for (int i = 1; i < kMaxFlowers; i++)
  {
  int fitness = Fitness(i);
  sum += fitness;
  Console.WriteLine("No." + i + "'s fitness is " + fitness);
  }
  Console.WriteLine("fitness sum is " + sum);
  }
  }
  }