粒子群算法求解0-1背包问题
目錄
一、粒子群算法的概念
二、粒子群算法分析
三、粒子群算法種類
1.基本粒子群算法
2.標準粒子群算法
3.壓縮粒子群算法
4.離散粒子群算法
四、粒子群算法流程
五、例題
一、粒子群算法的概念
??粒子群優化算法(PSO:Particle swarm optimization) 是一種進化計算技術(evolutionary computation)。源于對鳥群捕食的行為研究。粒子群優化算法的基本思想:是通過群體中個體之間的協作和信息共享來尋找最優解.
??PSO的優勢:在于簡單容易實現并且沒有許多參數的調節。目前已被廣泛應用于函數優化、神經網絡訓練、模糊系統控制以及其他遺傳算法的應用領域。
二、粒子群算法分析
??粒子群算法通過設計一種無質量的粒子來模擬鳥群中的鳥,粒子僅具有兩個屬性:速度和位置,速度代表移動的快慢,位置代表移動的方向。每個粒子在搜索空間中單獨的搜尋最優解,并將其記為當前個體極值,并將個體極值與整個粒子群里的其他粒子共享,找到最優的那個個體極值作為整個粒子群的當前全局最優解,粒子群中的所有粒子根據自己找到的當前個體極值和整個粒子群共享的當前全局最優解來調整自己的速度和位置。下面的動圖很形象地展示了PSO算法的過程:
三、粒子群算法種類
1.基本粒子群算法
假設在一個維的目標搜索空間中,有個粒子組成一個群體,其中第i個粒子表示為一個維的向量:
第i個粒子的飛行速度也是一個D維的向量,記為
第i個粒子迄今為止搜索到最優位置稱為個體極值,記為
整個粒子群迄今位置搜索到的最優位置為全局極值,記為
在找到這兩個最優值是,粒子根據如下公式來更新自己的速度和位置
2.標準粒子群算法
帶有慣性權重的改進粒子群算法,該算法能夠保證較好 的收斂效果。?
慣性權重表示在多大程度上保留原來的速度:w越大,則全局收斂能力較強,局部收斂能力較弱;在0.8~1.2之間時,粒子群算法有更快收斂速度,當,算法容易陷入局部極值
在算法開始時可給賦予較大正值,隨著搜索進行,可以線性地使主鍵減小。目前,采用較多的動態慣性權重值時Shi提出的線性遞減權值策略,其表達式如下?
3.壓縮粒子群算法
利用約束因子控制系統行為的最終收斂。壓縮因子更新公式。
式中為壓縮因子
4.離散粒子群算法
基本粒子群算法時在連續域中搜索函數極值,下面是一種離散二進制版的粒子群算法。在此離散粒子群方法中,將離散問題空間映射到連續粒子運動空間,并適當求改粒子群算法來求解,在計算上仍保留經典粒子群算法速度-位置更新運算規則。
是從產生的隨機數。?
四、粒子群算法流程
粒子群算法基于“種群”和“進化”的概念,通過個體間的協作與競爭,實現復雜空間最優解的搜索,其流程如下:
1)初始化粒子群,包括群體規模N,每個粒子的位置x和速度v
2)計算每個粒子的適應度值
3)對每個粒子,用它的適應度值和個體極值比較。如果,則用替換掉
4)對每個粒子,用它的適應度值和全局極值t比較。如果,則用替換
5)迭代更新粒子的速度和位置
6)進行邊界條件處理
7)判斷算法終止條件是否滿足:若是,則結束算法并輸出優化結果:否則返回步驟2)
??
五、例題
0-1背包問題。有件物品和一個容量為的背包。第件物品的體積是,價值是。求解將哪些物品放入背包可使物品的體積總和不超過背包的容量,且價值總和最大。假設物品數量為10,背包的容量為300.每件物品的體積為,價值為
仿真過程如下
1)初始化種群粒子個數,粒子維數,最大迭代次數為,學習因子,慣性權重最大值,慣性權重最小值為,速度最大值,速度最小值。
2) 初始化速度和二進制編碼的種群粒子位置,其中1表示選擇該物品,0表示不選擇該物品。取適應度值進行懲罰計算。獲得粒子個體最優位置和最優值,以及粒子群全局最優位置和最優值
3)計算動態慣性權重值,更新速度值,并進行邊界條件處理,更新二進制編碼的位置x,計算適應度值,判斷是否替換粒子個體最優位置和最優值,以及粒子群全局最優位置和最優值
4)判斷是否滿足終止條件:若滿足,則結束搜索過程,輸出最優值;若不滿足,則繼續進行迭代優化
%%%%%%%%%%%%%%%%%離散粒子群算法解決0-1背包問題%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear all; %清除所有變量 close all; %清圖 clc; %清屏 N=100; %群體粒子個數 D=10; %粒子維數 T=200; %最大迭代次數 c1=1.5; %學習因子1 c2=1.5; %學習因子2 Wmax=0.8; %慣性權重最大值 Wmin=0.4; %慣性權重最小值 Vmax=10; %速度最大值 Vmin=-10; %速度最小值 V = 300; %背包容量 C = [95,75,23,73,50,22,6,57,89,98]; %物品體積 W = [89,59,19,43,100,72,44,16,7,64]; %物品價值 afa = 2; %懲罰函數系數 %%%%%%%%%%%%%%%%初始化種群個體(限定位置和速度)%%%%%%%%%%%%%%%% x=randi([0,1],N,D); %隨機獲得二進制編碼的初始種群 v=rand(N,D) * (Vmax-Vmin)+Vmin; %%%%%%%%%%%%%%%%%%初始化個體最優位置和最優值%%%%%%%%%%%%%%%%%%% p=x; pbest=ones(N,1); for i=1:Npbest(i)= func4(x(i,:),C,W,V,afa); end %%%%%%%%%%%%%%%%%%%初始化全局最優位置和最優值%%%%%%%%%%%%%%%%%% g=ones(1,D); gbest=eps; for i=1:Nif(pbest(i)>gbest)g=p(i,:);gbest=pbest(i);end end gb=ones(1,T); %%%%%%%%%%%按照公式依次迭代直到滿足精度或者迭代次數%%%%%%%%%%%%% for i=1:Tfor j=1:N%%%%%%%%%%%%%%更新個體最優位置和最優值%%%%%%%%%%%%%%%%%if (func4(x(j,:),C,W,V,afa)>pbest(j))p(j,:)=x(j,:);pbest(j)=func4(x(j,:),C,W,V,afa);end%%%%%%%%%%%%%%%%更新全局最優位置和最優值%%%%%%%%%%%%%%%if(pbest(j)>gbest)g=p(j,:);gbest=pbest(j);end%%%%%%%%%%%%%%%%計算動態慣性權重值%%%%%%%%%%%%%%%%%%%%w=Wmax-(Wmax-Wmin)*i/T;%%%%%%%%%%%%%%%%%跟新位置和速度值%%%%%%%%%%%%%%%%%%%%%v(j,:)=w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...+c2*rand*(g-x(j,:));%%%%%%%%%%%%%%%%%%%%邊界條件處理%%%%%%%%%%%%%%%%%%%%%%for ii=1:Dif (v(j,ii)>Vmax) | (v(j,ii)< Vmin)v(j,ii)=rand * (Vmax-Vmin)+Vmin;endend vx(j,:)=1./(1+exp(-v(j,:)));for jj=1:Dif vx(j,jj)>randx(j,jj)=1;elsex(j,jj)=0;endend end%%%%%%%%%%%%%%%%%%%%記錄歷代全局最優值%%%%%%%%%%%%%%%%%%%%%gb(i)=gbest; end g; %最優個體 figure plot(gb) xlabel('迭代次數'); ylabel('適應度值'); title('適應度進化曲線') %%%%%%%%%%%%%%%%%%適應度函數%%%%%%%%%%%%%%%%% function result = func4(f,C,W,V,afa) fit = sum(f.*W); TotalSize = sum(f.*C); if TotalSize <= Vfit = fit; elsefit = fit - afa * (TotalSize - V); end result = fit; end總結
以上是生活随笔為你收集整理的粒子群算法求解0-1背包问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机自带键盘无法使用,笔记本电脑键盘用
- 下一篇: 计算机网络原理实验一--网线的制作