当前位置:首页>网络学院>程序开发>c#教程>文章内容

C#实现花朵传粉的遗传算法

[ 来源:http://www.it55.com | 作者: | 时间:2008-01-11 | 收藏 | 推荐 ] 【

     
   以下代码实现了一个简单的花朵进化的模拟过程。
  花朵的种群数量是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 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>
   /// 排除适应能力差的花朵,让适应能力强的花朵杂交繁殖,产生下一代。同时有一定的概率变异。

(编辑:IT资讯之家 www.it55.com

返回顶部
共2页: 上一页 1 [2] 下一页  

网友评论

[以下评论为网友观点,不代表本站。请自觉遵守互联网相关政策法规,所有连带责任均有评论者自负。]
[不超过250字]