You are on page 1of 4

ISSN 1009-3044 E-mail: xsjl@dnzs.net.

cn
第 10 卷第
Computer 4 期 (2014
Knowledge 年 2 月) 电脑知识与技术
and Technology Computerhttp://www.dnzs.net.cn
Knowledge and Technology 电脑知识与技术
Vol.10, No.4, February 2014 Tel:+86-551-65690963 65690964

基于 LINGO 的优化问题动态规划法求解
度巍,曾飞
(南通大学 交通学院,江苏 南通 226019)

摘要:介绍了 LINGO 优化软件的使用,指出 LINGO 在求解动态规划问题时可以不需要目标函数。基于 LINGO 分别对最


短路问题和生产批量计划问题使用动态规划法进行了求解,给出了相应的 LINGO 求解代码,增强了学生对动态规划法的
理解同时提高了使用优化软件编程解决问题的能力。
关键词:LINGO;动态规划;最短路问题;生产批量计划问题
中图分类号:G642 文献标识码:A 文章编号:1009-3044(2014)04-0743-04

Solving Optimization Problem by Dynamic Programming Method Using LINGO


DU Wei, ZENG Fei
(School of Transportation Nantong University, Nantong 226019, China)
Abstract: The paper describes the use of LINGO,pointing outing that LINGO can solve dynamic programming problems with⁃
out the objective function。The shortest path problem and lotsizing problem are solved by dynamic programming method, Cor⁃
responding LINGO codes are provided. The teaching of LINGO enhances the students' understanding of the dynamic program⁃
ming while increasing the ability to use optimization software programming to solve the problem.
Key words: LINGO;dynamic programming;shortest path problem;lotsizing problem

在交通专业课程如《交通运筹学》、 《交通系统分析方法》等的教学过程中,大量涉及到可划分为多阶段的优化问题求解,这些
问题的求解一般使用动态规划(dynamic programming)方法。动态规划将决策问题的全过程划分为若干个相互联系的子过程(每个
子过程为一个阶段),然后按照一定的次序来求解。当划分的阶段个数较多时,手工求解动态规划问题相当麻烦。由于在实际的
交通工程规划实践中,涉及到的动态规划优化问题规模往往较大,指导学生掌握相应的优化软件求解动态规划问题一方面能增进
学生对动态规划法的理解掌握,另一方面能锻炼学生的编程能力, 是一项十分有意义的教学工作。
美国 LINDO 系统公司开发的 LINGO 由其求解问题的高效性和稳定性,成为目前广泛使用的优化软件。LINGO 是一套专门用
于求解最优化问题的软件包,其内置了一种建立最优化模型的的语言,可以简便表达出问题,同时利用 LINGO 高效的求解器可快
速求解并分析结果。LINGO 在处理含有大量变量和约束条件的优化问题时,一般使用数组和矩阵的输入方法:LINGO 程序首先定
义集合段,确定需要的集合及其属性,然后定义数据段,用于输入已知原始数据,最后使用函数对集合进行操作。在通常介绍 LIN⁃
GO 使用的文献中[1][2],一般着重于叙述其如何求解线性规划和非线性规划等具有明确目标函数的优化问题,很少关注如何用
LINGO 求解复杂的动态规划问题,该文通过分析交通运输中常见的最短路问题和生产批量计划问题,给出用动态规划方法求解的
LINGO 代码,指出 LINGO 可以在不需要目标函数的情况同样很好地求解多阶段优化问题。
1 动态规划法求解实例
实例 1 最短路问题
在纵横交错的公路网中(图 1 所示),货车司机希望找到一条从一个城市到另一个城市的最短路。图中节点 1—8 代表货车可
以停靠的城市,弧旁的数字表示两个城市之间的距离(百公里)。若货车要从城市 1 出发到达城市 8,问如何选择行驶路线使所经过
的路程最短。
问题分析:该最短路问题满足动态规划的最优性原理,即“从节点 1 到节点 8 的最短路的子路径仍然是相应节点间的最短路”,
用 D(i,j) 表示从节点 i 和 j 有弧相连时相应的距离,L(i) 表示从节点 1 到节点 i 的最短路程数。则不难得到以下的动态规划由前向
后递推方程:
ìL( j) = min {L(i) + D(i,j)},j = 2,⋯,8
í i (1)
îL(1) = 0

