先看结果
这里没有最短步数的解法,只能完成一个推箱。
有些要解决的问题有较短的解,或者不同的解有不同的长度,主要解决这个问题。
设置种群时,使用相同的固定长度,即最长的长度作为整个种群的长度。
在适应度函数——中做一个判断,如果个人前面部分已经满足,就爆发,回到适应度。
如果后面要找最短的个体,需要配合惩罚因子,比如用前面部分的长度作为系数。
适应度=之前计算的适应度的前端部分的长度*惩罚因子
这样,在每一次迭代中,前一段满意的个体就会被挑选出来,或者说满意的时间越短,被挑选出来的就越多。
Matlab的优化工具箱还是很好用的。不需要写优化算法,通过完成适应度函数就可以求解。
添加绘图参数配置也可以在迭代过程中观察到。
像这样调用语句
fitnessfcn=@ Sokaban _ fun%适应度函数的句柄
nvars=numel(map);个体变量的百分比
LB=0.5 * one (nvars, 1)' % lower limit
UB=4.4 * one (nvars, 1)' % upper limit
options=gaoptimset('PopulationSize',40,'PopInitRange',[LB;UB],
'EliteCount',10,'CrossoverFraction',0.6,'Generations',40,
'StallGenLimit',20,'TolFun',1e-10,'PlotFcns',
{@gaplotbestf,@ gaplotbestinp });% 算法参数设置
[x_best,fval]=ga(fitnessfcn,nvars, [],[],[],[],LB,UB,[],options);
%运行遗传算法
非常适合那些真正需要解决最优目标,其他需求更好的人(比如作业和毕业设计,目标不是关键,而是过程)
刚开始想用Android模拟器运行推盒游戏,主要是因为安装模拟器需要很长时间,尤其是虚拟化的问题。
想法是得到图像,分析出游戏环境就是这个地图,结果没有实现。我们不得不在200多项待办事项中再增加一项。
标题:遗传算法求解推箱子
链接:https://www.52hkw.com/news/rj/54872.html
版权:文章转载自网络,如有侵权,请联系删除!