组件生产数学建模模拟题中使用遗传算法的改进和认识

版权声明:本文为博主编写文章,未经博主允许转载,转载请注明出处: https://blog.csdn.net/qq_39742013/article/details/81989641

遗传算法的最终结果可能每次都不一样。基于路径编码说明。

对于目标函数是求最小值时,在设计适应函数时,可以使用常数/目标函数值(大于0)的式子给出。用除法可以将有更小值的个体应该有更大的概率被选择,除法很好体现了这一点。用加减法在选择空间即选择纬度很小或者问题规模小时效果很糟糕,目标函数值差距不大,导致被选择的概率差距不大,所以好的个体和坏的个体被选择的可能性拉不开差距,从而最后求解得到的曲线波动很大。所以对于小数据问题选用除法对加减法进行了改进。这个常数的选取有点困难。

如果偏小(意思是与最优值很接近),由于大部分个体都不小于这个常数值,即使有好的个体,因为不好个体的大量存在,所以他们之间占比很容易知道是差不多的。从而很多不好的个体会被选择,所以不管训练多少轮数很难逼近最优值。尽量偏大一点,设置为目标函数的最大值也是可以的,题目未告知最大值或者不能算出来,则可以试验一下,设置多个值,多跑一下程序,选择最好的。

在求解最优化问题的时候,如果是连续数据可以离散化再计算。对于离散化的数据,如果目标函数不能用线性表示出来,比如工序要求每个组件必须在其他组件完成之后完成,这样的限制,用约束条件也不便于表达,这个时候可以考虑使用遗传算法、模拟退火算法等,因为像遗传算法可以自己定义目标函数,表达清晰方便。

路径编码比较二进制编码,二进制肯定占用内存小,但是在小数据问题中可以使用路径编码,因为路径编码直观而且好操作,不用转码到一些量,因为这个编码就是直接通过这些量(比如TSP问题中地点编号)来得到的。拿TSP问题来说,使用二进制编码与使用路径编码在选择、交叉和变异操作的时候没有本质区别,因为都是一些自变量的值发生改变。

TSP问题向量里面的地点编号不能重复,而有些问题允许这个待选择的向量里面的值重复,实现很简单自己写算子。只是注意在交叉算子中尽量不要让子代和父代发生很大的变动,否则变动很大,最后很难收敛。轮盘赌选择法比较常用于选择操作中,选择的依据与适应度大小有关。

最后附一张组件生产问题自己设计的遗传算法的结果图:

猜你喜欢

转载自blog.csdn.net/qq_39742013/article/details/81989641