用粒子群算法解決01背包問題_第1頁
用粒子群算法解決01背包問題_第2頁
用粒子群算法解決01背包問題_第3頁
用粒子群算法解決01背包問題_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、用粒子群算法解決0/1 背包問題背包問題 ( Knapsack Problem)是著名的 NP 問題,也是一個典型的組合優(yōu)化問題。這里要解決的背包問題的描述如下:ai:第 i 個物品的體積;ci:第 i 個物品的價值;b:背包的重量限制;背包問題就是在總的體積有限的條件下 ,追求總價值最大的有效資源分配問題。有界的整數(shù)背包問題可轉化成等價的 0-1 背包問題,定義變量0 攜帶第 i個物品xi1i1,2, ,n不攜帶第 i個物品n目標函數(shù)轉化為:maxci xii 1n約束條件:s.t .ai xibi 1xi 0,1粒子群算法速度和位置的迭代公式為:Vi t1wVi t c1rand ()Pi

2、 X i tc2rand ()Pj X itX it 1X it Vi t 1其中, c1, c2為正常數(shù),稱為加速因 子; rand ()為 0,1 之間的隨機數(shù); w為慣性因子;t表示某一次迭代; Pi為粒子的最優(yōu)位置; Pj 為種群最優(yōu)位置背包問題中的 X 是一個 0-1 序列,每一個粒子的位置可以用向量粒子的位置就表示一個可行解,粒子的適應值函數(shù)就可以表示為X 來表示,nf Xvi xi(,背包內物品的價值總和)i1粒子群算法的尋優(yōu)可以表示為求取使得f (X)值最大的 X粒子群中的速度定義為物品選擇的變換集,即為兩次位置的距離,用V 表示,則 |V|表示速度所含的交換的數(shù)目,從而該速度

3、可定義為VX1X2vi | vi0,1 , i 1,2, ,n ,其中vi0 : x1ix2i1 : x1ix2i以此作為用粒子群算法解決背包問題的切入點,待解決的背包問題如下所示:0-1背包問題 :對于 n個體積為 aj、價值分別為 cj的物品,如何將它們裝入總體積為 b的背包中,使得所選物品的總價值最大。n10aj=95, 4, 60, 32, 23, 72, 80, 62, 65, 46cj=55, 10, 47, 5, 4, 50, 8, 61, 85, 87b=269使用 MATLAB 編輯如下程序:a=95 4 60 32 23 72 80 62 65 46; % 物品的體積c=5

4、5 10 47 5 4 50 8 61 85 87; %物品的價值b=269;%背包的重量限制%初始化程序 :Dim=10; %粒子的維數(shù)xSize=20; %種群數(shù)MaxIt=30; %最大迭代次數(shù)c1=0.7;c2=0.7;% 定義加速因子w=0.8; %定義慣性因子%A=repmat(a,xSize,1); %將 a擴展成一個 30*10 的矩陣C=repmat(c,xSize,1); %將 c擴展成一個 30*10 的矩陣 x=round(rand(xSize,Dim); %隨機取一個 30*10 的 0/1矩陣作為粒子的初始位置 v=rand(xSize,Dim); %粒子的初始速度

5、xbest=zeros(xSize,Dim); %單個粒子的初始最佳位置fxbest=zeros(xSize,1); %xbest的適應度gbest=zeros(1,Dim); % 粒子群的初始最佳位置fgbest=0;%gbest的適應度%粒子群最優(yōu)位置和單個粒子最優(yōu)位置的選定%迭代循環(huán)算法 :iter=0;while iter<MaxItiter=iter+1;fx=sum(C.*x)'); %計算粒子群的適應度 ,即背包內物品的價值 sx=sum(A.*x)'); %限制函數(shù) ,背包內物品的體積 for i=1:xSizeif sx(i)>269fx(i)=0

6、; %當被包內物品的體積超過限制時,將期適應度設置為1endendfor i=1:xSizeif fxbest(i)<fx(i)fxbest(i)=fx(i);xbest(i,:)=x(i,:);end% 當粒子的適應度 fx(i) 大于其最佳適應度時 fxbest(i), 用其替代原來粒子的最佳適應度 ,并記下此解endif fgbest<max(fxbest)fgbest,g=max(fxbest);gbest=xbest(g,:);%當存在粒子的最佳適應度fxbest(i) 大于種群的最佳適應度時,用其替代原來種群的最佳適應度,并記下此解endfor i=1:xSizeif

7、x(i,:)=gbestx(i,:)=round(rand(1,Dim); %為防止算法陷入局部最優(yōu),若某個粒子的位置等于種群最佳位置,將對該粒子的位置重新初始化賦值endendR1=rand(xSize,Dim);R2=rand(xSize,Dim);v=v*w+c1*R1.*(xbest-x)+c2*R2.*(repmat(gbest,xSize,1)-x);%用速度迭代公式產(chǎn)生新的速度x=x+v; %更新粒子群的位置for i=1:xSizefor j=1:Dimif x(i,j)<0.5x(i,j)=0;else x(i,j)=1;endendend%由于粒子的位置只有(0,1)兩種狀態(tài) ,此處以 0.5為分界點對函數(shù)值進行調整end%fgbestsgbest=sum(a.*gbest)')Gbest迭代 10 次,最有結果為:fgbest =295sgbest =269gbest =0111000111即在背包問題的最優(yōu)解決方案是:往背包中放第2、3、4、8、9、10 只物品時,總價值為 295。由于這次背包問題的解維數(shù)較少, 運算量小, 修改參數(shù)、改變種群數(shù)和迭代次數(shù)對最終結果影響不大,得到的最終結果不變。此程序存在的主要問題有:粒子群算法適用于解決連續(xù)函

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論