Re: [問題] 機率的實用

看板C_and_CPP作者 (遇見)時間13年前 (2011/06/10 12:51), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串3/3 (看更多)
※ 引述《lakb (Jerry)》之銘言: : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Dev c++ : 問題(Question): : 我目前在寫ACO(蟻群演算法),裡面有一個部份我不知該如何實作。隨著螞蟻的經過, : 該路徑的費洛蒙濃度會提高,當下一隻螞蟻來的時候,費洛蒙濃度高的路經被選擇的機率 : 將會較高。 : 正題: 我不知道該如何寫出高濃度的路徑將有較高的機率會被選上(低濃度路徑仍有 : 被選上的可能),不知道有無函式可使用? 先謝謝大家的回答! : 補充說明(Supplement): 不知道你是不是參考 Dorigo 的 paper? 他寫的 Ant System 跟 ACO 這兩篇 paper 應該是必讀的文章, 雖然後面實驗數據很多, 但那邊可先略過, 重點還是放在 AS/ACO 的精神與演算法上. 關於你問的路徑選擇方式, 怎麼用程式表達出來. 我可以推薦分成幾個步驟來實作: 1. 每一條edge(兩個點之間的link)都有一個費洛蒙值. 2. 每一條edge都有一個距離值. 上面這兩點的資訊要怎麼儲存? 會了之後再往下看. 3. 先看路徑的初始費洛蒙怎麼設定 (Paper有公式) 原作者是用uniform dist.的方式. 4. 已經會設定初始費洛蒙值, 接下來就是螞蟻們一開始的位置要在哪裡? 怎麼決定各個螞蟻一開始在哪個城市? 螞蟻身上背的資訊, 就是它走過哪些城市的順序. 第4點會了之後, 再繼續第5點. 5. 這裡才是你在問的問題 XD. 你的問題所參考的公式, 應該是狀態轉換公式吧 (ACS state transition rule). 這公式包含了兩個部份: exploitation 與 biased exploration. 先不要管 exploitation 這個選擇最佳下一步的方式. biased exploration 基本精神就是取自GA的輪盤法則, 有些東西容易被挑中. 該怎麼設定挑中的機率呢? 也請看公式. 基本上, 就是用到 a. 某一隻螞蟻現在在哪一個城市 (city i), b. 以及這隻螞蟻還有哪些未拜訪的城市們 (cities Jk), c. i 到 Jk 所有 edges 的費洛蒙資訊 (想像是一維陣列 C) d. i 到 Jk 所有 edges 的路徑距離的倒數 (想像是一維陣列 D) e. C 與 D 裡面同編號的元素進行以下運算: c * (d )^Beta =>cd , Beta的值看paper怎麼給定的. k k k 加總所有的 cd , 這個就是輪盤法裡面輪盤的總面積大小. k 而各個 cd / 總面積, 這個就是各個候選路徑被挑中的機率值. k 基本上, 從 (c) 與 (d) 的資訊看來, 我們可以這樣解讀: 費洛蒙較高的edge, 比較容易被挑上. 路徑較短的edge, 比較容易被挑上. 好了, 等這個東西會寫之後, 再來看怎麼更新費洛蒙資訊. 6. 這邊不在問題範圍之內, 我就不多寫了. 反正, 它有分 Gloal updating and Local updating, 且作用的時機不同.

06/10 12:54, , 1F
糟糕, 我會被版主打 XD
06/10 12:54, 1F

06/10 13:15, , 2F
他應該早就看到,只是隱而不發
06/10 13:15, 2F

06/11 00:35, , 3F
忍無可忍就無需再忍
06/11 00:35, 3F
※ 編輯: ericinttu 來自: 59.117.140.88 (06/11 01:44)

06/11 10:04, , 4F
推這篇 *^_^*
06/11 10:04, 4F

06/15 02:33, , 5F
樓上t大也接觸過ACO?
06/15 02:33, 5F
文章代碼(AID): #1DyQBJKy (C_and_CPP)
文章代碼(AID): #1DyQBJKy (C_and_CPP)