01背包问题拉格朗日求解附程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

• 极小化L(x, λ)得P问题的拉格朗日松弛问题:
d ( ) min L( x, )
x X
• d(λ)为对偶函数,拉格朗日对偶问题(D):
max d ( ) m
R
外逼近法求解
求解(D)问题的外逼近法步骤
步骤1: v1 -
c
i 1
n
i
s1 bi B v2 0
0
0.5
1 n
2
1.5
2
2.5 x 10
5
Further Work
• 关于λ的更多启发式计算
0 -1000 -2000
r
4.5 4 3.5 3 2.5 2 1.5 1 0.5 0
原问题最优值: -3000 Value_optP=5918
-4000
物品价值
1
2
3
4
5 6 迭代次数
7
8
9
10
物品总大小: -6000 998 -7000 λ=2.7429 算法运行时间: -8000 -9000 106.947516seconds.
物品价值
拉格朗日松弛解背包问题 0 对偶解 原问题
2.5
-500
-1000
2
1.5
物品总大小: -2000 997 λ=1.4286 -2500 算法运行时间: 4.310928 seconds. -3000
-3500 1 2 3 4
-1500
r
1
0.5
0
1
2
3
4
5 6 迭代次数
7
8
9
10
5 6 迭代次数
-7000 1 2 3 4 5
物品价值
-3000
r
1
2
3
4
5
6 7 迭代次数
8
9
10
11
对偶解 原问题 6 7 迭代次数 8 9 10 11
实验与分析
• n=400
拉格朗日松弛解背包问题 0 -1000 对偶解 原问题
4 3.5 3 2.5 2 1.5 1 0.5 0
原问题最优值: -2000 Value_optP=4869
n n
则λ是D的最优解,停止。否则,执行步骤4。 步骤4:如果 s3 0 ,则令 v1 v3 s1 s3 ,转步骤2;(可行化判断) 如果 s3 0 ,则令 v2 v3 s2 s3 ,转步骤2。
等价最短路问题
…………..
1
n
1
2
3
4
…………..
0
2
4
6
8
…………..
2n
1
3
0.5
0
1
2
3
4
5 6 迭代次数
7
8
9
10
1
2
3
4
5 6 迭代次数
7
8
9
10
实验与分析
• n=300
拉格朗日松弛解背包问题 0
4 3.5 3 2.5 2 1.5 1 0.5 0
-1000
原问题最优值: Value_optP=4153 -2000 物品总大小: -4000 978 λ=2.3871 -5000 算法运行时间: -6000 40.831066seconds.
5
7
9
…………..
2n+1
2n+2
构造价值邻接矩阵D1,容积代价邻接矩阵D2
ci ci bi
D3=D1+ λ*D2
算法伪代码
If

n
Else pv=Shortestpath(D1) ps= Shortestpath(D2) While(true) do λ=*v(ps)-v(pv)]/[s(pv)-s(ps)] pλ= Shortestpath(D3) If L(pλ) = L(ps) then return ps; break; else if size(pλ)<=B then //可行化判断 ps=pλ else pv=pλ End if End if End while
i 1
n
பைடு நூலகம்
s2 B
步骤2:计算 v1 v2 / s2 s1 ,用的Dijkstra 算法最短路求解(P) 的拉格朗日松弛问题。设x是其对应最优解。 步骤3: v3 - i 1 ci xi s3 i 1 bi xi B,如果 s3 v3 s1 v1
Value_optP= i 1 ci
n
i 1 i
b B then
实验与分析
• 设背包大小B=1000,随机生成0-100的物品 价值参数和物品尺寸参数。 • 分别做物品数n=100,200,300,400,500的实验。 • 电脑配置:
实验与分析
• n=100
原问题最优值: Value_optP=2936
-3000
物品总大小: -4000 995 -5000 λ=2.5714 -6000 算法运行时间: -7000 73.692048 seconds.
-8000 1 2 3 4 5
物品价值
r
1
2
3
4
5
6 7 迭代次数
8
9
10
11
6 7 迭代次数
8
9
10
11
实验与分析
拉格朗日松弛解背包问题
• n=500
7
8
9
10
实验与分析
拉格朗日松弛解背包问题
• n=200
原问题最优值: Value_optP=3823
物品价值
0 -500
2.5
对偶解 原问题
-1000
2
-1500 -2000
r
1.5
1
-2500 物品总大小: -3000 982 λ=1.8065 -3500 算法运行时间: -4000 16.593007 seconds. -4500
i 1 n i 1
n
0-1背包问题的拉格朗日对偶问题
• 构造拉格朗日函数如下: n n L( x, ) ci xi ( bi xi B)
L( x, ) (ci bi ) xi B
ci ci bi
i 1 i 1 n i 1
-10000 1 2 3 4 5 6 迭代次数 7 8
-5000
对偶解 原问题 9
10
算法时间性能
• 由于Dijkstra算法的时间复杂度为 O(n2 ) • 基于Dijkstra算法的拉格朗日松弛对偶方法 的时间复杂度与 n2 呈线性关系。
时间复杂度分析 120 100
80
运行时间
60
40
20
0
0-1背包问题的拉格朗日松弛解法
(附程序,见上传者“我的文档”)
关键词:最短路,Dijkstra算法,拉格朗日松弛, 外部逼近法
0-1背包问题与建模
• 有n个物品,价值为ci ,尺寸为bi (i=1,2,…n),背包 的大小为B。 • 原问题(P)模型:
min ci xi
s.t. bi xi B
相关文档
最新文档