演化计算解决多峰函数多个最优解问题

来源:互联网 发布:c语言如何使用graphics 编辑:程序博客网 时间:2024/05/17 10:08

问题描述:

其中,-10<=xi<=10, i=1,2,3..n,n=1,2,34时分别有31881324个不同的全局最优解。

设计算法(可以是任何算法)并编写程序,可做n=1234或部分或所有情况,得到全局最优解越多越好,用十进制编码,解的精确度至少到小数点后8位。

     这是Shubert函数最优解问题,《演化优化及其在微分方程反问题中的应用》一文中提出了GMLE_DD算法。

     GLME算法:全局-局部混合演化算法(Global-Local Mixed Evolutionary算法),演化分两个阶段进行,在第一阶段,既全局演化阶段,由郭涛算法产生若干哥小区域,第二个阶段,局部演化,采用精英演化算法在各个小区域中来演化出问题的解。

     GLME_DD算法是在GLME算法的基础上,将整个区域分为q个区域,再在每个区域中使用GLME算法。


     由于并行计算考试的需要,对论文中提出的方法进行了实现,在这里共享出来,C++实现,算法得到的最优解及执行时间如下表所示。源代码和算法执行结果是n = 4时的情况。

n = 1

n = 2

n = 3

n = 4

获得最优解的个数

3

18

81

324

最优值

-12.870885493870

-186.730908831023

-2709.093505572829

-39303.550054363128

GLME_DD算法运行时间

0.054秒

0.519秒

3.397秒

33.917秒

     代码是基于基本的遗传算法的框架写的,有一些不足之处,比如在筛选最优解时并不一定能得出完全不重复的解,主要是没有把握好对重复解的判断,希望有兴趣的同学帮忙修正,其他不足之处欢迎拍砖。


代码在这里下载