展会信息港展会大全

C#实现遗传算法 模拟花朵的进化
来源:互联网   发布日期:2011-09-07 13:38:07   浏览:6737次  

导读:文章标题:C#实现遗传算法 模拟花朵的进化。.net频道提供大量的.net开发的编程教程,包括asp.net,vc.net,vb.net,c#编程等内容。致力打造高效的Dotnet技术库...

欢迎进入.NET社区论坛,与300万技术人员互动交流 >>进入

  以下代码实现了一个简单的花朵进化的模拟过程。
  花朵的种群数量是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[i] = Rnd.Next(1, 75);

   water[i] = Rnd.Next(1, 75);

   sunlight[i] = Rnd.Next(1, 75);

   nutrient[i] = Rnd.Next(1, 75);

   beneficialInsect[i] = Rnd.Next(1, 75);

   harmfulInsect[i] = 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></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)];

   sunlig

赞助本站

人工智能实验室
相关内容
AiLab云推荐
推荐内容
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港