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

0 阅读1分钟

cover_image

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

原创 天天Matlab 天天Matlab 天天Matlab

2021年10月25日 00:01 ____

在小说阅读器中沉浸阅读

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.

预览时标签不可点

继续滑动看下一个

轻触阅读原文

天天Matlab

向上滑动看下一个

知道了

微信扫一扫
使用小程序


取消 允许


取消 允许


取消 允许

× 分析

__

跳转二维码

作者头像

微信扫一扫可打开此内容,
使用完整服务

: , , , , , , , , , , , , 。 视频 小程序 赞 ,轻点两下取消赞 在看 ,轻点两下取消在看 分享 留言 收藏 听过