0_1背包问题的贪心局部搜索算法研究
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
从 RCL 中随机选择一件物品 y; 如果 y的重量不违反背包容量 ,把 y放入背包 ,标记 y,并且更新背包容量 ; 否则中止循环 ; } fo r ( i = 1; i ≤ n; i++ ) 检查背包外是否还有物品可放入背包 ; 产生一个可行解 x,计算放入背包的物品总价值 ; }
案. 拓宽邻域的办法是产生邻居 ,其途径主要有交换. 比较所得方案的总价值 ,若总价值增加则表示已找到一 个改进解 ,将得到的最好解作为局部最优解返回 ,搜索阶段结束. 若构造阶段得到的初始可行解已是当前局 部最优解 ,则局部搜索阶段返回的即是初始可行解.
可以选择不同的贪心策略应用于算法. 0 - 1背包问题最常用的贪心策略有价值贪心准则 ( vi ) 、重量贪 心准则 (w i ) 以及价值密度 ( vi /w i ) 贪心准则等. 本文所提出的两种算法均采用价值密度 ( vi /w i )贪心准则 ,并 且根据每次迭代 RCL 是否更新分别称为固定候选算法和变化候选算法. 2. 2 固定候选算法
中图分类号 : TP391
文献标识码 : A 文章编号 : 1009 - 7821 (2009) 05 - 0066 - 05
The study on greedy loca l search a lgor ithm of 0 - 1 knapsack problem
L IN Hong
背包问题 ( knap sack p roblem ,简称 KP)是一类在给定约束条件的情况下 ,求最大值的组合优化问题 ,是典 型的非确定多项式 ( non2determ inistic polynom ial, NP)完全难题. 解决该问题无论在理论上 ,还是在实际中都 具有重要的意义. 许多实际工程的优化问题都可以归结为背包问题 ,典型问题有 :处理机和数据库在分布式 计算机系统上的分配问题 、资源分配问题 、厂址选择问题 、货物装载问题 、批量切割问题 、项目选择决策问题 、 削减库存问题等. 随着网络技术的不断发展 ,背包公钥密码在电子商务中的公钥设计中也起着重要的作 用 [1 ]. 同时 ,在设计解决大量的复杂组合优化问题算法时 ,背包问题往往作为子问题出现. 背包问题的算法改 进 ,对复杂组合优化问题算法的改良是十分有益的. 因此 ,在近几十年中 , KP建模与算法的研究受到广泛的 重视 ,研究前景十分广阔.
第 5期
林 宏 : 0 - 1背包问题的贪心局部搜索算法研究
69
{ f3 = f; x3 = x; } 锁定当前处理的物品 ; } 返回局部最优解 x3 及对应的 f3 ;
}
局部搜索以构造阶段得到的可行方案为初始解 , 在其一定邻域内进行搜索 , 力求找到比它更好的方案. 本文采用将初始解中取出一件物品 ,再随机加入其他几件物品 , 直到不超过容量的方法来构造新的方案 , 比 较它们的物品总价值 ,将得到的最好解作为局部最优解返回. 即假定物品 j原先在背包内 , 则将其移出 , 再随 机放入其他物品直到背包容量 ,锁定 j并计算其移出后新方案的总价值. 对每个原先背包中的物品执行移动 过程 ,若总价值增加则表示已找到一个改进解. 所有物品全部被锁定后 , 将得到的最好解作为局部最优解返 回 ,搜索阶段结束. 若构造阶段得到的初始可行解已是当前局部最优解 , 则局部搜索阶段返回的即是初始可 行解. 2. 3 变化候选算法描述
固定候选算法描述如下 : 子过程 1:构造阶段 ,算法描述如下 : ( KK为 RCL 中物品件数 , n为所有物品件数 ) { 解 x =φ; 计算所有的物品评价值 ; 选择候选物品 ,构成 RCL ( restricted candidate list,限制候选列表 ) ; fo r ( i = 1; i ≤ KK; i + + ) {
态规划法 、回溯法 、穷举法 、图论法等 ,这些精确式方法都是指数级的 ,用来解决目前的实际问题比较困难 ;另
一类是启发式方法 , 如 :贪心算法 、遗传算法 、蚁群系统 、禁忌搜索算法 、模拟退火算法 、微粒群优化算法等.
由于启发式算法是模拟自然现象或人类思维过程而提出的新型算法 , 具有框架灵活 、与问题本身无关等一
构造阶段算法描述如下kk为rcl中物品件数选择候选物品构成rclrestrictedcandidatelist限制候选列表rcl中随机选择一件物品如果背包剩余容量已经小于背包外物品的最小重量中止循环否则将rcl剔除顺序将rcl外的第一项加入rcl保持rcl中可能项目仍为kk项区别在rcl的选择上首先选择价值密度非递增序列的前项构造成初始rclkk然后以当前系统时间作为随机种子产生随机数rcl中随机选择出一件物品放入背包不管这件物品是否符合背包要求都从rcl中剔除顺序将rcl第一项加入rcl因此rcl中供下回迭代被选择的项目称为可能项目始终保持为kk将成功放入背包的物品标记并更新背包容量
0 - 1背包问题可形式化描述为 :给定 c > 0, c ≥w i > 0, vi > 0, 1 ≤ i ≤ n,要求找出一个 n元 0 - 1向量 ( x1 , x2 , …, xn ) , xi ∈ { 0, 1} , 1 ≤ i ≤ n,使 Σw i xi ≤ c,并且使 Σvi xi 达到最大. xi = 1表示被放入背包 , xi = 0 表示未放入背包.
系列优点 , 因而获得了非常广泛的应用 [ 3 ]. 其他还包括概率算法以及近似算法.
局部搜索算法 ( local search algorithm )是一类启发式算法的通称 , 它从一个初始解开始 , 每一步在当前
邻域内找到一个更好的解 , 使目标函数逐步优化 , 直到不能进一步改进为止. 局部搜索算法具有灵活 、简便
在构造阶段 ,首先计算所有物品的价值密度 vi /w i , 按 vi /w i非递增的次序排列. 其次 , 按一定方式选择合 适的物品放入背包中 ,逐步构造出一个可行解. 这个过程分为以下 3个步骤完成 :
1) 构造限制候选列表 ( RCL ) . 设定程序的参数 α, 选择价值密度非递增序列的前 α·n项构造成 RCL, KK =α·n,此 RCL 固定不更新. 通常参数 α的取值在 0到 1之间.
随着背包问题的发展 ,产生了许多该问题的变形. 其中 0 - 1背包问题是最基础的背包问题 ,包含了背包 问题的最基本思想 ,其他类型的背包问题往往也可以转换成背包问题求解. 1 问题描述与数学模型
0 - 1背包问题的一般表述为 [2 ] :给定 n个物品和一个背包. 物品 i的重量是 w i ,其价值为 vi , 背包的容量
2) 从 RCL 中随机选择物品放入背包 ,一旦所选物品重量违反背包容量 ,中止循环. 将成功放入背包的物 品标记并更新背包容量 ,故实际上 RCL 中可供下回迭代被选择的项目 (称为可能项目 ) 越来越少. 可以以当 前系统时间作为随机种子 ,产生随机数.
3) 为保证尽可能地接近最优解 ,最后在所有未放入背包的物品中检查是否还有物品可以放入背包. 即 产生一个可行解 ,计算放入背包的物品总价值. 子过程 2:局部搜索阶段 ,算法描述如下 : { 读取由构造阶段产生的可行解 x3 及对应的总价值 f3 ; W h ile (背包中的物品未被全部锁定 ) { 以取出一件物品 ,再随机加入其他几件物品 ,直到不超过容量的方法来构造新的方案 x; 计算 x对应的总价值 f; if ( f > f3 )
第203009卷年第10月5期
闽江学院学报
JOURNAL OF M INJ IANG UN IVERSITY
Vol. 30 No. 5 Oct. 2009
0 - 1背包问题的贪心局部搜索算法研究
林 宏
(闽江学院物理学与电子信息工程系 , 福建 福州 350108)
摘要 : 为了提高求解 0 - 1背包问题的效率 ,提出了两种贪心局部搜索算法 ,分别称为固定候选算法和变化候选算
根据计算得到的贪心函数值建立 RCL. RCL 的长度 KK对算法的性能有很大影响 , 如果 KK等于 1, 则每 次添加的都是当前最好的解元素 ,这实际上是确定性贪心算法. 每次都得到相同的初始解 ,而如果 KK等于所
68
闽江学院学报
第 30卷
有的解元素 ,则构造算法是一个完全随机的过程 ,退化为随机多启动局部搜索算法. 局部搜索阶段以构造阶段得到的可行方案为初始解 ,在其一定邻域内进行搜索 ,力求找到比它更好的方
法. 算法都以有效的方式构造好的初始解 ,随后执行局部搜索对其进行解质量上的改进. 实验结果表明了两种算法
的有效性 、可行性及与价值密度贪心算法相比的优越性 ,同时进一步看出两种算法中变化候选算法相对较优 ,能够
取得更好的结果.
关键词 : 背包问题 ; NP问题 ; 算法 ; 贪心策略 ; 局部搜索
等优点 ,但通常得到的是局部最优解 ,容易陷入局部最优. 选择合适的初始解对于迭代改进方法至关重要.
2 算法设计
2. 1 算法框架描述
提出的两种基于贪心选择的局部搜索算法都是由多次迭代过程组成的 ,每次迭代包含一个构造阶段和
一个局部搜索阶段 [4 ]. 构造阶段产生一个可行解 x,再利用有效的局部搜索技术在 x的邻域内找到局部最优
收稿日期 : 2009 - 03 - 10 基金项目 : 闽江学院科技育苗基金项目 ( YKY08007B ) 作者简介 : 林 宏 (1976 - ) ,女 ,福建闽侯人 ,闽江学院物理学与电子信息工程系讲师.
第 5期
பைடு நூலகம்
林 宏 : 0 - 1背包问题的贪心局部搜索算法研究
67
为 c. 问应如何选择装入背包的物品 ,使得在不超过容量的情况下 , 所装物品的总价值最大 ?在选择装入的物 品时 ,对每种物品 i只有两种选择 ,即装入背包或不装入背包 ,不能将物品 i装入背包多次 ,也不能只装入部分 的物品 i.
在 x的邻域内进行局部搜索 ;
保存局部最优解 ;
}
比较所有迭代过程得到的局部最优解 ,其中最好的解作为全局最优解返回 ;
}
构造阶段的核心内容是 :假设解 x由许多解元素所构成 ,根据某种启发式准则 ,为每个解元素计算一个 评价值 ,表示在当前情况下 ,把此解元素加入到部分解中的优劣程度 ,取由评价值高的部分解元素构成受限 候选表 ( restricted candidate list, RCL ) ,然后从中随机选择一个解元素到部分解中 ,一直重复这个过程 ,直到解 构造完毕. 该过程具有自适应和随机特性.
n
n
∑ ∑ 数学模型为 : m ax vi xi , 约束条件 : vi xi ≤ c.
i =1
i =1
从计算复杂性理论来看 ,背包问题是个 NP困难问题 ,是否存在多项式时间有效算法尚不可知. 目前对此
类问题的研究已出现了不少有价值的方法. 这些方法主要分两大类 :一类是精确式方法 , 如 :分支限界法 、动
解 x′,并将 x′保存. 有限次的迭代完成之后 ,比较得到的所有局部最优解 ,其中最好的解即是本算法得到的最
终解.
算法描述如下 :
程序参数 :迭代参数 n
主过程 :
{
读取问题数据 ;
fo r ( i = 1; i ≤ n; i + +)
{
由构造阶段产生一个可行解 x ;
(D epa rtm en t of Physics and E lectron ics Inform a tion Eng ineering, M in jiang U n iversity, Fuzhou, Fu jian 350108, Ch ina)
Abstract: In order to raise the efficiency of solving for 0 - 1 Knap sack Problem , two kinds of greedy local search algorithm of 0 - 1 KP are p roposed, called fixed candidate algorithm and varying candidate algo2 rithm. Each algorithm is used by effective method to construct good initial solution, and then carried out local search to gain availability. The result of experiments show s that each algorithm is effective, feasible and p redom inant w ith the comparative standard of value density greedy algorithm. Further, varying candi2 date algorithm is relatively op tim ized among the two algorithm s and can obtain better result. Key words: knap sack p roblem; NP p roblem; algorithm; greedy strategy; local search
案. 拓宽邻域的办法是产生邻居 ,其途径主要有交换. 比较所得方案的总价值 ,若总价值增加则表示已找到一 个改进解 ,将得到的最好解作为局部最优解返回 ,搜索阶段结束. 若构造阶段得到的初始可行解已是当前局 部最优解 ,则局部搜索阶段返回的即是初始可行解.
可以选择不同的贪心策略应用于算法. 0 - 1背包问题最常用的贪心策略有价值贪心准则 ( vi ) 、重量贪 心准则 (w i ) 以及价值密度 ( vi /w i ) 贪心准则等. 本文所提出的两种算法均采用价值密度 ( vi /w i )贪心准则 ,并 且根据每次迭代 RCL 是否更新分别称为固定候选算法和变化候选算法. 2. 2 固定候选算法
中图分类号 : TP391
文献标识码 : A 文章编号 : 1009 - 7821 (2009) 05 - 0066 - 05
The study on greedy loca l search a lgor ithm of 0 - 1 knapsack problem
L IN Hong
背包问题 ( knap sack p roblem ,简称 KP)是一类在给定约束条件的情况下 ,求最大值的组合优化问题 ,是典 型的非确定多项式 ( non2determ inistic polynom ial, NP)完全难题. 解决该问题无论在理论上 ,还是在实际中都 具有重要的意义. 许多实际工程的优化问题都可以归结为背包问题 ,典型问题有 :处理机和数据库在分布式 计算机系统上的分配问题 、资源分配问题 、厂址选择问题 、货物装载问题 、批量切割问题 、项目选择决策问题 、 削减库存问题等. 随着网络技术的不断发展 ,背包公钥密码在电子商务中的公钥设计中也起着重要的作 用 [1 ]. 同时 ,在设计解决大量的复杂组合优化问题算法时 ,背包问题往往作为子问题出现. 背包问题的算法改 进 ,对复杂组合优化问题算法的改良是十分有益的. 因此 ,在近几十年中 , KP建模与算法的研究受到广泛的 重视 ,研究前景十分广阔.
第 5期
林 宏 : 0 - 1背包问题的贪心局部搜索算法研究
69
{ f3 = f; x3 = x; } 锁定当前处理的物品 ; } 返回局部最优解 x3 及对应的 f3 ;
}
局部搜索以构造阶段得到的可行方案为初始解 , 在其一定邻域内进行搜索 , 力求找到比它更好的方案. 本文采用将初始解中取出一件物品 ,再随机加入其他几件物品 , 直到不超过容量的方法来构造新的方案 , 比 较它们的物品总价值 ,将得到的最好解作为局部最优解返回. 即假定物品 j原先在背包内 , 则将其移出 , 再随 机放入其他物品直到背包容量 ,锁定 j并计算其移出后新方案的总价值. 对每个原先背包中的物品执行移动 过程 ,若总价值增加则表示已找到一个改进解. 所有物品全部被锁定后 , 将得到的最好解作为局部最优解返 回 ,搜索阶段结束. 若构造阶段得到的初始可行解已是当前局部最优解 , 则局部搜索阶段返回的即是初始可 行解. 2. 3 变化候选算法描述
固定候选算法描述如下 : 子过程 1:构造阶段 ,算法描述如下 : ( KK为 RCL 中物品件数 , n为所有物品件数 ) { 解 x =φ; 计算所有的物品评价值 ; 选择候选物品 ,构成 RCL ( restricted candidate list,限制候选列表 ) ; fo r ( i = 1; i ≤ KK; i + + ) {
态规划法 、回溯法 、穷举法 、图论法等 ,这些精确式方法都是指数级的 ,用来解决目前的实际问题比较困难 ;另
一类是启发式方法 , 如 :贪心算法 、遗传算法 、蚁群系统 、禁忌搜索算法 、模拟退火算法 、微粒群优化算法等.
由于启发式算法是模拟自然现象或人类思维过程而提出的新型算法 , 具有框架灵活 、与问题本身无关等一
构造阶段算法描述如下kk为rcl中物品件数选择候选物品构成rclrestrictedcandidatelist限制候选列表rcl中随机选择一件物品如果背包剩余容量已经小于背包外物品的最小重量中止循环否则将rcl剔除顺序将rcl外的第一项加入rcl保持rcl中可能项目仍为kk项区别在rcl的选择上首先选择价值密度非递增序列的前项构造成初始rclkk然后以当前系统时间作为随机种子产生随机数rcl中随机选择出一件物品放入背包不管这件物品是否符合背包要求都从rcl中剔除顺序将rcl第一项加入rcl因此rcl中供下回迭代被选择的项目称为可能项目始终保持为kk将成功放入背包的物品标记并更新背包容量
0 - 1背包问题可形式化描述为 :给定 c > 0, c ≥w i > 0, vi > 0, 1 ≤ i ≤ n,要求找出一个 n元 0 - 1向量 ( x1 , x2 , …, xn ) , xi ∈ { 0, 1} , 1 ≤ i ≤ n,使 Σw i xi ≤ c,并且使 Σvi xi 达到最大. xi = 1表示被放入背包 , xi = 0 表示未放入背包.
系列优点 , 因而获得了非常广泛的应用 [ 3 ]. 其他还包括概率算法以及近似算法.
局部搜索算法 ( local search algorithm )是一类启发式算法的通称 , 它从一个初始解开始 , 每一步在当前
邻域内找到一个更好的解 , 使目标函数逐步优化 , 直到不能进一步改进为止. 局部搜索算法具有灵活 、简便
在构造阶段 ,首先计算所有物品的价值密度 vi /w i , 按 vi /w i非递增的次序排列. 其次 , 按一定方式选择合 适的物品放入背包中 ,逐步构造出一个可行解. 这个过程分为以下 3个步骤完成 :
1) 构造限制候选列表 ( RCL ) . 设定程序的参数 α, 选择价值密度非递增序列的前 α·n项构造成 RCL, KK =α·n,此 RCL 固定不更新. 通常参数 α的取值在 0到 1之间.
随着背包问题的发展 ,产生了许多该问题的变形. 其中 0 - 1背包问题是最基础的背包问题 ,包含了背包 问题的最基本思想 ,其他类型的背包问题往往也可以转换成背包问题求解. 1 问题描述与数学模型
0 - 1背包问题的一般表述为 [2 ] :给定 n个物品和一个背包. 物品 i的重量是 w i ,其价值为 vi , 背包的容量
2) 从 RCL 中随机选择物品放入背包 ,一旦所选物品重量违反背包容量 ,中止循环. 将成功放入背包的物 品标记并更新背包容量 ,故实际上 RCL 中可供下回迭代被选择的项目 (称为可能项目 ) 越来越少. 可以以当 前系统时间作为随机种子 ,产生随机数.
3) 为保证尽可能地接近最优解 ,最后在所有未放入背包的物品中检查是否还有物品可以放入背包. 即 产生一个可行解 ,计算放入背包的物品总价值. 子过程 2:局部搜索阶段 ,算法描述如下 : { 读取由构造阶段产生的可行解 x3 及对应的总价值 f3 ; W h ile (背包中的物品未被全部锁定 ) { 以取出一件物品 ,再随机加入其他几件物品 ,直到不超过容量的方法来构造新的方案 x; 计算 x对应的总价值 f; if ( f > f3 )
第203009卷年第10月5期
闽江学院学报
JOURNAL OF M INJ IANG UN IVERSITY
Vol. 30 No. 5 Oct. 2009
0 - 1背包问题的贪心局部搜索算法研究
林 宏
(闽江学院物理学与电子信息工程系 , 福建 福州 350108)
摘要 : 为了提高求解 0 - 1背包问题的效率 ,提出了两种贪心局部搜索算法 ,分别称为固定候选算法和变化候选算
根据计算得到的贪心函数值建立 RCL. RCL 的长度 KK对算法的性能有很大影响 , 如果 KK等于 1, 则每 次添加的都是当前最好的解元素 ,这实际上是确定性贪心算法. 每次都得到相同的初始解 ,而如果 KK等于所
68
闽江学院学报
第 30卷
有的解元素 ,则构造算法是一个完全随机的过程 ,退化为随机多启动局部搜索算法. 局部搜索阶段以构造阶段得到的可行方案为初始解 ,在其一定邻域内进行搜索 ,力求找到比它更好的方
法. 算法都以有效的方式构造好的初始解 ,随后执行局部搜索对其进行解质量上的改进. 实验结果表明了两种算法
的有效性 、可行性及与价值密度贪心算法相比的优越性 ,同时进一步看出两种算法中变化候选算法相对较优 ,能够
取得更好的结果.
关键词 : 背包问题 ; NP问题 ; 算法 ; 贪心策略 ; 局部搜索
等优点 ,但通常得到的是局部最优解 ,容易陷入局部最优. 选择合适的初始解对于迭代改进方法至关重要.
2 算法设计
2. 1 算法框架描述
提出的两种基于贪心选择的局部搜索算法都是由多次迭代过程组成的 ,每次迭代包含一个构造阶段和
一个局部搜索阶段 [4 ]. 构造阶段产生一个可行解 x,再利用有效的局部搜索技术在 x的邻域内找到局部最优
收稿日期 : 2009 - 03 - 10 基金项目 : 闽江学院科技育苗基金项目 ( YKY08007B ) 作者简介 : 林 宏 (1976 - ) ,女 ,福建闽侯人 ,闽江学院物理学与电子信息工程系讲师.
第 5期
பைடு நூலகம்
林 宏 : 0 - 1背包问题的贪心局部搜索算法研究
67
为 c. 问应如何选择装入背包的物品 ,使得在不超过容量的情况下 , 所装物品的总价值最大 ?在选择装入的物 品时 ,对每种物品 i只有两种选择 ,即装入背包或不装入背包 ,不能将物品 i装入背包多次 ,也不能只装入部分 的物品 i.
在 x的邻域内进行局部搜索 ;
保存局部最优解 ;
}
比较所有迭代过程得到的局部最优解 ,其中最好的解作为全局最优解返回 ;
}
构造阶段的核心内容是 :假设解 x由许多解元素所构成 ,根据某种启发式准则 ,为每个解元素计算一个 评价值 ,表示在当前情况下 ,把此解元素加入到部分解中的优劣程度 ,取由评价值高的部分解元素构成受限 候选表 ( restricted candidate list, RCL ) ,然后从中随机选择一个解元素到部分解中 ,一直重复这个过程 ,直到解 构造完毕. 该过程具有自适应和随机特性.
n
n
∑ ∑ 数学模型为 : m ax vi xi , 约束条件 : vi xi ≤ c.
i =1
i =1
从计算复杂性理论来看 ,背包问题是个 NP困难问题 ,是否存在多项式时间有效算法尚不可知. 目前对此
类问题的研究已出现了不少有价值的方法. 这些方法主要分两大类 :一类是精确式方法 , 如 :分支限界法 、动
解 x′,并将 x′保存. 有限次的迭代完成之后 ,比较得到的所有局部最优解 ,其中最好的解即是本算法得到的最
终解.
算法描述如下 :
程序参数 :迭代参数 n
主过程 :
{
读取问题数据 ;
fo r ( i = 1; i ≤ n; i + +)
{
由构造阶段产生一个可行解 x ;
(D epa rtm en t of Physics and E lectron ics Inform a tion Eng ineering, M in jiang U n iversity, Fuzhou, Fu jian 350108, Ch ina)
Abstract: In order to raise the efficiency of solving for 0 - 1 Knap sack Problem , two kinds of greedy local search algorithm of 0 - 1 KP are p roposed, called fixed candidate algorithm and varying candidate algo2 rithm. Each algorithm is used by effective method to construct good initial solution, and then carried out local search to gain availability. The result of experiments show s that each algorithm is effective, feasible and p redom inant w ith the comparative standard of value density greedy algorithm. Further, varying candi2 date algorithm is relatively op tim ized among the two algorithm s and can obtain better result. Key words: knap sack p roblem; NP p roblem; algorithm; greedy strategy; local search