日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

粒子群算法理解+求解01背包问题

發布時間:2024/3/13 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 粒子群算法理解+求解01背包问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在學群體優化算法,做個學習筆記吧,本人蒟蒻,有不對的地方還情多多包涵。

1.粒子群算法的理解。

? ? ? ? 粒子群算法是一種智能優化算法,模擬的是鳥內捕食行為。假設有一群鳥,在一個區域內覓食,這個區域內只有一個食物(最優解),但是每個鳥只知道自己距食物的距離,還有靠食物最近的鳥的距離(群體最優解),這樣,他們的覓食行為就收到三個方面的約束。

? ? ?(1)距離食物最近的鳥的位置,這樣所有的其他鳥都會向這只鳥靠攏,即所有點都會向當前全局最優解學習,靠攏。

? ? ?(2)光有全局最優解,最后得到的解最優也只能是初始狀態的最優解,因此,每個鳥在靠近全局最優解的過程中也會計算自己與食物之間的距離,有可能在某一時刻,自己的距離比全局最優解還近,那么更新全局最優解,同時變更群體的學習方向。這就是個體最優解。

? ? ?(3)自身慣性。這是粒子繼承先前速度的能力。一個較大的慣性有助于全局搜索,而一個較小的慣性有助于局部搜索。因此,在平常設計中,我們將慣性w設置為動態慣性,確保前期全局搜索能力強,但在后期局部搜索能力強,從而提高算法精度。

? ? ? ?所以,假設在一個D維的搜索空間中,由n個粒子組成的種群X=(X1,X2....Xn),其中第i個粒子向量表示為Xi=,表示粒子在D維搜索空間的位置,第i個粒子的速度為Vi=,個體極值為Pi=,種群極值為Pg=;

則速度更新公式為

其中,w為慣性權重,k為迭代次數,Vid為粒子的速度;c1和c2為非負常數,也叫作加速度因子;r1和r2為【0,1】的分布隨機數。

2.粒子群算法的求解過程。

這里我們以01背包問題為例來模擬粒子群算法。01背包問題是著名的非線性尋優問題,適應度由價格和體積決定,而質量是總約束條件。整個算法流程看代碼吧,很清晰易懂的。

? ? ?

clear; clc; close all;a=[95,4,60,32,23,72,80,62,65,46]; %物品體積 c=[55,10,47,5,4,50,8,61,85,87]; %物品價值 b=269; %背包重量%初始化種群 Dim=10; %維度 xSize=20; %種群數 maxgen=30; %迭代次數 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的矩陣 v=rand(xSize,Dim) %隨機一個30*10的速度矩陣 xbest=zeros(xSize,Dim); %單個粒子的初始最佳位置 fxbest=zeros(xSize,1); %xbext的適應度 gbest=zeros(1,Dim); %全局最優解 fgbest=0; %全局最優解的適應度 % %尋找粒子群最優位置和單個粒子 iter=0; while iter<maxgeniter=iter+1;fx=sum((C.*x)'); %粒子適應度,即背包內物品的價格sx=sum((A.*x)'); %限制函數,背包內物品的體積for i=1:xSizeif sx(i)>269fx(i)=0; %超過體積,適應度為0endendfor i=1:xSizeif fxbest(i)<fx(i) %當粒子適應度大于最佳適應度時,替代fxbest(i)=fx(i);xbest(i,:)=x(i,:);endendif fgbest<max(fxbest)[fgbest,g]=max(fxbest);gbest=xbest(g,:) %當存在粒子的最佳適應度fxbext(i)大于種群最佳適應度fgbext(i)時,替代endfor i=1:xSizeif x(i,:)==gbestx(i,:)=round(rand(1,Dim)); %當某個粒子的位置為最佳位置時,重新賦值,以防止陷入局部最優解endendR1=rand(xSize,Dim);R2=rand(xSize,Dim);v=v*w+c1*R1.*(xbest-x)+c2*R2.*(repmat(gbest,xSize,1)-x);%速度迭代公式產生新的速度x=x+v; for i=1:xSize %更新粒子群的位置for j=1:Dimif x(i,j)<0.5x(i,j)=0;else x(i,j)=1; %粒子的位置只有(0,1)兩種狀態endendend endfgbest sgbest=sum((a.*gbest)') disp(gbest);

? 最后的結果中,gbest的結果,0代表沒選,1代表選。

總結

以上是生活随笔為你收集整理的粒子群算法理解+求解01背包问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。