【背包问题】基于萤火虫算法求解背包问题matlab源码

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.​

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab科研辅导帮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值