一、KTM-DMOEA介紹
在實際工程和現實生活中,許多優化問題具有動態性和多目標性,即目標函數會隨著環境的變化而改變,并且存在多個相互沖突的目標。傳統的多目標進化算法在處理這類動態問題時面臨著一些挑戰,如收斂速度慢、難以跟蹤動態變化的 Pareto 前沿等。因此,需要開發新的算法來有效地解決 DMOPs。
基于知識轉移和維護功能的動態多目標進化算法(Dynamic Multiobjective Evolutionary Optimization via Knowledge Transfer and Maintenance,KTM - DMOEA)是2024年提出的動態多目標進化算法(DMOEA),通過結合 KTP 和 KMS 策略,KTM - DMOEA 能夠在新環境中生成高質量的初始種群,從而緩解負遷移問題,提高算法的整體性能。。
算法核心策略
- 知識轉移預測(KTP):這是一種判別式預測器,旨在減少不同環境之間的特征和分布差異。它能夠從新環境中大量隨機生成的解中分類出高質量的解,通過挖掘歷史環境中的有用知識,為新環境提供有價值的信息,幫助算法更快地找到最優解。
- 知識維護采樣(KMS):這是一種生成式預測器,通過對最后一個環境中精英解的分布進行建模,根據動態變化趨勢在新環境中采樣出優質解。它可以有效地利用歷史最優解的信息,生成更有可能接近最優解的新個體,從而提高算法的收斂速度和求解質量。
參考文獻:Q. Lin, Y. Ye, L. Ma, M. Jiang and K. C. Tan, "Dynamic Multiobjective Evolutionary Optimization via Knowledge Transfer and Maintenance," in IEEE Transactions on Systems, Man, and Cybernetics: Systems, vol. 54, no. 2, pp. 936-949, Feb. 2024, doi: 10.1109/TSMC.2023.3322718.
二、動態多目標優化測試集CEC2018介紹
CEC2018 是由 IEEE 計算智能學會(IEEE CIS)主辦的進化計算大會(CEC)在 2018 年發布的動態多目標優化測試集,主要用于評估動態多目標優化算法的性能。
- 測試函數構成:CEC2018 共有 14 個測試函數,分別為 DF1 - DF14。其中,DF1 - DF9 是雙目標函數,DF10 - DF14 是三目標函數。這些測試函數涵蓋了多種不同的動態特性和復雜情況,能夠全面地考察算法在不同類型動態多目標優化問題上的求解能力。
- 應用場景:現實世界中許多優化問題既具有多目標性,又與時間相關,即隨著時間的變化,優化問題本身也會發生改變,這類問題被稱為動態多目標優化問題(DMOP)。CEC2018 測試集就是為了模擬這類現實問題而設計的,可用于評估各種進化算法或其他智能優化算法在解決動態多目標優化問題時的性能,幫助研究人員比較和改進算法,以更好地應對實際應用中的類似問題。
- 評估指標:對于動態多目標優化問題,通常需要評估算法跟蹤最優解隨時間變化的能力,相關指標包括追蹤誤差和響應速度等。通過在 CEC2018 測試集上運行算法,并計算這些指標,可以定量地分析算法在動態環境下的性能表現,例如算法能否快速適應問題的變化,以及在跟蹤動態 Pareto 前沿時的準確性和穩定性如何。
三、部分MATLAB代碼及結果
figure if size(reskt{1,1}.turePOF,2)==2for i=1:size(reskt,2)AA=reskt{1,i}.POF_iter{1,10};AA=AA';BB=reskt{1,i}.turePOF;h1=plot(AA(:,1),AA(:,2),'r.');hold onh2=plot(BB(:,1),BB(:,2),'go');end% ylim([0 1])xlabel('f1')ylabel('f2')legend([h1 h2],'KTM-DMOEA','turePOF')title(['KTM-DMOEA求解' functions{testFuncNo}]) elsefor i=1:size(reskt,2)AA=reskt{1,i}.POF_iter{1,10};AA=AA';BB=reskt{1,i}.turePOF;h1=plot3(AA(:,1),AA(:,2),AA(:,3),'r.');hold onh2=plot3(BB(:,1),BB(:,2),BB(:,3),'go');endxlabel('f1')ylabel('f2')zlabel('f3')legend([h1 h2],'KTM-DMOEA','turePOF')title(['KTM-DMOEA求解' functions{testFuncNo}]) end