【背包问题】基于粒子群算法求解0-1背包问题matlab代码

383 阅读3分钟

1 简介

背包问题是一个典型的组合优化难题,考虑的是如何在有效的空间内装载更多的物品,实现背包价值的最大化。它在很多领域都有广泛的应用。很多实际问题都可转换为0-1背包问题,例如下料问题、货款组合优化决策问题等。背包问题属于NP问题,目前求解的方法有精确算法(如动态规划)、近似算法(如贪心算法)及智能算法(如模拟退火算法)。精确的算法虽然可以求出它的解,但计算量与物品的数量成指数的关系,因此人们把求解问题的方法投向了近似算法及智能算法。本文考虑利用粒子群优化算法来求解背包问题。

粒子群优化算法(PSO)是由心理学家Kennedy和Eberhart博士在1995年共同提出的一种新的模仿鸟群行为的智能优化算法。该算法概念简单、实现方便、收敛速度快、参数设置少,是一种高效的搜索算法,目前被广泛应用于函数优化、神经网络训练等领域。粒子群优化算法通过粒子之间的集体协作使群体达到最优。在粒子群优化算法中,每个个体称为一个“粒 子”,代表一个潜在的解。粒子在飞行过程中能够记住自己找到的最好位置,称为“局部最优pbest”,此外还记住群体中所有粒子找到的最好位置,称为“全局最优gbest”,然后根据这两个最优来调整自己的飞行方向与飞行速度,即粒子群中的粒子根据式(1)和式(2)来更新自己的飞行速度与飞行距离。

2 部分代码

%%%%%%%%%%离散粒子群算法解决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;                              %惩罚函数系数

%%%%%%%%%初始化种群个体(限定位置和速度)%%%%%%%%%%

    %%%%%%%%%%%%%记录历代全局最优值%%%%%%%%%%%%

    gb(i)=gbest;

end

g                       %最优个体 

figure

plot(gb)

xlabel('迭代次数');

ylabel('适应度值');

title('适应度进化曲线')

3 仿真结果

4 参考文献

[1]赵传信, 季一木. 粒子群优化算法在0/1背包问题的应用[J]. 微机发展, 2005, 15(10):3.

部分理论引用网络文献,若有侵权联系博主删除。

5 MATLAB代码与数据下载地址

见博客主页