基于传递函数,我们提出了一种新的二进制乌鸦搜索算法(BCSA)来求解0-1背包问题(0-1KP),它不仅保留了原有乌鸦搜索算法良好的探索能力,而且具有良好的开发能力。充分利用修复优化方法处理不可行解,在提升算法搜索能力的同时,也加快了算法的收敛速度。为验证BCSA求解0-1KP的性能,将其计算结果与七种不同算法的计算结果进行了比较,发现BCSA的求解精度高、算法稳定性良好,非常适合用来处理大规模0-1KP实例。 Based on the transfer function, we propose a new Binary Crow Search Algorithm (BCSA) for solving the 0-1 Knapsack Problem (0-1KP). It not only retains the good exploration ability of the original crow search algorithm, but also has good development ability. Making full use of repair optimization methods to handle infeasible solutions improves the search ability of the algorithm while also accelerating its convergence speed. In order to verify the performance of BCSA in solving 0-1KP, its calculation results were compared with those of seven different algorithms. It was found that BCSA has high resolution and good algorithm stability, and is very suitable for processing large-scale 0-1KP instances.
基于传递函数,我们提出了一种新的二进制乌鸦搜索算法(BCSA)来求解0-1背包问题(0-1KP),它不仅保留了原有乌鸦搜索算法良好的探索能力,而且具有良好的开发能力。充分利用修复优化方法处理不可行解,在提升算法搜索能力的同时,也加快了算法的收敛速度。为验证BCSA求解0-1KP的性能,将其计算结果与七种不同算法的计算结果进行了比较,发现BCSA的求解精度高、算法稳定性良好,非常适合用来处理大规模0-1KP实例。
演化算法,乌鸦搜索算法,转换函数,0-1背包问题
Zexian Gao1,2, Hansong Zhang1,2, Fei Sun1,2, Li’na Wang1,2
1College of Information Technology, Hebei GEO University, Shijiazhuang Hebei
2College of Big Data & Computing Intelligence Laboratory, Hebei GEO University, Shijiazhuang Hebei
Received: Mar. 22nd, 2023; accepted: Apr. 21st, 2023; published: Apr. 28th, 2023
Based on the transfer function, we propose a new Binary Crow Search Algorithm (BCSA) for solving the 0-1 Knapsack Problem (0-1KP). It not only retains the good exploration ability of the original crow search algorithm, but also has good development ability. Making full use of repair optimization methods to handle infeasible solutions improves the search ability of the algorithm while also accelerating its convergence speed. In order to verify the performance of BCSA in solving 0-1KP, its calculation results were compared with those of seven different algorithms. It was found that BCSA has high resolution and good algorithm stability, and is very suitable for processing large-scale 0-1KP instances.
Keywords:Evolutionary Algorithm, Crow Search Algorithm, Conversion Function, 0-1 Knapsack Problem
Copyright © 2023 by author(s) and beplay安卓登录
This work is licensed under the Creative Commons Attribution International License (CC BY 4.0).
http://creativecommons.org/licenses/by/4.0/
背包问题(Knapsack Problem, KP) [
目前,求解0-1背包问题的方法大体可分为精确求解法 [
乌鸦搜索算法(CSA)是由Askarzadeh [
0-1KP的定义:给定n个物品的集合 N = { 1 , 2 , ⋯ , n } 和一个背包容量为C的背包,每一种物品i都有两个基本属性:价值属性和重量属性。物品的重量集合为 W = { w 1 , w 2 , ⋯ , w n } ,价值集合为 P = { p 1 , p 2 , ⋯ , p n } 。故将0-1背包问题的数学模型描述如下:
max f ( x ) = ∑ i = 1 n p i x i (1)
s.t. ∑ i = 1 n w i x i ≤ C (2)
x i ∈ { 0 , 1 } , i = 1 , 2 , ⋯ , n (3)
当xi= 1时,表示第i项放入背包;当xi= 0时,表示第i项未被选取放入背包。
乌鸦是一种有着群居生活习性的鸟类,它们拥有聪明的头脑,能够记忆存储信息。从算法的角度来看,乌鸦代表搜索者,乌鸦种群的整个飞行区域代表搜索空间,每一只乌鸦的位置代表一个可行解。乌鸦位置的好坏,通过目标函数值来判断,环境中的最佳食物来源即为全局最优解。
为了便于阐述如何利用乌鸦搜索算法CSA求解连续优化问题,不失一般性,设maxf(X), X ∈ [ l b , u b ] d 是最小数值优化问题。其中,lb和ub是个体X中每一维度分量的下界和上界。下面将对CSA的算法原理 [
假设乌鸦的种群规模为N,最大迭代次数为MIT,问题的维度为d;第t次迭代时, X i , t = [ x 1 i , t , x 2 i , t , ⋯ , x d i , t ] 表示为乌鸦i的当前位置一个位置向量,其中 i = 1 , 2 , ⋯ , N ; t = 1 , 2 , ⋯ , M I T 。每一只乌鸦所找到的历史最优位置称为记忆位置。APi,t表示在第t次迭代乌鸦i的感知概率;fli,t表示第t次迭代时乌鸦i的飞行长度。乌鸦i会随机选择一只乌鸦j进行跟随,此时乌鸦j感到一定的威胁,通过引入感知概率来保护自己的食物被窃取。
CSA中的位置更新方式分为两种:当迭代时的发现概率小于感知概率时,即乌鸦j没有发现被乌鸦i跟踪,此时乌鸦i的位置更新公式为:
x i k ( t + 1 ) = x i k ( t ) + r a n d × f l × ( m j k ( t ) − x i k ( t ) ) (4)
其中,xik(t+1)表示第i只乌鸦在当前迭代第k个维度时的位置,fl为乌鸦飞行长度,mjk(t)表示第j只乌鸦在第k维度的记忆值,rand表示是服从均匀分布的[0, 1]中的随机数。当迭代时的发现概率大于感知概率时,即乌鸦j发现了乌鸦i跟踪它,那么乌鸦j就会把乌鸦i愚弄到搜索空间中的一个任意位置,以保证自己的食物不被窃取。此时乌鸦的位置更新公式为:
x i k ( t + 1 ) = r a n d × ( u b − l b ) + l b (5)
综上所述,位置更新公式为:
x i k ( t + 1 ) = { x i k ( t ) + r a n d × f l × ( m j k ( t ) − x i k ( t ) ) , r j ≥ A P r a n d × ( u b − l b ) + l b , r j < A P (6)
当乌鸦的位置发生改变时,采用如下方式对乌鸦的记忆进行更新:
M i ( t + 1 ) = { X i ( t + 1 ) , f ( X i ( t + 1 ) ) < f ( M i ( t ) ) M i ( t ) , 其 他 (7)
原始的CSA算法是针对实数域上的连续优化问题提出来的,而求解0-1KP问题是组合优化问题,需要将实数域转化为离散域,因此本文采用传递函数进行离散化处理。常见的主流传递函数有S型和V型,本文使用S3(如公式(8)所示),用于解决乌鸦搜索算法的离散化问题。
S 3 ( x ) = 1 1 + e − x 2 (8)
二进制乌鸦搜索算法(BCSA)是在基于CSA的基础上展开的,上节已经给出,本节不再赘述。现给出BCSA的伪代码。
设maxf(X), X ∈ [ 0 , 1 ] d 是最小数值优化问题,参数d、N、MIT含义同上,不再重复。感知概率AP = 0.1,飞行长度fl = 2,rand[1, N]是随机选1到N之间的一个整数, B = ( b 1 , b 2 , ⋯ , b n ) ∈ [ 0 , 1 ] d 表示BCSA的最优个体,则将BCSA算法伪代码描述如下。
算法1 BCSA
输入:maxf(X)实例,参数d、N、MIT、AP、fl。
输出:最优个体B以及目标函数值f(B)。
1 随机初始化种群 P ( 0 ) = { X i ( 0 ) = ( x i 1 ( 0 ) , x i 2 ( 0 ) , ⋯ , x i d ( 0 ) ) | 1 ≤ i ≤ N } , x i j ( 0 ) ∈ [ 0 , 1 ] ;
2 GROA处理后,计算f(Xi(0))用于评价个体Xi(0), 1 ≤ i ≤ N ,确定最优个体B;
3 初始化Xi(0)的记忆 M i ( 0 ) = ( m i 1 ( 0 ) , m i 2 ( 0 ) , ⋯ , m i d ( 0 ) ) ,即 M i ( 0 ) = X i ( 0 ) , 1 ≤ i ≤ N ;
4 for t←1 to MIT do
5 for i←1 to N do
6 j←rand[1, N];
7 if rand1(0, 1) > AP then
8 for k←1 to d do
9 根据公式(4)更新乌鸦Xi(t + 1)的位置;
10 end for
11 else
12 for k←1 to d do
13 根据公式(5)更新乌鸦Xi(t + 1)的位置;
14 end for
15 end if
16 利用公式(8)对乌鸦的位置进行离散化;
17 计算f(Xi(t + 1))用于评价新个体Xi(t + 1), 1 ≤ i ≤ N ,确定最优个体B;
18 利用公式(7)更新乌鸦Mi(t+1)的记忆值;
19 end for
20 end for
21 return (B, f(B))。
在BCSA中,个体编码为 Y i = [ y i 1 , y i 2 , ⋯ , y i d ] ∈ [ l b , u b ] d ,利用转换函数转换为 X i = [ x i 1 , x i 2 , ⋯ , x i d ] ∈ { 0 , 1 } d ,xi1= 1表示物品被选择放入背包,反之,没有放入背包。
由于CSA中乌鸦的位置是由随机生成的向量决定的,解空间中会不可避免地出现不可行解,这就导致无法根据目标函数值来判断个体的适应性。一般而言,修复法、惩罚函数法以及修复和优化策略常常用来解决不可行解。本文采用了文献 [
采用BCSA算法求解0-1KP的具体步骤如下:首先需要对每个物品进行价值密度降序,并将排序后的结果保存在一维数组中;将乌鸦种群初始化为0-1向量,再利用GROA对种群中每个个体进行修复优化并排序,完成对乌鸦记忆的初始化;然后重复以下过程直到满足终止条件:随机选择一只乌鸦j进行跟踪,在感知概率一定的条件下,通过公式(6)对乌鸦的位置进行更新,利用传递函数进行离散化;接着利用GROA修复不可行解;通过公示(7)更新乌鸦记忆值;最后将最优解B输出。具体算法流程如图1所示。
图1. 算法BCSA求解0-1KP的流程图
本次实验所用的微型计算机:惠普笔记本,硬件环境为Intel(R) Core(TM) i7-10750H CPU @ 2.60 GHz 2.59 GHz,操作系统为Microsoft Windows 10。在Microsoft Visual Studio 2017编译环境中使用C语言编程。
实例可从https://pages.mtu.edu/~kreher/cages/Data.html获取。为了验证BCSA的性能,与求解相同实例的算法进行比较,这7个算法分别为:BTSA [
本节中,将其他7个算法求解0-1KP的计算结果与BCSA的计算结果进行了比较;AVE和STD分别表示测试50次计算结果的平均值和标准差,其中未达到OPT的用蓝色标示;各算法的求解结果在表1、表2中给出。
由以下两表可知,BCSA在求解25个实例的结果中,就平均值来说,有24个实例能够达到最优值,BFFA和BHHO表现较差仅有18个实例达到最优,BCSA在8个算法中的排名第一;就标准差来说,BCSA在25个实例中,除了KP24d,其他实例的标准差都为0,而其他算法都存在较大的标准差。BCSA在求解精度以及算法稳定性方面远超其他算法。
实例 | OPT | Results | BCSA | BHHO | BWOA | BTSA | BFFA | BPSO | BTLBO | BAOA |
---|---|---|---|---|---|---|---|---|---|---|
KP8a | 3924400 | AVG | 3924400 | 3924400 | 3924400 | 3924400 | 3924400 | 3924400 | 3924400 | 3924400 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP8b | 3813669 | AVG | 3813669 | 3813669 | 3807966 | 3801149 | 3813669 | 3813669 | 3813669 | 3810772 |
STD | 0.00 | 0.00 | 12514.7 | 19113.5 | 0.00 | 0.00 | 0.00 | 10364.8 | ||
KP8c | 3347452 | AVG | 3347452 | 3347452 | 3347452 | 3347452 | 3347452 | 3347452 | 3347452 | 3347452 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP8d | 4187707 | AVG | 4187707 | 4187707 | 4187707 | 4187707 | 4187707 | 4187707 | 4187707 | 4187707 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP8e | 4955555 | AVG | 4955555 | 4955555 | 4955555 | 4955555 | 4955555 | 4955555 | 4955555 | 4955555 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP12a | 5688887 | AVG | 5688887 | 5688887 | 5684058 | 5682416 | 5688887 | 5688887 | 5686770 | 5688887 |
STD | 0.00 | 0.00 | 8691.12 | 8957.64 | 0.00 | 0.00 | 5847.92 | 0.00 | ||
KP12b | 6498597 | AVG | 6498597 | 6496784 | 6485297 | 6498597 | 6490848 | 6498597 | 6497582 | 6498597 |
STD | 0.00 | 9133.17 | 10761.9 | 0.00 | 8958.91 | 0.00 | 8925.34 | 0.00 | ||
KP12c | 5170626 | AVG | 5170626 | 5170626 | 5170626 | 5170626 | 5170626 | 5170626 | 5170626 | 5170626 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP12d | 6992404 | AVG | 6992404 | 6992404 | 6992404 | 6992404 | 6925856 | 6992404 | 6992404 | 6939908 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 24685.4 | 0.00 | 0.00 | 2764.2 | ||
KP12e | 5337472 | AVG | 5337472 | 5337472 | 5337472 | 5337472 | 5337472 | 5337472 | 5337472 | 5337472 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 |
表1. 求解KP8a-KP12e实例的结果比较
实例 | OPT | Results | BCSA | BHHO | BWOA | BTSA | BFFA | BPSO | BTLBO | BAOA |
---|---|---|---|---|---|---|---|---|---|---|
KP16a | 7850983 | AVG | 7850983 | 7850983 | 7840213 | 7831459 | 7850983 | 7850983 | 7846097 | 7850983 |
STD | 0.00 | 0.00 | 5067.47 | 3075.66 | 0.00 | 0.00 | 2941.28 | 0.00 | ||
KP16b | 9352998 | AVG | 9352998 | 9352998 | 9352998 | 9332841 | 9352998 | 9352998 | 9352998 | 9352998 |
STD | 0.00 | 0.00 | 0.00 | 44347.16 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP16c | 9151147 | AVG | 9151147 | 9140752.5 | 9151147 | 9151147 | 9146921 | 9151147 | 9151147 | 9145012.5 |
STD | 0.00 | 664.81 | 0.00 | 0.00 | 347.25 | 0.00 | 0.00 | 491.49 | ||
KP16d | 9348889 | AVG | 9348889 | 9348889 | 9348889 | 9348889 | 9348889 | 9348889 | 9348889 | 9348889 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP16e | 7769117 | AVG | 7769117 | 7769117 | 7769117 | 7762520 | 7769117 | 7769117 | 7769117 | 7769117 |
STD | 0.00 | 0.00 | 0.00 | 18471.25 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP20a | 10727049 | AVG | 10727049 | 10727049 | 10708475 | 10727049 | 10716934 | 10727049 | 10719049 | 10716101 |
STD | 0.00 | 0.00 | 13971.41 | 0.00 | 12136.09 | 0.00 | 11524.82 | 11579.37 | ||
KP20b | 9818261 | AVG | 9818261 | 9818261 | 9818261 | 9814002 | 9818261 | 9818261 | 9818261 | 9818261 |
STD | 0.00 | 0.00 | 0.00 | 236.17 | 0.00 | 0.00 | 0.00 | 0.00 | ||
KP20c | 10714023 | AVG | 10714023 | 10713149 | 10714023 | 10714023 | 10712972 | 10714023 | 10714023 | 10714023 |
STD | 0.00 | 701.52 | 0.00 | 0.00 | 756.27 | 0.00 | 0.00 | 0.00 | ||
KP20d | 8929156 | AVG | 8929156 | 8924769.3 | 8926581 | 8929156 | 8929156 | 8920933.5 | 8924843.2 | 8927679.4 |
STD | 0.00 | 6571.63 | 5343.29 | 0.00 | 0.00 | 7017.74 | 5987.25 | 6249.38 | ||
KP20e | 9357969 | AVG | 9357969 | 9357969 | 9357528 | 9357969 | 9357328 | 9357969 | 9357969 | 9357969 |
STD | 0.00 | 0.00 | 402.67 | 0.00 | 441.87 | 0.00 | 0.00 | 0.00 | ||
KP24a | 13549094 | AVG | 13549094 | 13546249 | 13549094 | 13549094 | 13549094 | 13544128 | 13549094 | 13547058 |
STD | 0.00 | 6476.52 | 0.00 | 0.00 | 0.00 | 7096.16 | 0.00 | 5941.82 | ||
KP24b | 12233713 | AVG | 12233713 | 12233713 | 12233713 | 12233713 | 12218247 | 12233713 | 12229036 | 12233713 |
STD | 0.00 | 0.00 | 0.00 | 0.00 | 1647.24 | 0.00 | 954.67 | 0.00 | ||
KP24c | 12448780 | AVG | 12448780 | 12448780 | 12436134 | 12448780 | 12439116 | 12448780 | 12448780 | 12448780 |
STD | 0.00 | 0.00 | 3046.73 | 0.00 | 2708.82 | 0.00 | 0.00 | 0.00 | ||
KP24d | 11815315 | AVG | 11814367 | 11814208 | 11811112 | 11814108 | 11811928 | 11811719 | 11812994 | 11814072 |
STD | 2022.36 | 2845.32 | 2782.64 | 3189.27 | 2934.46 | 3069.79 | 2743.74 | 3058.82 | ||
KP24e | 13940099 | AVG | 13940099 | 13933743 | 13940099 | 13940099 | 13940099 | 13927628 | 13940099 | 13938971 |
STD | 0.00 | 13901.22 | 0.00 | 0.00 | 0.00 | 15569.45 | 0.00 | 11969.53 |
表2. 求解KP16a-KP24e实例的结果比较
本文提出了一种以S型传递函数为基础的二进制乌鸦搜索算法BCSA,该算法可以有效地解决各类二元优化问题。通过对25个大规模0-1KP实例运用BCSA进行求解,与7种算法的求解结果进行比较,以此验证BCSA求解0-1KP的能力。经计算结果可知,BCSA在解0-1KP问题时,具备较高的精确度和稳定性,因此可以极大地提升解决这一问题的效率。此外,深入研究BCSA在其他组合优化问题(例如集合覆盖)的应用以及更加高效的离散化方法,也是值得我们持续探索的课题。
河北省自然科学基金项目(项目编号:F2020403013),河北省高等学校科学技术研究项目(项目编号:ZD2021016)。
高泽贤,张寒崧,孙 菲,王丽娜. 基于S型传递函数的二进制乌鸦搜索算法求解0-1背包问题Binary Crow Search Algorithm Based on S-Type Transfer Function for Solving 0-1 Knapsack Problem[J]. 计算机科学与应用, 2023, 13(04): 915-922. https://doi.org/10.12677/CSA.2023.134089
https://doi.org/10.1155/2016/5732489
https://doi.org/10.1109/PIMRC.2015.7343576
https://doi.org/10.1016/j.compstruc.2016.03.001
https://doi.org/10.1016/j.engappai.2020.103541
https://doi.org/10.1016/j.future.2019.02.028
https://doi.org/10.1016/j.advengsoft.2016.01.008
https://doi.org/10.1016/j.asoc.2018.07.033
https://doi.org/10.1109/ICNN.1995.488968
https://doi.org/10.1016/j.cad.2010.12.015
https://doi.org/10.1007/s10489-020-01893-z