close

最佳化一直是人們在追求的,因此產生了各式各樣的演算法,基因演算法、粒子群演算法、蟻群演算法...。此篇所要介紹的最佳化演算法是 -- 模擬退火法(Simulated Annealing),它的作法是以暴力法為基礎,將可能的參數一一帶入函數中,直接比較其大小,其優點就是簡單、實用;缺點當然是可能會陷入區域極值中。為了改善此一缺點,所以它引入了一個溫度分佈機率函數 { R(T)= Rnd() – Pk(T), Pk(T)= Exp(dE / k * T) } ,當溫度越大時,Pk(T)就會越小,此時就越有機會跳脫區域的限制。不過它也有可能會因跳脫而無法找到最佳值,因此我在我的程式中,另外加入了一個記憶參數,藉由記憶將曾經找過的最佳值給記憶下來。對於一個小系統,,在目前個人電腦速度越來越快的情況下,此模擬退火法還滿簡單、實用。

後記: 在後續的測試中發現,當起始值離目標值太遠時,有時也會找不到最佳值,因此要多試幾次,甚至是每次都帶不同的起始值。

以下將SA以VBA寫下來,此範例是求函數 y= -x^2-4x+3的最大值,求解可知當 x= -2時,有最大值 y= 7 。

 

 

 

arrow
arrow

    Yan ~ 生活日記 發表在 痞客邦 留言(0) 人氣()