今天来学习一下遗传算法,其实相关的代码已经找到了,但是想先学一下,因为我发现我有些地方不能纯看代码看懂。还是得辅佐一下。
说白了就是模拟生物进化的,那么我们先构建一个模拟生物进化的模型,
首先,我们可以想象一下,
1.有三十只兔子在某一块地皮上,这就是初始种群。
2.这三十只兔子会相互繁育下一代,这之中会产生基因的交叉,即父母的染色体各取一条。还会产生染色体变异
3.产生的下一代还会不断的产生基因的交换与变异
4.物竞天择——因为某一个特定的规则,这个兔子活了下来,这里会复杂一点
我们可以简单思考一下,即使是物竞天择了、也不止是强壮的兔子活了下来,还有一些兔子侥幸活了下来。所以我们如果在模型里进行的话,简单来说,就是这个兔子的强壮程度决定了他活下去的概率。并且,这个兔子的强壮程度还会决定它的染色体会更优先被选中,即更容易发生交换(变异是无时无刻的,没有选择的)
在解释了一下遗传算法的基础思想之后,我们还要提一嘴
遗传算法,本质上还是在寻找最优解,它也是模拟的种群遗传去寻找最优解的。跟上次的模拟退火是一样的,目的上并没有区别。
1,相关的函数及解释
适应度函数(fitness function)
这个函数是基于你所添加的判断去计算适应度的。比方说,你想计算一个完全没有规律的函数的最优解,那么所有兔子越偏向优解的,越具有适应度。适应度函数就取决于你想要计算最优解的函数
选择函数(selection)
选择函数指的是种群选择度,是来源于适应度的,适应度越高,其越会被选择,当然这是概率层面更高,并非适应度低就完全不行。
染色体交叉与变异
理论上,将染色体转为二进制是最正规的,但是其本身是“像”而非好用(个人理解),我们正常使用,用浮点数就完全ok,当然,浮点数是有弊端的,不像二进制那种随意交换,我们可以选择把重点放在变异
染色体变异则是我们可想而知的东西。比方说,这个染色体的浮点数编码是1.1,2.5,4.6,之后发生变异,这个变异可以大也可以小,可以增也可以减,这些都可以,但是由于刚开始计算为了尽快到达尽量优解,而后期想要更为精确的到达最优解,我们可以动态规划变异,即刚开始变异步幅大,后期变异步幅小,可以在种群繁衍几十次之后修改,动态就好。
标签:函数,变异,兔子,染色体,数模,适应度,遗传算法 From: https://www.cnblogs.com/nish1hundun/p/17029995.html