1 简介
根据群集智能优化原理,给出了一种基于萤火虫寻优思想的新算法———萤火虫群优化算法,并针对背包问题进行求解。经仿真实验获得了满意的结果,这说明了算法在背包问题求解上的有效性和具有更快的收敛速度,拓展了萤火虫群优化算法的应用领域。
2 部分代码
%求解0-1背包问题的改进萤火虫群算法(WGFA)
%设置参数:步长因子alpha=0.5,吸引度beta0=1,介质吸收因子gama=1,
%萤火虫的亮度即目标函数值
clc
clear all
close all
%%
%初始化参数
alpha=0.2; % 步长因子Randomness 0--1
gamma=1.0; % 介质吸收因子
beta0=1.0; %最大吸引度
wmax=1;wmin=0.05;%权重,用于计算线性递减惯性权重
Pm=0.1;%变异概率
%使用文献中案例1的参数
W=[95 4 60 32 23 72 80 62 65 46];%物品重量
P=[55 10 47 5 4 50 8 61 85 87];%物品价值
V=269;%背包最大容量
n=size(W,2);%物品个数
iter_max=30;%迭代次数
M=1;%萤火虫种群个数
runtime=100;%运行次数
xn=round(rand(M,n));%随机生成初始解
for i=1:iter_max
%计算线性递减惯性权重
wt=wmax-(i*(wmax-wmin))/iter_max;
%用贪心策略修复当前解
[xn]=f_GA(xn,M,n,V,P,W);
%种群排序
[xn,Lightn]=f_sort(xn,P,W,M,V);
xo=xn;Lighto=Lightn;
vbest=xo(1,:);
Lightbest=Lightn(1);
fbest=Lightbest;
vbest_set(i,:)=vbest;
if i==1
fbest_set(i)=fbest;
else
if fbest>fbest_set(i-1)
fbest_set(i)=fbest;
else
fbest_set(i)=fbest_set(i-1);
end
end
%种群更新
[xn]=f_move(M,n,xn,Lightn,xo,Lighto,alpha,gamma,beta0,wt);
[xn,Lightn]=f_sort(xn,P,W,M,V);
%种群变异
[xn]=f_variation(xn,Pm,M,n);
%将种群离散化
for j=1:M
for k=1:n
if xn(j,k)>0.5
xn(j,k)=1;
else
xn(j,k)=0;
end
end
end
end
figure(1)
plot(fbest_set)
xlabel('迭代次数')
ylabel('适应度')
3 仿真结果
4 参考文献
[1]莫愿斌, 马彦追, & 郑巧燕. (2014). 求解0-1背包问题的萤火虫算法. 计算机工程与设计(8), 2778-2784.