【技术实现步骤摘要】
基于改进动态规划算法求解有界背包问题的方法
本专利技术涉及背包问题求解
,具体地,涉及一种基于改进动态规划算法求解有界背包问题的方法。
技术介绍
背包问题(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的等效物品数达到上述两种方法基本上是着重于将BK ...
【技术保护点】
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
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。