[Matlab] 二进制蝙蝠算法用于解决背包问题
生活随笔
收集整理的這篇文章主要介紹了
[Matlab] 二进制蝙蝠算法用于解决背包问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
二進制蝙蝠算法用于解決背包問題
- 算法流程
- 背包問題
- Matlab 代碼
- 目標函數(shù)
- 仿真結(jié)果
- 參考文獻
算法流程
背包問題
參考[Matlab] 離散二進制粒子群算法(BPSO )解決背包問題
Matlab 代碼
%% 二進制蝙蝠算法%初始化種群 r = 0.7; narvs = 10; %問題的維度 n = 100; dim = narvs; maxgen = 100; populationSize = 100;Qmin=0; % Frequency minimum 頻率最小值 Qmax=2; % Frequency maximum 頻率最大值Q=zeros(n,1); % Frequency v=zeros(n,dim); % Velocities 速度cg_curve=zeros(1,maxgen);x = randsrc(n,narvs,[0,1;0.5,0.5]);%計算適應度值 fitness =targetPackage(x',100);%找到當前最好 [fmax,I]=max(fitness); best=x(I,:);A = 0.6; bestfit = zeros(maxgen,1); for i = 1:maxgencg_curve(i)=fmax; %當前值for j = i:populationSizefor d = 1:dimQ(i) = Qmin+(Qmin-Qmax)*rand; %更新頻率v(j,d) = v(j,d)+(x(j,d)-best(d))*Q(j); %更新速度% V型的轉(zhuǎn)換函數(shù),很多采用的是西格瑪函數(shù)用于速度到位置的離散轉(zhuǎn)換V_shaped_transfer_function=abs((2/pi)*atan((pi/2)*v(j,d))); if rand<V_shaped_transfer_function % Equation 10 in the paperx(j,d)=~x(j,d);elsex(j,d)=x(j,d);endif rand > r % Pulse rate ()x(j,d)=best(d);endendFnew = targetPackage(x(j,:)',1);if (Fnew >= fitness(j,:))&&(rand < A)x(j,:)=x(j,:);fitness(j,:) = Fnew;endif Fnew>=fmaxbest=x(j,:);fmax=Fnew;endend bestfit(i,:) = fmax; endtargetPackage(best',1) plot(bestfit)目標函數(shù)
function fitness = targetPackage(x,indNum) %targetPackage 此處顯示有關(guān)此函數(shù)的摘要 % X:表示種群 volume=[95 75 23 73 50 22 6 57 89 98]; %物品體積 value=[89 59 19 43 100 72 44 16 7 64]; %物品價值 Weight=300; %背包重量 % a = zeros(indNum,1); % for i=1:indNum % a(i,1) = volume*x(:,i); % end %超過總重量的個體的適應度值都視為0 k = find(volume*x<Weight); fitness=zeros(indNum,1); for j=1:size(k,2)fitness(k(j),1) = value*x(:,k(j)); end end仿真結(jié)果
參考文獻
[1] Mirjalili, Seyedali, Seyed Mohammad Mirjalili, and Xin-She Yang. 2014. “Binary Bat Algorithm.” Neural Computing and Applications 25 (3): 663–81.
總結(jié)
以上是生活随笔為你收集整理的[Matlab] 二进制蝙蝠算法用于解决背包问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑查询优化
- 下一篇: ubuntukylin14安装ns-al