每種約束處理方法不可能在每個問題上都優於其他約束處理方法,同時在乙個問題的不同時期也可能選擇不同的約束處理方法更好。基於此,本文提出了乙個約束處理方法集(echm)來處理約束。實驗結果表明,echm總體效能優於單一約束處理方法。最後需要一提的是,使用了多目標差分進化演算法進行優化。
這部分文章簡單介紹了cmops,並提出怎麼處理約束和處理不可行解是其核心問題。
約束的方法分為四類:①保持解決方案的可行性、②懲罰函式、③分離可行和不可行的解決方案以及④混合方法。
在解決約束問題時,可以遇到以下三種情況之一:
沒有可行解的階段
至少乙個可行解的階段
混在一起的父子代比下一代開始時的父代有更多可行解的階段
不同約束處理技術之間的區別在於如何在整個三個搜尋階段處理不可行的個體。
考慮父-子群的組合,約束問題的搜尋過程可分為三個階段(wang,2008):(1)沒有可行的解。 (2)至少乙個可行的解決辦法。 (3)與下一代父母群體的規模相比,結合的後代父母群體有更可行的解決辦法。 不同約束處理技術之間的區別在於如何在整個三個搜尋階段處理不可行的個體。
3.1自適應罰函式法(sp)
woldesenbet和tessema(2007)提出了乙個自適應懲罰函式。 該方法跟蹤人口中可行個體的數量,以確定對不可行個體的懲罰程度。 自適應懲罰函式使用修正的目標函式值,而不是使用原始的目標值。而修正目標值有距離測度和自適應懲罰兩個組成部分。這裡可以去看我寫的原文詳細學習,這裡就不粗略介紹了。
3.2可行解優先(sf)
適應度計算公式為:
其中,其中fmworst是所有可行解在第m個目標值上的最大值,v(x)是總體約束違反。如果當前總體中沒有可行解,則fmworst=0。
不難發現,通過該方式計算的適應度,可行解永遠優於不可行解。若比較雙方都是可行解,則比較其目標值;若比較雙方都是不可行解,則比較約束違反值。
3.3 ε約束(ec)
在解決約束問題時,可以遇到以下三種情況之一:
沒有可行解的階段
至少乙個可行解的階段
sf
sf法對可行解的排序優於不可行解。 兩個不可行的解僅基於它們的總體約束違規進行比較,而兩個可行解僅基於它們的目標函式值進行比較。
因此,sf在階段1中,從組合的父代和子代種群中選擇總體約束違反更低的不可行解。 在階段2中,首先選擇所有可行的,然後選擇約束違反最低的不可行的。 在階段3中,只選擇帶有最好目標值的可行解。
sp
sp方法總是根據總體約束違反和目標值確定的值來選擇個體。 因此,在階段3中,可以選擇具有較低總體約束違反和較高適應度的個體。
ec
ε約束(ec)方法選擇類似於sf,但在ec中,如果其總體約束違反小於ε(k),則認為解是可行的。
使用差分進化優化多目標問題的細節可以參考我的另一篇文獻閱讀:multi-objective optimization with modified pareto differential evolution,本文只是在該基礎上加入了約束處理。
本文使用到的變異向量vp:
本文使用到的試驗向量up,i:
受約束的多目標差分進化演算法流程圖如下:
其中,方框部分進行會約束處理(處理方法就可以用前面提到的3種約束處理方法),生成新的適應度值,種群會根據新的適應度的值進行精英選擇生成下一代。
演算法的具體流程圖如下:
每個約束處理方法都有對應的種群。 每個種群根據差分演算法產生其自己的後代種群。 對於三個後代種群中的每個後代,都計算目標值、約束函式值和總體約束違反。 將三個子代種群組合並同時根據三種chms進行不同的適應度修改過程。 在適應度修改過程之後,每個子代種群與各自的親本種群相結合。 因此,目標和約束函式評估只執行一次每後代,而適應度修改執行三次根據chms。具體可以看上面的流程圖更清楚。
方法集的種群大小設定為50,單個約束處理方法設定為50和150。 最大外部存檔大小設定為100,其他引數設定如下。
進行了7個不同方法的比較實驗。
實驗指標
實驗結果
從表中的結果可以看出,約束處理方法集合的效能類似於單個約束處理方法或優於單個約束處理方法。 從最後一行顯示的排名總和可以看出,整合約束處理方法相對於r指標來說優於所有單個約束處理方法。
數值−1、0、1表示所提出的echm在統計上優於、等於和劣於單一約束處理方法。 從結果來看,所提出的echm的效能要麼更好,要麼類似於所有三種單一約束處理方法。
將乙個dataTable拆成多個
最近遇到乙個問題害我鬱悶了很久,在乙個頁面裡分類顯示資料,每乙個大類裡的資料是動態取得。打算將它分三列顯示,希望得到的效果 顯示成了 aa cceeaaccee aaacceeaaccee aaacceeaaccee bbbcceeccee bbbcceeccee bbbddeeee bbbddff...
實現乙個servlet處理多個請求
一開始我們學習servlet的時候都是乙個servlet處理乙個請求,這樣導致發現最後會建立很多類出來,不好維護。這裡我們用反射來解決這個問題了,用乙個servlet處理多個請求。首先建立乙個基礎servlet baseservlet 再寫乙個 userservlet webservlet user...
將多個jar合併成乙個jar的問題
1 將所有jar檔案複製至某臨時目錄中,通過jar命令解壓得到所有的.class檔案 jar xvf xx.jar xx.jar必須為具體的jar,不能為 jar,會報filenotfoundexception 2 刪除臨時目錄下所有的jar檔案 del f jar 3 合併所有.class檔案至j...