AForge学习笔记(4):AForge.Genetic

来源:互联网 发布:灰鹦鹉淘宝能退吗 编辑:程序博客网 时间:2024/05/18 02:31

遗传算法简介:

在学习AForge的遗传算法之前,我们首先简单介绍一下遗传算法的理念:遗传算法的提出是源于达尔文进化论思想的启发,优胜劣汰,适者生存,适应力强的生存下去的几率更大,那么在算法上我们用适应性函数来模拟遗传学中的适应性强度,函数值越大说明适应能力越强,被继续保留的概率越大。在算法当中有几个主要术语:种群(Population),基因(Gene),染色体(chromosome)。种群被定义为具有一定规模(一定种子数)的群落的集合,种群由染色体组成,染色体由基因组成。算法流程如下:首先我们通过随机抽样的方式创建一个种群,为种群中的软色体(种子)计算适应力强度,根据适应力强度进行种子的再选,交叉,突变,生成新的种子点重复以上过程。


AForge中的实现:

我们通过实例学习AForge是怎样通过遗传算法解决问题的。引入的问题是求解函数最大值。

求解函数最大值问题:

        // 首先创建适应度函数,UserFunction即是我们所说的适应度方程
public class UserFunction : OptimizationFunction1D
{
public UserFunction( ) : base( new Range( 0, 255 ) ) { }//生成新范围
public override double OptimizationFunction( double x )
{
            //适应度函数
            return Math.Pow(Math.Cos(x / 23) * Math.Sin(x / 50), 2) + Math.Pow(Math.Cos(x / 23) * Math.Sin(x / 50), 5) + 2;
}
}

         // 创建种群,第一参数为种群数,第二参数为染色体对象,第三参数为适应度函数,第四参数为染色体选择方法
         Population population = new Population( populationSize,
         new BinaryChromosome( chromosomeLength ),userFunction,
         ( selectionMethod == 0 ) ? (ISelectionMethod) new EliteSelection( ) ://精英选择
         ( selectionMethod == 1 ) ? (ISelectionMethod) new RankSelection( ) ://范围选择
         (ISelectionMethod) new RouletteWheelSelection( ));//轮盘选择
         // 设置最优化模式
          userFunction.Mode = ( optimizationMode == 0 ) ?
          OptimizationFunction1D.Modes.Maximization ://最大值寻求方程
          OptimizationFunction1D.Modes.Minimization;//寻求方程最小值
        // 迭代次数初始化
          int i = 1;
        // 染色体以及适应度强度
          double[,] data = new double[ populationSize, 2];
       // 迭代循环
           while (!needToStop)
           {

               for ( int j = 0; j < populationSize; j++ )

           {

           data[j, 0] = userFunction.Translate( population[j] );//将二进制染色体转译成数值型
           data[j, 1] = userFunction.OptimizationFunction( data[j, 0] );//染色体适应度求解

           }

           if ( ( iterations != 0 ) && ( i > iterations ) )//是否超过迭代次数
                 break;

           }

通过以上算法,我们发现AForge中的遗传算法一般步骤为:

1)声明适应度函数

2)创建种群对象,其中包括种群数的确定,染色体对象创建,种子点选择方法的确定

3)进行种群的算法运算(迭代运算)

通过程序的运算结果我们再次理解遗传算法理念:

      

      

随着迭代次数的增加,种子点的适应度(函数值的大小)逐渐增强,最后适应度最强(函数值最大)的种子点被选中。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 摄政王怀里的团宠美人娇又软 满级千金不想掉马 女帝她就是个卖药的! 华娱激荡年代 她来看我的演唱会 快穿:娇养反派大佬做替身 不努力种田就要和相公继承皇位了 穿书末世之我是金手指 转生恶少后的魔幻日常 穿书后我成了反派男二的铁血妈粉 带着超市重返年代 新婚夜,我被冷冰冰的王爷读心了 修仙女配拿了反派剧本 影后的假面童话 克死前夫后我成了心软的神 新婚夜,我治好了失明太子的隐疾 沦陷野玫瑰 完球!我的崽居然是反派 重生后她被憨憨相公娇宠了 师祖回归,徒弟各个是疯批大佬 植物人老公苏醒后,她只想逃 他怎么可能是魔尊 农家小团宠:带着空间撩大佬 快穿做个好婆婆 医路芳华 满级真千金:一品女法医 惊!举重妖精被电竞奶狗缠上了 团宠小农女:带着功德空间去逃荒 被迫快穿后我只想当咸鱼 顶流影帝竹马来讨债 穿越后,太子妃靠种田轰动全京城 高考结束后我和死对头HE了 掉马后满级大佬被迫在热搜上开挂 农门悍妻:黑心莲夫君求抱抱 今日宜婚 嗜酒成瘾 肆意诱哄 快穿之反派女配是bug 落水后,我抢了未来首辅的婚! 玄学大佬在八零年代暴富了! 亚人娘补完手册