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)
{
{
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
- AForge学习笔记(4):AForge.Genetic
- AForge学习笔记(2):AForge.Controls
- AForge学习笔记(1):AForge
- AForge学习笔记(2):AForge.Controls
- AForge学习笔记(5):AForge.Imaging(上)
- AForge学习笔记(5):AForge.Imaging(下)
- AForge学习笔记(8):AForge.Imaging.ColorReduction
- AForge学习笔记(9):AForge.Imaging.ComplexFilters
- AForge学习笔记(11):AForge.Imaging.Textures
- AForge学习笔记(8):AForge.Imaging.ColorReduction
- AForge学习笔记(9):AForge.Imaging.ComplexFilters
- AForge学习笔记(10):AForge.Imaging.Filters
- AForge学习笔记(11):AForge.Imaging.Textures
- AForge学习笔记(3):AForge.Fuzzy
- AForge学习笔记(3):AForge.Fuzzy
- aforge.net
- AForge.Net
- PowerDesigner 12.5 开启注释列 将Comment(注释)及Name(名称)内容互相COPY的VBS代码 根据名称生成注释(完整示例)
- Web前端之网页导航----创新工场
- Shell基础(01):bourne shell中的stty和控制字符(Control组合键)
- 屌丝对微软关键字__declspec (novtable)的浅显理解
- c#连接Redis---(1)Redis的安装与配置
- AForge学习笔记(4):AForge.Genetic
- 关于tomcat不能启动的问题(NB:JAVA_HOME should point to a JDK not a JRE)
- JAVA_WEB经典面试题
- handler进程与线程的基础知识
- c# 用反射实现winform界面动态存储理论知识
- 项目管理 笔记之三 —— 项目综合管理
- NetBIOS、Samba、CIFS概念及相关
- linux-UDP
- java编码 乱码解析