遗传算法简介:

在学习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)进行种群的算法运算(迭代运算)

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

      

      

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

AForge学习笔记(4):AForge.Genetic相关推荐

  1. AForge学习笔记(3):AForge.Fuzzy

    AForge.Fuzzy 提供了大量的模糊集操作. FuzzySet:模糊集是模糊应用的基础,也是理解模糊应用的关键,我们通过一个例子理解模糊集的概念:在现实生活中我们以冷暖来直观的描述温度,例如我们 ...

  2. AForge学习笔记(5):AForge.Imaging(上)

    作者:GAO-XIANG 转自:http://blog.csdn.net/xiang__jiangsu/article/details/8131141 本次我们一起来学习AForge中影像处理算法以及 ...

  3. AForge学习笔记(1):AForge

    作者:GAO-XIANG 转自:http://blog.csdn.net/xiang__jiangsu/article/details/8119297 本次主要简单介绍AForge.NET中的  AF ...

  4. AForge学习笔记(2):AForge.Controls

    作者:GAO-XIANG 转自:http://blog.csdn.net/xiang__jiangsu/article/details/8120414 首先我们在VS2010中添加AForge.Con ...

  5. AForge学习笔记(5):AForge.Imaging(下)

    作者:GAO-XIANG 转自:http://blog.csdn.net/xiang__jiangsu/article/details/8138326 ImageStatistics:对图像的RGB进 ...

  6. AForge学习笔记(10):AForge.Imaging.Filters

    作者:GAO-XIANG 转自:http://blog.csdn.net/xiang__jiangsu/article/details/8144304 AdaptiveSmoothing:图像平滑处理 ...

  7. C#学习之 调用 AForge.NET Framework 启动摄像头

    今天开始捣鼓C#启动摄像头,之前做过用 C++调用OPENCV库启动摄像头,C#理论上也可以. 但是看了    这篇博文笔记, 顿时脑洞大开,原来可以和摄像头打交道的库有这么多啊.之前,我就直到OPE ...

  8. 一文弄懂元学习 (Meta Learing)(附代码实战)《繁凡的深度学习笔记》第 15 章 元学习详解 (上)万字中文综述

    <繁凡的深度学习笔记>第 15 章 元学习详解 (上)万字中文综述(DL笔记整理系列) 3043331995@qq.com https://fanfansann.blog.csdn.net ...

  9. Robust PCA 学习笔记

    很久没有写学习笔记了,年初先后忙考试,忙课程,改作业,回家刚安定下来,读了大神上学期给的paper,这几天折腾数学的感觉很好,就在这里和大家一起分享一下,希望能够有所收获.响应了Jeffrey的建议, ...

最新文章

  1. if语句的一个错误记录,多了个“;”号
  2. win2012故障转移mysql集群_Windows下SQLSERVER故障转移集群案例
  3. 老罗Android开发视频分享
  4. python脚本操作excel
  5. Pascal voc 2012 数据集简介
  6. 【阅读笔记】《创京东:刘强东亲述创业之路》
  7. 基于linux环境tcp网络编程(在线英英词典)文档 [1]
  8. sap系统搭建教程_SAP系统和微信集成的系列教程之一:微信开发环境的搭建
  9. 易语言html截图,易语言如何指定区域截图;易语言怎么才能全屏截图
  10. C# 使用Microsoft Speech朗读文本
  11. 相机模型--针孔相机投影(pinhole camera model)
  12. Hypermesh二次开发系列003
  13. java计算器取负数_JAVA-复数计算器
  14. jQuery uploadify 文件上传
  15. oppo k10 Pro和iqooneo6哪个性能更强 哪个值得买呢
  16. OrCAD+PADS联合绘制PCB的总结
  17. Nginx性能调优,解决C10K问题
  18. 计算机怎么弹奏送给未来的你,致未来的你经典句子 致未来的你好词好句
  19. STM32基于WiFi和蓝牙的内外网通信
  20. 你好Python!再见Excel?

热门文章

  1. java与javax有什么区别?
  2. Java和Javax
  3. conda:安装python
  4. 非线性规划(凸规划,无约束最优化方法,约束最优化方法)
  5. 如何混淆JavaWeb代码
  6. 【转载】【UEFI学习】edk2中各个包介绍
  7. 介绍国产的PHP MVC框架:FleaPHP
  8. 英雄联盟手游常见问题
  9. android系统关机广播,android关机方法汇总
  10. 手把手 Golang 实现静态图像与视频流人脸识别