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代码与数据下载地址
见博客主页