測試函數(shù)優(yōu)化后為什么不是全局最優(yōu)值?是不是程序錯(cuò)了?怎么評(píng)估算法性能?

首先明確一下,測試函數(shù)的作用的是用來測試優(yōu)化算法的性能,以方便比較各種優(yōu)化算法性能上的優(yōu)劣。目前在優(yōu)化算法領(lǐng)域,測試函數(shù)專指cec(國際進(jìn)化計(jì)算會(huì)議))上每年發(fā)布的函數(shù),如下圖:

254002-1.png

cec測試函數(shù)每年或者每幾年都會(huì)更新,測試函數(shù)分為單峰、多峰、動(dòng)態(tài)、靜態(tài)等,測試函數(shù)會(huì)給定變量范圍、維度以及該函數(shù)的全局最優(yōu)解,方便大家在測試的時(shí)候進(jìn)行對(duì)比。不同的測試函數(shù)可以測試算法不同方面的性能,當(dāng)某個(gè)測試函數(shù)優(yōu)化后為全局最優(yōu)值時(shí),說明該算法在該測試函數(shù)上達(dá)到了理想效果;如果沒有達(dá)到全局最優(yōu)值,說明在該測試函數(shù)上效果還不是最好的,但是可以和其他優(yōu)化算法去進(jìn)行最優(yōu)值的比較,以顯示算法的優(yōu)劣。一般,測試函數(shù)在測試的時(shí)候肯定不會(huì)只選用一個(gè)測試函數(shù),而是會(huì)選用多個(gè)測試函數(shù)(最好是不同類型的),以方便對(duì)算法進(jìn)行各方面的評(píng)判。

所以,優(yōu)化算法進(jìn)行測試時(shí)沒有達(dá)到全局最優(yōu)解,那是一個(gè)很正常的事情,不用去太過懷疑代碼是不是有問題。相反,如果一個(gè)算法優(yōu)化效果很好,所有的測試函數(shù)測試了都是全局最優(yōu)解,那優(yōu)化算法這個(gè)領(lǐng)域以后就不用研究和學(xué)習(xí)了,因?yàn)檫@個(gè)學(xué)科領(lǐng)域已經(jīng)被“通關(guān)”了........................

那么一個(gè)優(yōu)化算法在進(jìn)行測試函數(shù)測試了之后,該如何評(píng)判測試效果呢。最簡單的就是看求得的最優(yōu)值是不是夠小或者夠大,是不是全局最優(yōu)值,不同算法之間對(duì)比即可,這是最簡單的方法。

最嚴(yán)謹(jǐn)最正式的評(píng)測方法是多次運(yùn)行算法對(duì)同一個(gè)測試函數(shù)進(jìn)行優(yōu)化,記錄每次的最優(yōu)目標(biāo),然后計(jì)算目標(biāo)多次運(yùn)行的平均值和方差。平均值可以用來規(guī)避算法中隨機(jī)數(shù)對(duì)計(jì)算結(jié)果的影響,可以比較客觀的評(píng)價(jià)算法的收斂效果。方差可以表征算法優(yōu)化的穩(wěn)定性,當(dāng)然這個(gè)也是隨機(jī)數(shù)造成的,有時(shí)候效果好,有時(shí)候效果不好。在進(jìn)行計(jì)算之后,還要將算法的計(jì)算指標(biāo)用箱型圖來繪畫,可以直觀的進(jìn)行比較。

254002-2.png





請(qǐng)前往:http://lygongshang.com/TeacherV2.html?id=269