上篇初识遗传算法讲述了遗传算法的基本思想,这篇博客就用遗传算法求解方程。
具体的如下:
求解方程 -x^3+7*x+13=0 在[3,4]区间的解,解精确到0.001,交叉概率0.7
变异概率0.01,迭代次数为100,字符编码长度为10(二进制编码)
首先简单的分析一下:
1、编码与解码
题目要求的是采用二进制的编码方式来实现,既然已经编码了,自然就需要解码,给定的10
位二进制编码表示的区间范围就是0~1023,题目的区间是[3,4]很自然的就能想到10位二进
制编码中的0表示是就是[3,4]中的3,1023表示的就是[3,4]中的4,所以,每个二进制对应的
十进制就是((10位二进制对应的十进制数/1023)+3),这个就是解码后的在区间[3,4]中的具体值。
2、适应度函数
这里取的适应度函数是方程绝对值的倒数,即f=1/(|-x^3+7*x+13|)
3、选择算子
确定选择比例,采用轮盘赌算法。
/// <summary> /// 模拟轮盘赌选择算法 /// 思路:1.求适应度的总和;2.计算每个个体适应度所占的比例(除第一个之外,其他的都是叠加); /// 3.在0~1产生随机数,这个随机数所在的区间,就是要选择的个体 /// </summary> /// <returns>选择出来的优秀个体</returns> static List<int> RWS(List<double> list) { List<int> select = new List<int>(); List<double> p = new List<double>(); double sum = list.Sum()/*