使用遗传算法收敛到2变量函数的全局最小值

时间:2016-09-30 11:44:24

标签: c++ algorithm genetic-algorithm genetic-programming

我使用Visual Studio C ++作为平台,试图收敛到全局最小值。

我们假设该函数是一个黑盒函数,如果我输入(x,y),我得到z。

此外,所使用的算法是一种实值遗传算法,我不会将样本转换为二进制代码,而是转换为浮点数。

https://karczmarczuk.users.greyc.fr/TEACH/IAD/GenDoc/carrGenet.pdf

我使用了附录B中提到的算法。用于找到2 - 变量函数的最小值。

f(x,y)= z

我已完成网格值搜索以获取问题的图表。我附上了图表。

f(x,y) = z

此处,从图表中可以看到图表的最小值仅为一点(0.6,1.3)。

如果我使用(x,y)的离散值(0.1的倍数),算法会收敛。例如。 0.8,0.9,2.2,5.6等。但是否则它不会收敛。

无论如何我可以修改图形以适应算法,或者我是否可以修改算法以最小化函数?

2 个答案:

答案 0 :(得分:2)

这里你的全局优化是非常尖锐的。你需要很多运气才能进入它(即很多随机的人几乎没有机会找到它)。

如果你设法让一个人在斜率上,GA将收敛到最佳状态。所以我建议更平滑的优化或尝试更多的随机值。

答案 1 :(得分:0)

我不确定你是否考虑了黑盒子的随机数生成器部分,那么你的输入函数是否有可以在随机初始化或随机突变发生的方式中表示的结构?< / p>