基于改进动态规划算法求解有界背包问题的方法技术

技术编号:27030886 阅读:35 留言:0更新日期:2021-01-12 11:14
本发明专利技术涉及背包问题求解技术领域,公开一种基于改进动态规划算法求解有界背包问题的方法,定义物品种类最大数为N,背包的最大容量为C,物品种类为i,0≤i≤N,每种物品的单个价值为v

【技术实现步骤摘要】
基于改进动态规划算法求解有界背包问题的方法
本专利技术涉及背包问题求解
,具体地,涉及一种基于改进动态规划算法求解有界背包问题的方法。
技术介绍
背包问题(KP)是一种经典的组合优化问题,被证明是NP-hard。它在密码学、决策优化、任务调度、成本控制和货物装载中具有各种实际应用。KP有几个子问题,例如0-1背包问题(0-1KP),有界背包问题(BKP)和无界背包问题(UKP)等。对于BKP的求解方法,通常将BKP转换为具有多个有效解决方案的等效0-1KP进行求解,这是传统动态规划(DP)算法解决BKP(基本法)的核心概念。也就是说,BKP中每个物品类型i都会生成ki个独立副本。由于0-1KP中的ki个物品类型是由BKP每个物品类型i转换得到的,因此0-1KP中的物品类型数为如果ki的值较小或适中,这种方法的性能良好且易于实现。另一种方法是基于二进制分解的转换规则“MTB2”求解BKP。每个整数可以表示为2次幂的部分和,例如13=20+22+23。因此,BKP中的任何xi解都可以视为由2次幂乘以每一项的部分和组成的数项。“MTB2”算法将ki个物品副本拆分为2次幂的序列以及余数,其中任何可能的解都可以表示为该序列的部分和。例如,对于ki=23的物品类型。生成由2次幂的序列和余数组成的序列,即23=20+21+22+23+8。任何可用的解0≤xi≤23等于该序列的部分和。对于BKP中的每个物品类型i,需要解决个二元问题(0-1KP)。因此,0-1KP的等效物品数达到上述两种方法基本上是着重于将BKP转换为0-1KP求解,将N项实例(wi,ki,vi)分成N×ki项实例,并将BKP转换为等效KP,这种思想容易理解,但是很麻烦,因为需要在包含每个新项时更新向量f,因此,此算法需要的时间。存储最佳利润的状态表使空间需求为O(N+C)。MTB2算法,其核心概念是利用二元分解对项目数量进行变换,或将项目拆分为2k个项目的组合,这种方法需要O(NClogk)的时间和O(Nlogk+C)的空间。这两种方法将BKP转换成0-1KP求解没有考虑到BKP中的项目具有相同的值和权重,会产生大量不必要的冗余计算,并且增加了算法的时间和空间复杂度。
技术实现思路
本专利技术解决的技术问题在于克服现有技术的缺陷,提供一种可有效减少甚至消除冗余计算的基于改进动态规划算法求解有界背包问题的方法。本专利技术的目的通过以下技术方案实现:一种基于改进动态规划算法求解有界背包问题的方法,定义物品种类最大数为N,背包的最大容量为C,物品种类为i,0≤i≤N,每种物品的单个价值为vi,重量为wi,每种物品的个数为ki;定义一个(N+1)×(C+1)二维价值表f,背包容量为j,0≤j≤C;计算余数a,根据容量余数a对容量状态j进行分组,将拥有相同容量余数的容量状态j放在一组计算。进一步地,上述方法包括如下步骤:S1.计算余数a=jmodwi,余数a共有n种,将拥有相同余数a的容量j分为一组,共有n组,创建一个键值对列表ListQ;S2.在第s组计算中,起始令j=as,b=0,其中1≤s≤n,as为第s组对应的余数,b为背包容量为j时背包中可以装入物品i的最大数量;S3.计算S2中背包容量为j时的潜在价值创建一个键值对A<profit,number>,令A.profit=profit,A.number=b;S4.将键值对A<profit,number>插入ListQ中,判断ListQ中First_pair.number+ki是否小于A.number,满足条件,删除First_pair,否则从ListQ尾部插入A<profit,number>,其中First_pair为ListQ的第一个元素;S5.判断键值对Former_pair.profit是否大于A.profit,若不满足条件,则删去前一个键值对,循环本步骤直到满足条件,其中Former_pair为A的前一个键值对;S6.比较ListQ中所有元素的profit,取出最大的profit,得到背包容量为j、物品i放入背包时的最大价值fi(j)判断j是否为第s组中最后一个状态,若不是,则令j=j+n,继续执行步骤S3~S6;S7.判断第s组的任务是否结束,若已结束,则清空ListQ,令s=s+1,继续执行步骤S2~S7;S8.待n组任务都结束后,得到物品i放入容量为C的背包时的最大价值fi(C)=max{fi(1),fi(2),L,fi(s),L,fi(sn)},其中fi(s)表示第s组获得的最大价值;判断i是否大于N,若不满足,则令i=i+1,继续执行步骤S1~S8;若满足,通过比较每种物品i装入容量为C的背包中获得的最大价值fi(C),即得N种物品放入容量为C的背包中的最大总价值fN(C)=max{f1(C),f2(C),L,fN(C)}。并列进一步地,多个分组的计算任务并行执行。更进一步地,所述方法包括如下步骤:S1.计算余数a=jmodwi,余数a共有n种,将拥有相同余数a的容量j分为一组,共有n组,创建n个进程,在同一进程中对将具有相同容量状态j进行计算,在每个进程中创建一个键值对列表ListQ’;S2.在第s个进程中,起始令j=as,b=0,其中1≤s≤n,as为第s组对应的余数,b为背包容量为j时背包中可以装入物品i的最大数量;S3.计算S2中背包容量为j时的潜在价值创建一个键值对A<profit,number>,令A.profit=profit,A.number=b;S4.将键值对A<profit,number>插入ListQ’中,判断ListQ’中First_pair.number+ki是否小于A.number,满足条件,删除First_pair,否则从ListQ’尾部插入A<profit,number>,其中First_pair为ListQ’的第一个元素;S5.判断键值对Former_pair.profit是否大于A.profit,若不满足条件,则删去前一个键值对,循环本步骤直到满足条件,其中Former_pair为A的前一个键值对;S6.比较ListQ’中所有元素的profit,取出最大的profit,得到背包容量为j、物品i放入背包时的最大价值fi(j)判断第s个进程任务是否已结束,若不是,则令j=j+n,继续执行步骤S3~S6;S7.比较在每个进程中获得的最大价值fi(sl),其中1≤l≤n,得到物品i放入容量为C的背包时的最大价值fi(C)=max{fi(s1),fi(s2),L,fi(sn)};判断i是否大于N,若不满足,则令i=i+1,继续执行步骤S1~S8;若满足,通过比较每种物品i装入容量为C的背包中获得的最大价值fi(C),即得N种物品放入容量为C的背包中的最大总价值fN(C)=max{f1(C),f2(C),L,f本文档来自技高网
...

【技术保护点】
1.一种基于改进动态规划算法求解有界背包问题的方法,其特征在于,定义物品种类最大数为N,背包的最大容量为C,物品种类为i,0≤i≤N,每种物品的单个价值为v

【技术特征摘要】
1.一种基于改进动态规划算法求解有界背包问题的方法,其特征在于,定义物品种类最大数为N,背包的最大容量为C,物品种类为i,0≤i≤N,每种物品的单个价值为vi,重量为wi,每种物品的个数为ki;定义一个(N+1)×(C+1)二维价值表f,背包容量为j,0≤j≤C;计算余数a,根据容量余数a对容量状态j进行分组,将拥有相同容量余数的容量状态j放在一组计算。


2.根据权利要求1所述的基于改进动态规划算法求解有界背包问题的方法,其特征在于,包括如下步骤:
S1.计算余数a=jmodwi,余数a共有n种,将拥有相同余数a的容量j分为一组,共有n组,创建一个键值对列表ListQ;
S2.在第s组计算中,起始令j=as,b=0,其中1≤s≤n,as为第s组对应的余数,b为背包容量为j时背包中可以装入物品i的最大数量;
S3.计算S2中背包容量为j时的潜在价值



创建一个键值对A<profit,number>,令A.profit=profit,A.number=b;
S4.将键值对A<profit,number>插入ListQ中,判断ListQ中First_pair.number+ki是否小于A.number,满足条件,删除First_pair,否则从ListQ尾部插入A<profit,number>,其中First_pair为ListQ的第一个元素;
S5.判断键值对Former_pair.profit是否大于A.profit,若不满足条件,则删去前一个键值对,循环本步骤直到满足条件,其中Former_pair为A的前一个键值对;
S6.比较ListQ中所有元素的profit,取出最大的profit,得到背包容量为j、物品i放入背包时的最大价值fi(j)

判断j是否为第s组中最后一个状态,若不是,则令j=j+n,继续执行步骤S3~S6;
S7.判断第s组的任务是否结束,若已结束,则清空ListQ,令s=s+1,继续执行步骤S2~S7;
S8.待n组任务都结束后,得到物品i放入容量为C的背包时的最大价值fi(C)=max{fi(1),fi(2),L,fi(s),L,fi(sn)},其中fi(s)表示第s组获得的最大价值;判断i是否大于N,若不满足,则令i=i+1,继续执行步骤S1~S8;若满足,通过比较每种物品i装入容量为C的背包中...

【专利技术属性】
技术研发人员:万烂军张根龚坤李泓洋
申请(专利权)人:湖南工业大学
类型:发明
国别省市:湖南;43

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1