收稿日期:2013-12-23
基金项目:南通大学校级教学改革课题(2013B119、2013B037);中国交通教育研究会教育科学研究课题(交教研 1202-171);江苏省
现代教育技术研究课题(2013-R-25411、2011-R-19039)
作者简介:度巍(1982-),男,南通大学交通学院讲师,博士,从事交通系统工程方面的研究。

本栏目责任编辑:谢媛媛 软件设计开发 743


Computer Knowledge and Technology 电脑知识与技术 第 10 卷第 4 期 (2014 年 2 月)

4
2 5

7
3 2 2 6

6 5 11
1 3 6 8

4 3 7
1
8
6
4 7
图1

根据式(1),再进一步定义当节点 i 在从节点 1 到节点 j 的最短路径上时,P(i,j) = 1 ,否则 P(i,j) = 0 ,编写如下 LINGO 求解代码:


model:
sets:
Nodes/1..8/:L; !定义节点集合 Nodes 以及从节点 1 到每个节点的最短路程函数 L;
arcs(Nodes,Nodes)/
1,2 1,3 1,4
2,3 2,5 2,6
3,6
4,3 4,6 4,7
5,8
6,5 6,7 6,8
7,8/:D,P; !由节点集合构造图中两节点间有弧的派生集合 arcs, 以及相应属性 D,
P;
endsets
Data:
D=3 6 1
242
5
436
7
6 7 11
8; !输入有弧相连的节点间的距离数;
enddata
L(1)=0;!动态规划递推方程的边界条件;
@for(Nodes(j)|j#GE#2:!集合循环语句; #GE#表示逻辑关系 “大于等于”;
L(j)=@MIN(arcs(i,j):L(i)+D(i,j)) !动态规划递推方程;
);
@for(arcs(i,j):P(i,j)=@if(L(j)#EQ#L(i)+D(i,j),1,0)
); !判断弧(i,j)是否在节点 1 到节点 j 的最短路径上,便于确定最短路线;
end
运行 LINGO 得到如图 1 所示的最优解报告。
从报告中可以看到,最短路径找到,由 L(8) 的值可以得出,从城市 1 到城市 8 的最短路程数为 14,由各个 P(i,j) 的值分析可知,
从城市 1 到城市 8 的最短路线为 1 → 2 → 5 → 8 。
实例 2(生产批量计划问题)
某企业生产某种产品用以满足市场需求。通过统计,该产品今后 T 4 周的外部需求(订货量)分别是 d1 千件、d 2 千件、d3 千件
和 d 4 千件。如果第 t 周要开工生产,则第 t 周开工所需的生产准备费为 s t 千元(与生产的数量无关),每件产品的生产费为 c t 千
元。如果在满足需求后周末有产品剩余,每千件产品的存储费为 h t 千元。设第 t 周末的库存量为 I t ,假设开始没有库存,记为
I 0 = 0 且不考虑生产能力限制,问工厂应如何安排生产,
在按时满足需求的条件下,
使总费用最小?
问题分析:对于生产批量计划问题,分析可知有如下两条性质成立:

性质 1. 在最优解中 I 0 = IT = 0 ,即∑x t =∑d t 。


T T

t=1 t=1

744 软件设计开发 本栏目责任编辑:谢媛媛


第 10 卷第 4 期 (2014 年 2 月) Computer Knowledge and Technology 电脑知识与技术

图2

性质 2. 性质 2.最优解一定满足 I t - 1 x t = 0(1 ≤ t ≤ T) .
由于以上两个性质,只有当上一时段库存 I t - 1 = 0 时,本时段才考虑进行生产,且一旦生产,其生产量一定为某些后续时段需求
量的总和,即 x t ∈{d t ,d t + d t + 1,⋯,d t + d t + 1 + ⋯ + dT} 。这样如用 f t 表示当 t 时段初始库存为 0 时,从 t 时段到 T 时段的子问题的最优
费用值,可以建立如下的递推关系:

≤τ≤T+1 t ∑ i
[s δ( d ) + c t∑d i + ∑ (d i∑h j ) + f τ],1 ≤ t ≤ T
τ-1 τ-1 τ-1 i-1
f t = t + 1 min (2)
i=t i=t i=t+1 j=t

其中 fT + 1 = 0,δ(x) = {1,x0,x >= 00


根据式(2),取 T = 4 ,c t =50(千元),s t = 3(千元),h t = 1(千元/千件),d1 = 2(千件),d 2 = 3(千件),d3 = 2(千件),d 4 = 4(千件)
编写相应的 LINGO 求解代码:
MODEL:
data:
n=4;n1=5;!定义生产周数 n 和动态规划阶段数 n1;
enddata
SETS:
PERIODS/1..n/:S,C,H,D; !定义周期集合以及各个属性;
DITUI/1..n1/:F; !定义 n1 阶段的递推函数 F;
ENDSETS
DATA:
S=3 3 3 3; !每次生产准备费用;
C=50 50 50 50; !单件生产费用;
H=1 1 1 1; !单件生产库存费用;
D=2 3 2 4; !产品需求数量;
ENDDATA
F(5)=0; !递推方程的边际条件;
@FOR(DITUI(t)|t#lt#5: !集合循环语句;
F(t)=@min(DITUI(r)|r#ge#t+1:
S(t)*@if(@sum(PERIODS(i)|i#le#r-1#and#i#ge#t:D)
#gt#0,1
,0)
+C(t)*(@sum(PERIODS(i)|i#le#r-1#and#i#ge#t:D))

本栏目责任编辑:谢媛媛 软件设计开发 745


Computer Knowledge and Technology 电脑知识与技术 第 10 卷第 4 期 (2014 年 2 月)

+@sum(PERIODS(i)|i#le#r-1#and#i#ge#t+1:D*(@sum(PERIODS(j)|j#le#i-1#and#j#ge#t:H)))
+F(r))); !动态规划递推公式(2);
END
运行 LINGO 得到如下最优解报告:

图3
从报告可以看到,F(1) = 561 ,即从第 1 周到第 4 周末的最优费用为 561(千元),分析其它 F 值得到,最优的生产批量计划为第 1
周生产 2(千件),第 2 周生产 5(千件),第 3 周不生产,第 4 周生产 4(千件)。
2 结束语
本文针对用动态规划方法手工求解多阶段优化决策问题十分繁琐的特点,利用 LINGO 软件将各个动态规划递推方程简洁明
确地编程实现,帮助学生更好的理解了各阶段决策变量之间相互递进的关系,同时更重要的是交通专业学生熟练地掌握了软件的
使用,才能解决实际工程规划中的大规模复杂优化问题,LINGO 软件的教学实践促进了《交通运筹学》、
《交通系统分析方法》与《交
通规划》等课程的融合。
参考文献:
[1] 李晓川,朱晓敏,赵乃东. 基于 Lingo 的运输优化系统设计与开发[J]. 物流技术,2010(Z1).
[2] 洪文,朱云鹃. 利用 LINGO 建立最优化模型[C].第六届(2011)中国管理学年会——管理科学与工程分会场,2011.
[3] 姜启源,谢金星,邢文训,等.大学数学实验[M].北京:清华大学出版社,2005.

746 软件设计开发 本栏目责任编辑:谢媛媛

You might also like