天天看點

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

本文依然參考《MATLAB智能算法30個案例分析》一書,文末的源代碼也來自本書

​上周有小夥伴背景問小編能否講解一下關于多目标優化問題的算法,本周小編做足了功課,為大家更新這篇推文。

在講解多目标優化問題之前,小編想先講一個小故事,說有一位女生,她想每天都吃好多好吃的,同時又想保持好身材,我們都知道這在現實生活中很難實作的。這其實可以抽象為一個實際問題模型,如何保證每天攝入食物最多,且體重最小,比如說女生1每天攝入2kg食物,體重50Kg;女生2每天攝入2Kg食物,體重52Kg;女生3每天攝入1Kg食物,體重50Kg;女生4每天攝入1Kg食物,體重48Kg。

我們最終得出的結論是女生1要好于女生2,因為吃同樣多的飯,女生1比女生2瘦;女生1也好于女生3,雖然兩人體重相同,但女生1更能吃;女生4要好于女生3,因為吃同樣多的飯,女生4比女生3瘦;But,女生1和女生4誰更優秀呢,我們無法比較,這裡實質上就是說這個問題不隻有一個“最優解”。當然小編隻是舉個例子。目的是告訴大家,多目标問題沒有一個所謂的最優解,而是有一個最優解的集合,看到這裡各位可能會有點蒙,沒關系,下面小編給出一個執行個體,讓大家直覺感受一下小編剛才說的是什麼意思。

問題描述:

假設存在五類物品,每類物品中又包含四種具體物品,現要求從這五類物品中分别選擇一種物品放入背包中,使得背包内物品的總價值最大,總體積最小,并且背包的總品質不超過92Kg。其中P為每個物品的價值,R為每個物品的體積,C為每個物品品質。

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

下面給出3種不同的選擇方案:

方案1:我們第1類物品中取第1各物品,第2類物品中取第1個物品,第3類物品中取第1個物品,第4類物品中取第3個物品,第5類物品中取第1個物品。

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

經計算可知該種選法的

物品總價值sumP1=3+4+9+12+2=30

總體積sumR1=0.2+0.3+0.4+0.5+0.1=1.5

總品質sumC1=10+13+24+28+4=79<92

方案2:我們第1類物品中取第1各物品,第2類物品中取第1個物品,第3類物品中取第2個物品,第4類物品中取第2個物品,第5類物品中取第1個物品。

經計算可知該種選法的

物品總價值sumP2=3+4+8+10+2=27

總體積sumR2=0.2+0.3+0.38+0.45+0.1=1.43

總品質sumC2=10+13+22+26+4=75<92

方案3:我們第1類物品中取第1各物品,第2類物品中取第1個物品,第3類物品中取第1個物品,第4類物品中取第4個物品,第5類物品中取第1個物品。

經計算可知該種選法的

物品總價值sumP3=3+4+9+10+2=28

總體積sumR3=0.2+0.3+0.4+0.6+0.1=1.6

總品質sumC3=10+13+24+32+4=83<92

經比較發現:方案1優于方案3,因為方案1的物品總價值>方案3的物品總價值,即sumP1>sumP3;方案1的物品總體積<方案3的物品總體積,即sumR1<sumR3;并且兩種方案都滿足重量限制,即sumC1<92,sumC3<92,是以方案1的選擇方案選擇的物品使背包内物品的總價值又大,總體積又小。但是方案1與方案2無法比較,因為方案1的物品總價值>方案2的物品總價值,即sumP1>sumP2;但是方案1的物品總體積>方案2的物品總體積,即sumR1>sumR2;并且兩種方案都滿足重量限制,即sumC1<92,sumC2<92,因為雖然方案1的選擇方案使背包内物品的總價值大于方案2的選擇方案背包内物品的總價值,但是方案1的選擇方案使背包内的總體積也大于方案2選擇方案背包内物品的總體積。這兩種方案種的兩個目标同時比較時,無法做到某一個方案的所有目标都優于另一個方案的所有目标,是以這兩種方案無法比較優劣。

由上述内容可以引出多目标優化問題的兩個基本概念:Pareto最優解和Pareto最優前沿。

Pareto最優解:對于多目标優化問題,通常存在一個解集,這些解之間就全體目标函數而言是無法比較優劣的,其特點是:無法在改進任何目标函數的同時不削弱至少一個其他目标函數。這種解稱作非支配解或Pareto最優解。

Pareto最優前沿:對于組成Pareto最優解集的所有Pareto最優解,其對應目标空間中的目标矢量所構成的曲面稱作Pareto最優前沿。

就上文提到的背包問題,方案1和方案2都屬于Pareto最優解,方案1和方案2共同構成Pareto最優解集。

本文要求解的多目标優化問題,前文已經給出,其實問題的結果就是一個1行5列的行向量,比如說問題的解為[1 1 1 3 1],則表明第1類物品中取第1各物品,第2類物品中取第1個物品,第3類物品中取第1個物品,第4類物品中取第3個物品,第5類物品中取第1個物品。

本文用粒子群算法求解多目标問題,不知道小夥伴們還記不記得《​​混合粒子群算法通俗講解(附MATLAB代碼)​​》一文中所講的粒子群算法的兩大特點:個體最優和群體最優,忘了的小夥伴可以回去稍微複習一下。

在這裡小編想給出用粒子群算法求解多目标優化問題的流程圖:

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

下面詳細解釋每個步驟的涵義:

  1. 種群初始化:随機初始化粒子的位置x和速度v。
  2. 适應度值計算:每個個體的适應度值有兩個,即價值sumP和體積sumR,同時個體必須滿足品質限制(sumC<92)。
  3. 粒子最優更新:包括個體最優最優粒子更新和群體最優粒子更新,其中個體最優粒子的更新方式是從目前粒子和個體最優粒子中選擇支配粒子(一個粒子支配另一個粒子的意思就是該粒子的sumP和sumR都好于另外一個粒子),當兩個粒子都不是支配粒子時,從中随機選擇一個粒子作為個體最優粒子。群體最優粒子為從Pareto最優解集中随機選擇的一個粒子。
  4. Pareto最優解集更新:當新粒子不受其他粒子及目前Pareto最優解集中的粒子的支配時,把新粒子放入Pareto最優解集中。
  5. 粒子速度和位置更新:在這裡小編介紹一下粒子速度和位置更新的公式,因為接下來的代碼中有用到這兩個公式。
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)
基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

其中,

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

為慣性權重;r1和r2為均分布于[0,1]區間的随機數;k是目前疊代次數;

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

為個體最優粒子位置;

基于粒子群算法的多目标搜尋算法講解(附MATLAB代碼)

為全局最優粒子位置;c1和c2為常數;V為粒子速度;X為粒子位置。這裡粒子位置X可以随機生成,形式如[1 1 1 3 1],粒子初始速度V可設定為0,從上面兩個公式也可以看出,更新粒子速度V目的是為了更新粒子位置X。

最後附上PSO求解多目标優化問題的MATLAB代碼(背景回複“PSO多目标”提取代碼):

連結:https://pan.baidu.com/s/1jExRuCXUrDfR7L4lb9thpA 

繼續閱讀