集體智慧常用算法 算法的大致含義

《集體智慧編程》筆記之五:優化算法

優化算法過程
首先是描述題解,我們有必要明確潛在的題解將如何表達。一種非常通用的表達方式,就是數字序列。其次是確定成本函數,成本函數是用優化算法解決問題的關鍵,它通常是最難確定的。任何優化算法的目標,就是要尋找一組能夠是成本函數的返回結果達到最小化的輸入。成本函數需要返回一個值用以表示方案的好壞。對於好壞的程度並沒有特定的衡量尺度,唯一的要求就是函數返回的值越大,表示該方案越差。對多個影響變量確定重要性,然後將它們組合在一起形成一個值。之後就可以嘗試各種優化算法了。典型的例子,如航班安排問題。


隨機搜索
隨機搜索不是一種非常好的優化算法,但它卻使我們很容易領會所有算法的真正意圖,並且它是我們評估其他算法優劣的基線(baseline)。隨機產生N次(如1000)次猜測,取成本最低的猜測作爲結果。得到的結果顯然不是最差的。


爬山法
隨機嘗試各種題解非常低效,它沒有充分利用已經發現的優解。隨機優化是到處跳躍的(jumps around),所以它不會自動去尋找與已經被發現的優解相接近的題解。爬山法是一種改進,它以一個隨機解開始,然後在其臨近的題解中尋找更好的題解(具有更低成本),類似於從斜坡上向下走。對每一次相鄰的時間安排都進行成本計算,具有最低成本的作爲新的題解。重複這個過程直到沒有相鄰安排能夠改善成本爲止。

爬山法最大的一個缺陷就在於陷入局部範圍的最小值,它比鄰近解表現都好,但卻不是全局最優的。解決這個缺陷的一種方法就是隨機重複爬山法(random-restart hill climbing),即讓爬山法以多個隨機生成的初始解爲起點運行若干次,藉此希望其中有一個解能夠逼近全局最優。


模擬退火算法
退火算法以一個問題的隨機解開始,它用一個變量來表示溫度,這一溫度開始時非常高,而後逐漸變低。每一次迭代期間,算法會隨機選中題解中的某個數字,然後朝某個方向變化。算法最爲關鍵的部分在於,如果新的成本值更低,則新的題解就會成爲當前題解,這和爬山法類似。不過,如果成本值更高的話,則新的題解仍將可能成爲當前題解。這是避免局部最優的一種嘗試。某些情況下,在我們能夠得到一個更優的解之前轉向一個更差的解是很有必要的。模擬退火算法管用原因在於它不僅總是會接受一個更優的解,而且還因爲它在退火過程的開始階段會接受表現較差的解。隨着退火過程的不斷進行,算法越來越不可能接受較差的解,直到最後,它將只會接受更優解。溫度和冷卻率是兩個可選的參數。對於任何一個給定問題,不妨使用不同的參數做一做試驗。


遺傳算法
遺傳算法先隨機生成一組解,稱爲種羣(population),在優化過程中的每一步,算法會計算整個種羣的成本函數,從而得到一個有關題解的有序列表。在對題解進行排序之後,一個新的種羣(下一代)被創建出來。首先,將當前種羣中位於最頂端的題解加入其所在的新種羣中,這一步叫精英選拔法(elitism)。新種羣中餘下部分是由修改最優解後形成的全新解所組成。修改題解的方法有兩種。方法一是變異:對一個既有解進行微小的、簡單的、隨機的改變。例如題解中選擇一個數字,對其進行遞增或遞減即可。方法二是交叉(crossover)或者配對(breeding),選取最優解中的兩個解,然後將它們按某種方式進行結合。例如從一個接種隨機取出一個數字作爲新題解的某個元素,剩餘元素則來自另一個題解。
新的種羣是通過對最優解進行隨機的變異和配對處理構造出來的,它的大小通常與舊的種羣相同。而後,這個過程一直重複進行--新的種羣經過排序,又一個種羣被構造出來。達到指定的迭代次數或者連續經過數代後題解都沒有得到改善,整個過程就結束了。

 

優化算法的侷限
一種優化方法是否管用很大程度上取決於問題本身。模擬退火算法、遺傳算法,以及大多數其他優化方法都有賴於這樣一個事實:對於大多數問題而言,最優解應該接近於其他的優解。但這個假設不一定成立。如下圖:
成本最低點實際上處在一個非常陡峭的區域。接近它的任何解都有可能被排除在外,因爲這些解的成本都很高。所以我們永遠都找不到通往全局最小值的途徑。大多數算法會陷入圖中左邊某個局部最小化的區域裏。

 

涉及偏好的優化
如何將有限的資源分配給多個表達了偏好的人,並儘可能使他們都滿意。如學生宿舍安排問題。從個體中提取信息,並將其組合起來產生出優化的結果。理論上,我們也可以構造一個數字序列,讓每個數字對應於一名學生,表示將其安置在了某一間宿舍。但無法在題解中體現約束條件:每件宿舍僅限兩名學生居住。一個全零序列代表將所有人安排在了同一宿舍,這就是一個無效解。解決這種問題,一種辦法是將無效解的成本函數返回一個很高的述職,但這使得優化算法很難找到次優的解,因爲算法無法確定返回結果是否接近於其他優解,設或是有效的解。一般而言,我們最好不要讓處理器浪費在無效解的搜索上。更好的辦法,則是尋找一種能讓每個解都有效的題解表示法。讓每個述職必須在合理的域值範圍內。
這類問題的成本函數構造是有一個法則:儘可能讓最優解的成本爲零。


網絡可視化
如社交網絡中要將人際關係網絡可視化輸出,其中佈局問題就可以是一個優化問題。既要讓圖片舒展開,又要減少交叉點。前者可以利用質點彈簧算法(mass-and-spring algorithm):各結點彼此向對方施以推力並試圖分離,而結點間的連接則試圖將關聯點彼此拉近。如此一來,網絡便會呈現這樣佈局:未關聯的結點被推離,而關聯的結點則被彼此拉近,卻又不會靠的很攏。減少交叉點的優化方法,其中成本函數可以計算彼此交叉的連線數。


其它應用實例
競賽中組隊,希望組員的技能得以均勻分佈;項目組分派任務,考慮人們的技能搭配情況;根據用戶提供的關鍵字尋找一組最佳網站,最佳網站組並不需要具備大量彼此公有的關鍵字,而是要儘可能多地體現由用戶提供的關鍵字。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章