基于花授粉算法的背包问题求解
摘要:本文主要介绍利用花授粉算法对背包问题进行求解。
1.背包问题
背包问题的一般提法为:已知
n
n
n 个物品
s
1
,
s
2
,
.
.
.
,
s
n
s_1,s_2,...,s_n
s1,s2,...,sn 的重量及其价值分别为
w
j
>
0
w_j >0
wj>0和
c
j
>
0
(
j
=
1
,
2
,
…
,
n
)
c_j >0( j=1,2,…,n)
cj>0(j=1,2,…,n)背包的容量假设为
V
>
0
V >0
V>0?如何选择那些物品装入背包可使在背包的容量限制之内所装物品的总价值最大,引入变量
x
j
x_j
xj
x
j
=
{
1
,
物品放入背包
0
,
否则
(5)
x_j=\begin{cases}1,物品放入背包\\ 0,否则\end{cases}\tag{5}
xj={1,物品放入背包0,否则(5)
则该问题的数学模型为:
m
a
x
(
∑
j
=
1
n
)
c
j
x
j
(6)
max(\sum_{j=1}^n)c_jx_j\tag{6}
max(j=1∑n)cjxj(6)
约束条件:
{
∑
j
=
1
n
w
j
x
j
≤
V
x
j
∈
{
0
,
1
}
,
j
=
1
,
2
,
.
.
.
,
n
(7)
\begin{cases} \sum_{j=1}^nw_jx_j\leq V \\ x_j\in\{0,1\},j=1,2,...,n \end{cases} \tag{7}
{∑j=1nwjxj≤Vxj∈{0,1},j=1,2,...,n(7)
2.实验结果
背包问题的实验数据如下:
C = [72,490,651,833,833,489,359,337,267,441,...
70,934,467,661,220,329,440,774,595,98,424,...
37,807,320,501,309,834,851,34,459,111,...
253,159,858,793,145,651,856,400,...
285,405,95,391,19,96,273,152,...
473,448,231];
W = [438,754,699,587,789,...
912,819,347,511,287,541,784,676,198,...
572,914,988,4,355,569,144,272,531,...
556,741,489,321,84,194,483,205,607,...
399,747,118,651,806,9,607,121,...
370,999,494,743,967,718,397,...
589,193,369];
V = 11258;
花授粉算法原理请参考:https://blog.csdn.net/u011835903/article/details/108346554
dim = length(C);%维度
pop = 50;%种群数量
lb = 0;
ub = 1;
MaxIter = 500;%迭代次数
fobj = @(x) fun(x,C,W,V);%适应度函数
%优化算法求解
最终结果:
4.参考文献
[1]李超文,何正友,张海平,高辉.基于二进制粒子群算法的辐射状配电网故障定位[J].电力系统保护与控制,2009,37(07):35-39.
[1]马慧民,叶春明,张爽.二进制改进粒子群算法在背包问题中的应用[J].上海理工大学学报,2006(01):31-34.