目前分類:演算法 (2)

瀏覽方式: 標題列表 簡短摘要

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

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

文章標籤

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

現實生活中我們會遇到許多工作需要事先排序,也許是由小排到大,也許是大到小。這裡提供一個使用Excel VBA寫的排序方法,它使用Excel本身的函數max,將待排序數列中的最大值取出,此即為整個序列中的最大值,然後以一極小值(此設為-10000)取代此已被找出的最大值,接著再繼續於剩下的待排序數列中找出最大值,此即為序列中的第二大值,如此一直尋找,直到整個序列都被找完,如此就可將數列由大至小排列。

文章標籤

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