《集體智慧編程》筆記之五:優化算法算法
優化算法過程
首先是描述題解,咱們有必要明確潛在的題解將如何表達。一種很是通用的表達方式,就是數字序列。其次是肯定成本函數,成本函數是用優化算法解決問題的關鍵,它一般是最難肯定的。任何優化算法的目標,就是要尋找一組可以是成本函數的返回結果達到最小化的輸入。成本函數須要返回一個值用以表示方案的好壞。對於好壞的程度並無特定的衡量尺度,惟一的要求就是函數返回的值越大,表示該方案越差。對多個影響變量肯定重要性,而後將它們組合在一塊兒造成一個值。以後就能夠嘗試各類優化算法了。典型的例子,如航班安排問題。spring
隨機搜索
隨機搜索不是一種很是好的優化算法,但它卻使咱們很容易領會全部算法的真正意圖,而且它是咱們評估其餘算法優劣的基線(baseline)。隨機產生N次(如1000)次猜想,取成本最低的猜想做爲結果。獲得的結果顯然不是最差的。編程
登山法
隨機嘗試各類題解很是低效,它沒有充分利用已經發現的優解。隨機優化是處處跳躍的(jumps around),因此它不會自動去尋找與已經被發現的優解相接近的題解。登山法是一種改進,它以一個隨機解開始,而後在其臨近的題解中尋找更好的題解(具備更低成本),相似於從斜坡上向下走。對每一次相鄰的時間安排都進行成本計算,具備最低成本的做爲新的題解。重複這個過程直到沒有相鄰安排可以改善成本爲止。 網絡
登山法最大的一個缺陷就在於陷入局部範圍的最小值,它比鄰近解表現都好,但卻不是全局最優的。解決這個缺陷的一種方法就是隨機重複登山法(random-restart hill climbing),即讓登山法以多個隨機生成的初始解爲起點運行若干次,藉此但願其中有一個解可以逼近全局最優。 dom
模擬退火算法
退火算法以一個問題的隨機解開始,它用一個變量來表示溫度,這一溫度開始時很是高,然後逐漸變低。每一次迭代期間,算法會隨機選中題解中的某個數字,而後朝某個方向變化。算法最爲關鍵的部分在於,若是新的成本值更低,則新的題解就會成爲當前題解,這和登山法相似。不過,若是成本值更高的話,則新的題解仍將可能成爲當前題解。這是避免局部最優的一種嘗試。某些狀況下,在咱們可以獲得一個更優的解以前轉向一個更差的解是頗有必要的。模擬退火算法管用緣由在於它不只老是會接受一個更優的解,並且還由於它在退火過程的開始階段會接受表現較差的解。隨着退火過程的不斷進行,算法愈來愈不可能接受較差的解,直到最後,它將只會接受更優解。溫度和冷卻率是兩個可選的參數。對於任何一個給定問題,不妨使用不一樣的參數作一作試驗。ide
遺傳算法
遺傳算法先隨機生成一組解,稱爲種羣(population),在優化過程當中的每一步,算法會計算整個種羣的成本函數,從而獲得一個有關題解的有序列表。在對題解進行排序以後,一個新的種羣(下一代)被建立出來。首先,將當前種羣中位於最頂端的題解加入其所在的新種羣中,這一步叫精英選拔法(elitism)。新種羣中餘下部分是由修改最優解後造成的全新解所組成。修改題解的方法有兩種。方法一是變異:對一個既有解進行微小的、簡單的、隨機的改變。例如題解中選擇一個數字,對其進行遞增或遞減便可。方法二是交叉(crossover)或者配對(breeding),選取最優解中的兩個解,而後將它們按某種方式進行結合。例如從一個接種隨機取出一個數字做爲新題解的某個元素,剩餘元素則來自另外一個題解。
新的種羣是經過對最優解進行隨機的變異和配對處理構造出來的,它的大小一般與舊的種羣相同。然後,這個過程一直重複進行--新的種羣通過排序,又一個種羣被構造出來。達到指定的迭代次數或者連續通過數代後題解都沒有獲得改善,整個過程就結束了。函數
優化算法的侷限
一種優化方法是否管用很大程度上取決於問題自己。模擬退火算法、遺傳算法,以及大多數其餘優化方法都有賴於這樣一個事實:對於大多數問題而言,最優解應該接近於其餘的優解。但這個假設不必定成立。以下圖:
成本最低點實際上處在一個很是陡峭的區域。接近它的任何解都有可能被排除在外,由於這些解的成本都很高。因此咱們永遠都找不到通往全局最小值的途徑。大多數算法會陷入圖中左邊某個局部最小化的區域裏。佈局
涉及偏好的優化
如何將有限的資源分配給多個表達了偏好的人,並儘量使他們都滿意。如學生宿舍安排問題。從個體中提取信息,並將其組合起來產生出優化的結果。理論上,咱們也能夠構造一個數字序列,讓每一個數字對應於一名學生,表示將其安置在了某一間宿舍。但沒法在題解中體現約束條件:每件宿舍僅限兩名學生居住。一個全零序列表明將全部人安排在了同一宿舍,這就是一個無效解。解決這種問題,一種辦法是將無效解的成本函數返回一個很高的述職,但這使得優化算法很難找到次優的解,由於算法沒法肯定返回結果是否接近於其餘優解,設或是有效的解。通常而言,咱們最好不要讓處理器浪費在無效解的搜索上。更好的辦法,則是尋找一種能讓每一個解都有效的題解表示法。讓每一個述職必須在合理的域值範圍內。
這類問題的成本函數構造是有一個法則:儘量讓最優解的成本爲零。優化
網絡可視化
如社交網絡中要將人際關係網絡可視化輸出,其中佈局問題就能夠是一個優化問題。既要讓圖片舒展開,又要減小交叉點。前者能夠利用質點彈簧算法(mass-and-spring algorithm):各結點彼此向對方施以推力並試圖分離,而結點間的鏈接則試圖將關聯點彼此拉近。如此一來,網絡便會呈現這樣佈局:未關聯的結點被推離,而關聯的結點則被彼此拉近,卻又不會靠的很攏。減小交叉點的優化方法,其中成本函數能夠計算彼此交叉的連線數。網站
其它應用實例 競賽中組隊,但願組員的技能得以均勻分佈;項目組分派任務,考慮人們的技能搭配狀況;根據用戶提供的關鍵字尋找一組最佳網站,最佳網站組並不須要具有大量彼此公有的關鍵字,而是要儘量多地體現由用戶提供的關鍵字。