测试函数优化后为什么不是全局最优值?是不是程序错了?怎么评估算法性能?

首先明确一下,测试函数的作用的是用来测试优化算法的性能,以方便比较各种优化算法性能上的优劣。目前在优化算法领域,测试函数专指cec(国际进化计算会议))上每年发布的函数,如下图:

254002-1.png

cec测试函数每年或者每几年都会更新,测试函数分为单峰、多峰、动态、静态等,测试函数会给定变量范围、维度以及该函数的全局最优解,方便大家在测试的时候进行对比。不同的测试函数可以测试算法不同方面的性能,当某个测试函数优化后为全局最优值时,说明该算法在该测试函数上达到了理想效果;如果没有达到全局最优值,说明在该测试函数上效果还不是最好的,但是可以和其他优化算法去进行最优值的比较,以显示算法的优劣。一般,测试函数在测试的时候肯定不会只选用一个测试函数,而是会选用多个测试函数(最好是不同类型的),以方便对算法进行各方面的评判。

所以,优化算法进行测试时没有达到全局最优解,那是一个很正常的事情,不用去太过怀疑代码是不是有问题。相反,如果一个算法优化效果很好,所有的测试函数测试了都是全局最优解,那优化算法这个领域以后就不用研究和学习了,因为这个学科领域已经被“通关”了........................

那么一个优化算法在进行测试函数测试了之后,该如何评判测试效果呢。最简单的就是看求得的最优值是不是够小或者够大,是不是全局最优值,不同算法之间对比即可,这是最简单的方法。

最严谨最正式的评测方法是多次运行算法对同一个测试函数进行优化,记录每次的最优目标,然后计算目标多次运行的平均值和方差。平均值可以用来规避算法中随机数对计算结果的影响,可以比较客观的评价算法的收敛效果。方差可以表征算法优化的稳定性,当然这个也是随机数造成的,有时候效果好,有时候效果不好。在进行计算之后,还要将算法的计算指标用箱型图来绘画,可以直观的进行比较。

254002-2.png





请前往:http://www.mark-to-win.com/TeacherV2.html?id=269