測試函數(shù)優(yōu)化后為什么不是全局最優(yōu)值?是不是程序錯了?怎么評估算法性能?
首先明確一下,測試函數(shù)的作用的是用來測試優(yōu)化算法的性能,以方便比較各種優(yōu)化算法性能上的優(yōu)劣。目前在優(yōu)化算法領(lǐng)域,測試函數(shù)專指cec(國際進化計算會議))上每年發(fā)布的函數(shù),如下圖:
cec測試函數(shù)每年或者每幾年都會更新,測試函數(shù)分為單峰、多峰、動態(tài)、靜態(tài)等,測試函數(shù)會給定變量范圍、維度以及該函數(shù)的全局最優(yōu)解,方便大家在測試的時候進行對比。不同的測試函數(shù)可以測試算法不同方面的性能,當(dāng)某個測試函數(shù)優(yōu)化后為全局最優(yōu)值時,說明該算法在該測試函數(shù)上達到了理想效果;如果沒有達到全局最優(yōu)值,說明在該測試函數(shù)上效果還不是最好的,但是可以和其他優(yōu)化算法去進行最優(yōu)值的比較,以顯示算法的優(yōu)劣。一般,測試函數(shù)在測試的時候肯定不會只選用一個測試函數(shù),而是會選用多個測試函數(shù)(最好是不同類型的),以方便對算法進行各方面的評判。
所以,優(yōu)化算法進行測試時沒有達到全局最優(yōu)解,那是一個很正常的事情,不用去太過懷疑代碼是不是有問題。相反,如果一個算法優(yōu)化效果很好,所有的測試函數(shù)測試了都是全局最優(yōu)解,那優(yōu)化算法這個領(lǐng)域以后就不用研究和學(xué)習(xí)了,因為這個學(xué)科領(lǐng)域已經(jīng)被“通關(guān)”了........................
那么一個優(yōu)化算法在進行測試函數(shù)測試了之后,該如何評判測試效果呢。最簡單的就是看求得的最優(yōu)值是不是夠小或者夠大,是不是全局最優(yōu)值,不同算法之間對比即可,這是最簡單的方法。
最嚴謹最正式的評測方法是多次運行算法對同一個測試函數(shù)進行優(yōu)化,記錄每次的最優(yōu)目標,然后計算目標多次運行的平均值和方差。平均值可以用來規(guī)避算法中隨機數(shù)對計算結(jié)果的影響,可以比較客觀的評價算法的收斂效果。方差可以表征算法優(yōu)化的穩(wěn)定性,當(dāng)然這個也是隨機數(shù)造成的,有時候效果好,有時候效果不好。在進行計算之后,還要將算法的計算指標用箱型圖來繪畫,可以直觀的進行比較。
請前往:http://lygongshang.com/TeacherV2.html?id=269