1 大学数学实验 Experiments in Mathematics 实验9 整数规划 (Integer Programming) 清华大学数学科学系 基本内容 2. 基本原理与解法 3. LINDO / LINGO软件的使用 1. 实例及其数学模型 ? 分枝定界法 ? 动态规划法 实例1:选课问题 校规: 学生每学期选修的总学分不能少于 20,任选课 学分不能少于总学分的 1/6,也不能超过总学分数的 1/3 675468同时选修要求 1111222333学分 1817161514131211109任选课课号 21同时选修要求 23334455学分 87654321限选课课号 本学期必修课只有一门( 2学分);限选课有 8门,任 选课有 10门,最少应该选几门课? }1,0{ ,,, ,,, 3,6,20,2 222333 23334455.. 146137125114 106987251 2221 18171615141312111092 876543211 18 1 ∈ ≥≥≥≥ ≥≥≥≥ ≥≤≥++= +++++++++= +++++++= ∑ = i i i x xxxxxxxx xxxxxxxx yyyyyyyy xxxxxxxxxxy xxxxxxxxyts xMin 决策变量: x i ( =1选修课程 i, =0不选修课程 i) 目标函数: 选修课程之和 约束条件: 选修课程 i 时必须选修课程 j : x j ≥x i 0-1规划 (一种特 殊 整数 规划 ) y1, y2 分别表示选修的限选课、任 选课的学分数, y 表示总学分数 线性规划( LP)最优解:(其他 x i 为 0) x 1 = x 2 = x 4 = x 11 =1, x 3 = 0.0833, x 6 = x 10 = 0.1111 }1,0{ ,,, ,,, 3,6,20,2 222333 23334455 146137125114 106987251 2221 18171615141312111092 876543211 ∈ ≥≥≥≥ ≥≥≥≥ ≥≤≥++= +++++++++= +++++++= i x xxxxxxxx xxxxxxxx yyyyyyyy xxxxxxxxxxy xxxxxxxxy 10 ≤≤ i x LP松弛问题 ? 四舍五入,选 4门课程 1/2/4/11,共 19个学分 , 太少; ? 向上取整,选 7门 (加 3/6/10),共 27个学分,太多? 整数规划一般不能通过解 LP松弛问题得到最优解 演示: Course.LTX 问题 1. 如何下料最节省 ? 实例2:钢管下料 问题 2. 客户增加需求: 原料钢管:每根 19米 4米 50根 6米 20根 8米 15根 客户需求 节省的标准是什么? 由于采用不同切割模式太多,会增加生产和管理成 本,规定切割模式不能超过 3种。如何下料最节省? 5米 10根 2 按照客户需要在一根原料钢管上安排切割的一种组合。 切割模式 余料1米4米 1根 6米 1根 8米 1根 余料 3米4米 1根 6米 1根 6米 1根 合理切割模式 的余料应小于客户需要钢管的最小尺寸 余料 3米8米 1根 8米 1根 钢管下料 为满足客户需要,按照哪些种合理模式,每种模式 切割多少根原料钢管,最为节省? 合理切割模式 2. 所用原料钢管总根数最少 模式 4米钢管根数 6米钢管根数 8米钢管根数 余料 (米 ) 1 4 0 0 3 2 3 1 0 1 3 2 0 1 3 4 1 2 0 3 5 1 1 1 1 6 0 3 0 1 7 0 0 2 3 钢管下料问题1 两种 标准 1. 原料钢管剩余总余量最小 x i ~按第 i 种模式切割的原料钢管根数( i=1,2,…7) 约束 满足需求 决策变量 目标 1(总余量) 76543211 3333 xxxxxxxZMin ++++++= 50234 54321 ≥++++ xxxxx 2032 6542 ≥+++ xxxx 152 753 ≥++ xxx 模式 4米根数 6米根数 8米根数 余料 1 4 0 0 3 2 3 1 0 1 3 2 0 1 3 4 1 2 0 3 5 1 1 1 1 6 0 3 0 1 7 0 0 2 3 需求 50 20 15 整数约束: x i 为整数 以上两个模型均是一般 整数线性规划 76543212 xxxxxxxZMin ++++++=目标 2(总根数) 钢管下料问题1 约束条件不变 50234 54321 ≥++++ xxxxx 2032 6542 ≥+++ xxxx 152 753 ≥++ xxx x i 为整数 当余料没有用处时,通常以总根数最少为目标 钢管下料问题2 对大规模问题,用模型的约束条件界定合理模式 增加一种需求: 5米 10根;切割模式不超过 3种。 现有 4种需求: 4米 50根, 5米 10根, 6米 20根, 8米 15根,用枚举法确定合理切割模式,过于复杂。 决策变量 x i ~按第 i 种模式切割的原料钢管根数( i=1,2,3) r 1i , r 2i , r 3i , r 4i ~ 第 i 种切割模式下,每根原料钢管 生产 4米、 5米、 6米和 8米长的钢管的数量 满足需求 50 313212111 ≥++ xrxrxr 10 323222121 ≥++ xrxrxr 20 333232131 ≥++ xrxrxr 15 343242141 ≥++ xrxrxr 模式合理:每根 余料不超过 3米 19865416 41312111 ≤+++≤ rrrr 19865416 42322212 ≤+++≤ rrrr 19865416 43332313 ≤+++≤ rrrr 整数非线性规划 钢管下料问题2 目标函数 (总根数) 321 xxxMin ++ 约束条件 整数约束: x i ,r 1i , r 2i , r 3i , r 4i (i=1,2,3)为整数 3 实例3: 饮料的生产批量问题 ? 安排生产计划 , 满足每周的需求 , 使 4周总费用最小。 生产成本(可变成本) : 50元 /箱 (50千元 /千箱 ) 存贮费: 每周每千箱饮料1千元 饮料厂使用同一条生产线轮流生产 多种 饮料。 若某周开工生产 某种 饮料 , 需支出 生产准备费 3千元。 某种饮料 4周的需求量 周次 需求量 (千箱 ) 1 2 2 3 3 2 4 4 合计 11 生产批量问题的一般提法 c t ~时段 t 生产费用(元/件); h t ~时段 t (末)库存费(元/件); s t ~时段 t 生产准备费(元); d t ~时段 t 市场需求(件); 假设初始库存为 0 制订生产计划, 满 足需求,并使 T个时 段的总费用最小。 tttt dIxI =?+ ?1 )( min 1 ttttt T t t Ihxcysz ++= ∑ = 0,,0 0 ≥== ttT IxII ? ? ? = > = ,0,0 ,0,1 t t t x x y 决策变量 x t ~时段 t 生产量; I t ~时段 t (末)库存量; y t =1 ~时段 t 开工生产 (y t =0 ~不开工)。 目标 约束 混合线性0-1规划 .1,0 0 = ≤? t tt y Myx 生产批量问题的一般提法 tttt dIxI =?+ ?1 0,,0 0 ≥== ttT IxII ? ? ? = > = ,0,0 ,0,1 t t t x x y )( min 1 ttttt T t t Ihxcysz ++= ∑ = M是一个充分大的正数 (这里可取 M= 11) 混合非线性0-1规划? 整数规划问题一般形式 ljxg mixhts xf j i Zx n ,...,1,0)( ,...,1,0)(.. )(min =≤ == ∈ ? 整数线性规划 (ILP) 目标和约束均为线性函数 ? 整数非线性规划 (INLP) 目标或约束中存在非线性函数 ? 纯 (全 )整数规划 (PIP) 决策变量均为整数 ? 混合整数规划 (MIP) 决策变量有整数,也有实数 ? 0-1规划 决策变量只取 0或 1 分类 取消整数规划中决策变量为整数的限制( 松弛 ),对 应的连续优化问题称为原问题的 松弛问题 整数规划问题对应的松弛问题 松弛问题 松弛 整数规划问题 最优解 最 优 解 整数 非整数 整数舍入 下界(对 Min问题) 上界(对 Max问题) 非最优解 原问题 松弛 对松弛问题的最优解(分量)舍入为整数,得到的往 往不是原整数规划问题的最优解(甚至不是可行解) IP可行解对应于整点A(2,2)和B(1,1),而最优解为A点. 但LP松弛的最优解为C(3.5,2.5) 目标函数下降方向 x 1 x 2 C A B O 整数规划问题对应的松弛问题 4 且为整数0, 4595 6.. 85max 21 21 21 21 ≥ ≤+ ≤+ += xx xx xxts xxz .... . .... . .... ..... x 1 x 2 0 P o 6 9 Z max 5 6 去掉整数限制后,可行域为点( 0,0), (6,0), (0,5), P (2.25,3.75) 围成的 4边形 LP 最优解 PP的舍入解 最靠近 P 的可行解 IP 最优解 ( 2.25, 3.75)(2, 4)(2, 3)(0, 5) z=41.25 不可行 z=34 z=40 从 LP最优解经过简单的 “移动 ”不一定得到 IP最优解 基本思想:隐式地枚举一切可行解( “ 分而治之 ”) 所谓分枝,就是逐次对解空间(可行域)进行划分;而 所谓定界,是指对于每个分枝(或称子域),要计算原 问题的最优解的下界(对极小化问题) . 这些下界用来 在求解过程中判定是否需要对目前的分枝进一步划分, 也就是尽可能去掉一些明显的非最优点,避免完全枚举 . 整数规划的分枝定界法 (BB: Branch and Bound) 对于极小化问题,在子域上解 LP,其最优值是 IP限定 在该子域时的下界; IP任意可行点的函数值是 IP的上界 线性规划松弛定界 若在某一时刻,得到一个全整数解的费用为 z m ,则 z m 为原问题的一个上界; 否则得该分枝的一个下界,继续分枝. (P1) ?? n ii T Zx xx x bAxts xc ∈ +≥ ≥ = 1 0 .. min 0 (P2) ?? n ii T Zx xx x bAxts xc ∈ ≤ ≥ = 0 0 .. min nmZA PxbAxts xcz nm T ≤∈ ≥= = × , )0(0,.. min 线性IP 分枝定界算法 – 例 (P0) + ∈ ≥ ≤+ ≥? ??= Zxx x xx xxts xxz 21 2 1 2 2 11 21 2 1 21 21 , 2 2.. min 该问题的LP松弛解为 , 不是整数解,最优值为 z 0 =-4. (P1): (P0)加上 ; (P2): (P0)加上 . T x ),( 2 5 2 30 = 2 1 ≥x 1 1 ≤x 问题(P1)的LP松弛解为 , 不是整数解,最优值为 z 1 =-3.5 (P3): (P1)加上 ; (P4): (P1)加上 . T x ),2( 2 31 = 2 2 ≥x 1 2 ≤x P0 P1 P2 2 1 ≥x 1 1 ≤x P3 P4 2 2 ≥x 1 2 ≤x P5 P6 3 1 ≥x 2 1 ≤x ,T xx )1,2( 6* == 3 6 * ?==zz 无可行解 P0 P1 P2 P3 P4 2 1 ≥x 1 1 ≤x 2 2 ≥x 1 2 ≤x T x ),( 2 5 2 30 = , z 0 =-4 T x ),2( 2 3 1 = , z 1 =-7/2 T x )1,( 4 9 4 = z 0 =-13/4 T x )1,2( 6 = z 0 =-3 无可行解 T x ),1( 2 32 = z 2 =-2.5 > z 6 分枝定界算法(Min问题) STEP4. 转 STEP1. STEP0. 令 activeset={0}(原问题 );U = ∞; currentbest=0. STEP1. 如果 activeset=?, 则已经得到原问题的最优解 , 结束 ; 否 则从活跃分枝点集合 activeset 中选择一个分枝点 k ;将 k 从 activeset中去掉 , 继续 STEP2. STEP2. 生成 k 的各分枝 i=1,2,…,n k 及其对应的下界 z i . STEP3.对分枝 i=1,2,…,n k : 如果分枝 i 得到的是全整数解且 z i <U, 则令 U=z i 且 currentbest=i;如果分枝 i 得到的不是全整数 解且 z i <U, 则把 i 加入 activeset中 . 5 整数规划的动态规划法 例:最短路问题 求各点到 T的最短路 5 6 7 7 4 9 6 8 6 5 8 3 3 6 C 1 B 1 C 2 B 2 A 1 A 2 A 3 T S 6 节点 i到节点 T 的最短路长 ( ) 0)( )(min)( ),( = += ∈ TL jLciL ij Aji 递推计算 “全过程的最优策略具有这样的性质:不管该最优 策略上某状态以前的状态和决策如何,对该状态而 言,余下的诸决策必定构成最优子策略. ”即:最优策 略的任一 后部子策略 都是最优的. 这只是最优性定理的一个推论,即最优策略的必 要条件. 最优化原理 最优子结构 ( Optimal Substructure) : An optimal solution to the problem contains within it optimal solutions to subproblems. ( 1) 正确划分阶段,选择阶段变量 k. ( 2) 对每个阶段,正确选择状态变量 x k . 选择状态变 量时应当注意两点:一是要能够正确描述受控过程的 演变特性,二是要满足 无后效性 . ( 3) 对每个阶段,正确选择决策变量 u k . ( 4) 列出相邻阶段的状态转移方程: x k+1 = T k (x k , u k ). (5) 列出按阶段 可分的准则函数 V 1,n . 假设问题的目标是极小化 建立动态规划模型的基本过程 逆序递推 k=1 k=nkk=2 1 x 2 x 3 x 1+k x 1+n x k x n x )( 11 xf 1 u 2 u k u n u )( 22 xf )( kk xf )( nn xf ? ? ? = += ++ ++ ∈ 边界条件)(0)( )](),([min)( 11 11 nn kkkkk Uu kk xf xfuxvxf kk ),( 1 kkkk uxTx = + f k (x k )表示第 k 阶段初始状态为 x k 时, k后部子过程 (阶段 k,k+1,…,n)的最优准则函数 动态规划基本方程 资源分配问题 : 某公司现有 M台设备准备分配给该公 司所属的 N家工厂 . 当分配台 u k 设备给工厂 k时,工厂 k 利用这些设备为公司创造的利润(假设非负)为 g k (u k ). 如何分配设备资源,使得公司总利润最大? 可能是非线性整数规划, 甚至 g k (u k )没有显式表达式 应用动态规划方法的几个例子 + = = ∈ = = ∑ ∑ Zu Muts ugz k k N k k N k k 1 1 .. )(max )( kk ug k u 工厂 k 设备数 1 2 3 0 1 2 3 4 0 4 6 7 7 0 2 5 6 8 0 3 5 7 8 状态变量 x k -第 k阶段初分配者手中拥有的设备台数 . 由题意可知 x 0 = M, x N+1 = 0 阶段的 准则函数 为 共有 N个工厂,可以把问题分解为 N个 阶段 : 当阶段 k=N时,把手中设备分配给工厂 N; 当阶段 k=N-1时,把手中设备分配给工厂 N-1; 依次类推; 当阶段 k=1时,把手中设备分配给工厂 1. 决策变量 u k :第 k阶段分配给工厂 k的设备台数 kk xu ≤≤0 状态转移方程 kkk uxx ?= +1 )(),( kkkkk uguxv = 6 资源分配问题 用 f k (x k ) 表示将手中资源 x k 分配给工厂 k,k+1,…, N 时的 最大利润,原问题即为计算 f 1 (M) M=4, N=3,边界条件 f 4 (x 4 ) = f 4 (0) =0 ? ? ? = ?=+= ++ ++ ≤≤ .0)( ,1,,1,)],()([max)( 11 11 0 NN kkkk xu kk xf NNkxfugxf kk L k=3时: (增函数))()]0()([max)( 33433 0 33 33 xgfugxf xu =+= ≤≤ ;0)0()0( 33 ==gf ;3)1()1( 33 ==gf ;5)2()2( 33 ==gf ;7)3()3( 33 ==gf 8)4()4( 33 ==gf 具体计算(例) k=2时: )]()([max)]()([max)( 22322 0 3322 0 22 2222 uxfugxfugxf xuxu ?+=+= ≤≤≤≤ ;000)0()0()]0()([max)0( 322322 00 2 2 =+=+=?+= ≤≤ fgufugf u ;3}02,30max{ )}0()1(),1()0(max{)]1()([max)1( 32322322 10 2 2 =++= ++=?+= ≤≤ fgfgufugf u ;5}05,32,50max{ )}0()2(),1()1(),2()0(max{)]2()([max)2( 3232322322 20 2 2 =+++= +++=?+= ≤≤ fgfgfgufugf u ;8}06,35,52,70max{ )}0()3(),1()2(),2()1(),3()0(max{ )]3()([max)3( 32323232 2322 30 2 2 =++++= ++++= ?+= ≤≤ fgfgfgfg ufugf u ;10}08,36,55,72,80max{ )}0()4(),1()3(),2()2(),3()1(),4()0(max{ )]4()([max)4( 3232323232 2322 40 2 2 =+++++= +++++= ?+= ≤≤ fgfgfgfgfg ufugf u 资源分配问题 k=1时: )]()([max)]()([max)( 11211 0 2211 0 11 1111 uxfugxfugxf xuxu ?+=+= ≤≤≤≤ .12}07,37,56,84,100max{ )}0()4(),1()3(),2()2(),3()1(),4()0(max{ )]4()([max)4( 2121212121 1211 40 1 1 =+++++= +++++= ?+= ≤≤ fgfgfgfgfg ufugf u 最优解 ,最大利润为 . 1,2,1 * 3 * 2 * 1 === uuu 12)4( 1 * == fz 推广:非线性整数规划问题,如: + ∈ =++ ???++= Zxxx xxxts xxxxxxz 321 321 321 2 3 2 2 2 1 ,, 4.. 5342min M=4, N=3 1 2 111 )( uuug ?= 2 2 222 32)( uuug ?= 3 2 333 54)( uuug ?= 资源分配问题 应用动态规划方法解整数规划 .,,2,1,0, ,0 ,,,2,1 ,0,0 ,0,1 ,,,2,1,.. )(min 0 1 1 TtIx I Tt x x y TtdIxIts Ihxcysz tt t t t tttt ttttt T t t L L L =≥ = = ? ? ? = > = ==?+ ++= ? = ∑ 实例3:单产品、无能力限制的批量问题 可以只考虑 可以证明:一定存在满足条件 的 最优解. 用 f t 表示当 t时段初始库存为0时,从 t时段到 T 时段的 子问题的最优费用值 最优值(费用)为 f 1 . 假设费用均非负,则在最优解中 ,即 0 0 == T II ∑∑ == = T t t T t t dx 11 )1(0 1 TtxI tt ≤≤= ? {} Ttttttt ddddddx ++++∈ ++ LL 11 ,,,,0 ? ? ? ? ? ? ? ≤≤ ? ? ? ? ? >+++ = = = ∑∑∑ ? += ? = ? = +≤≤+ + + .1 ,0,][min .0, ,0 1 1 11 11 1 1 Tt dfhddcs df f f t ti i tj ji ti itt Tt tt t T τ τ τ τ X=(2,5,0,4), 最优值为 561(千元) T=4, (千元), (千元), (千元 /千件)50= t c3= t s 1= t h (千件 ) 2 1 =d 3 2 =d 2 3 =d 4 4 =d 具体计算过程如下: f 5 = 0; f 4 = 3+50*4+0+0=203; f 3 = min{3+50(2+4)+1*4+0,3+50*2+0+11}=306; f 2 = min{3+50(3+2+4)+1(2+4)+1*4+0,3+50(3+2)+1*2+11, 3+50*3+0+18}=458; f 1 = min{3+50(2+3+2+4)+1(3+2+4)+1(2+4)+1*4+0, 3+50(2+3+2)+1(3+2)+1*2+11, 3+50(2+3)+1*3+18, 3+50*2+0+26} = 561 7 LINDO 公司软件产品简要介绍 美国芝加哥 (Chicago)大学的 Linus Schrage教授于 1980 年前后开发 , 后来成立 LINDO系统公司( LINDO Systems Inc.),网址: http://www.lindo.com LINDO: Linear INteractive and Discrete Optimizer (V6.1) LINGO: Linear INteractive General Optimizer (V8.0) LINDO API: LINDO Application Programming Interface (V2.0) What’s Best!: (SpreadSheet e.g. EXCEL) (V7.0) 演示 (试用 )版、学生版、高级版、超级版、工业版、 扩展版 … (求解 问题规模 和 选件 不同) LINDO和LINGO软件能求解的优化模型 LINGO LINDO 优化模型 线性规划 (LP) 非线性规划 (NLP) 二次规划 (QP) 连续优化 整数规划 (IP) 例 加工奶制品的生产计划 1桶 牛奶 3公斤 A 1 12小时 8小时 4公斤 A 2 或 获利 24元 /公斤 获利 16元 /公斤 50桶牛奶 时间 480小时 至多加工 100公斤 A 1 制订生产计划,使每天获利最大 ? 35元可买到 1桶牛奶,买吗?若买,每天最多买多少 ? ? 可聘用临时工人,付出的工资最多是每小时几元 ? ? A 1 的获利增加到 30元 /公斤,应否改变生产计划? 每天: 1桶 牛奶 3公斤 A 1 12小时 8小时 4公斤 A 2 或 获利 24元 /公斤 获利 16元 /公斤 x 1 桶牛奶生产 A 1 x 2 桶牛奶生产 A 2 获利 24× 3x 1 获利 16× 4 x 2 原料供应 50 21 ≤+ xx 劳动时间 480812 21 ≤+ xx 加工能力 1003 1 ≤x 决策变量 目标函数 21 6472 xxzMax +=每天获利 约束条件 非负约束 0, 21 ≥xx 线性 规划 模型 (LP) 时间 480小时 至多加工 100公斤 A 1 50桶牛奶每天 模型求解 max 72x1+64x2 st 2) x1+x2<50 3) 12x1+8x2<480 4) 3x1<100 end OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2 DO RANGE (SENSITIVITY) ANALYSIS? No 20桶牛奶生产 A 1 , 30桶生产 A 2 ,利润 3360元。 Milk01.ltx 模型求解 reduced cost值表 示当该非基变量 增加一个单位时 (其他非基变量 保持不变)目标 函数减少的量 (对 max型问题 ) OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 NO. ITERATIONS= 2 也可理解为: 为了使该非基变 量变成基变量, 目标函数中对应 系数应增加的量 8 OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 原料无剩余 时间无剩余 加工能力剩余 40 max 72x1+64x2 st 2) x1+x2<50 3) 12x1+8x2<480 4) 3x1<100 end 三 种 资 源 “资源 ” 剩余为零的约束为紧约束(有效约束) 结果解释 OBJECTIVE FUNCTION VALUE 1) 3360.000 VARIABLE VALUE REDUCED COST X1 20.000000 0.000000 X2 30.000000 0.000000 ROW SLACK OR SURPLUS DUAL PRICES 2) 0.000000 48.000000 3) 0.000000 2.000000 4) 40.000000 0.000000 结果解释 最优解下 “资源 ”增加 1 单位时 “效益 ”的增量 原料增 1单位 , 利润增 48 时间加 1单位 , 利润增 2 能力增减不影响利润 影子价格 ? 35元可买到 1桶牛奶,要买吗? 35 <48, 应该买! ? 聘用临时工人付出的工资最多每小时几元? 2元! RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000 最优解不变时目标 系数允许变化范围 DO RANGE(SENSITIVITY) ANALYSIS? Yes x 1 系数范围 (64,96) x 2 系数范围 (48,72) ? A 1 获利增加到 30元 /千克,应否改变生产计划 x 1 系数由 24×3= 72 增加为 30×3= 90,在允许范 围内 不变! (约束条件不变 ) 结果解释 结果解释 RANGES IN WHICH THE BASIS IS UNCHANGED: OBJ COEFFICIENT RANGES VARIABLE CURRENT ALLOWABLE ALLOWABLE COEF INCREASE DECREASE X1 72.000000 24.000000 8.000000 X2 64.000000 8.000000 16.000000 RIGHTHAND SIDE RANGES ROW CURRENT ALLOWABLE ALLOWABLE RHS INCREASE DECREASE 2 50.000000 10.000000 6.666667 3 480.000000 53.333332 80.000000 4 100.000000 INFINITY 40.000000 影子价格有意义 时约束右端的允 许变化范围 原料最多增加 10 时间最多增加 53 ? 35元可买到 1桶牛奶,每天最多买多少? 最多买 10桶 ? (目标函数不变 ) 注意 : 充分但 可能不必要 使用LINDO的一些注意事项 1. “>”(或 “<”)号与 “>=”(或 “<=”)功能相同 2. 变量与系数间可有空格 (甚至回车 ), 但无运算符 3. 变量名以字母开头,不能超过 8个字符 4. 变量名不区分大小写(包括 LINDO中的关键字) 5. 目标函数所在行是第一行,第二行起为约束条件 6. 行号 (行名 )自动产生或人为定义。行名以 “) ”结束 7. 行中注有 “!”符号的后面部分为注释。如 : ! It’s Comment. 8. 在模型的任何地方都可以用 “TITLE” 对模型命名 (最多 72个字符),如: TITLE This Model is only an Example 9. 变量不能出现在一个约束条件的右端 10. 表达式中不接受括号 “( )”和逗号 “,”等任何符号 , 例 : 400(X1+X2)需写为 400X1+400X2 11. 表达式应化简,如 2X1+3X2- 4X1应写成 -2X1+3X2 12. 缺省假定所有变量非负;可在模型的 “END”语句 后用 “FREE name”将变量 name的非负假定取消 13. 可在 “END”后用 “SUB” 或 “SLB” 设定变量上下界 例如: “sub x1 10”的作用等价于 “x1<=10” 但用 “SUB”和 “SLB”表示的上下界约束不计入模型 的约束,也不能给出其松紧判断和敏感性分析。 14. “END”后对 0-1变量说明: INT n 或 INT name 15. “END”后对整数变量说明: GIN n 或 GIN name 使用LINDO的一些注意事项 9 [注意]二次规划(QP)问题 ? LINDO可求解二次规划 (QP)问题,但输入方式较 复杂,因为在 LINDO中不许出现非线性表达式 – 需要为每一个实际约束增加一个对偶变量 ( LAGRANGE乘子),在实际约束前增加有关变量的 一阶最优条件,转化为互补问题 – “END”后面使用 QCP命令指明实际约束开始的行号, 然后才能求解 ? 建议总是用 LINGO解 QP [注意 ]对 QP和 IP: 敏感性分析意义不大 目标 1(总余量) 76543211 3333 xxxxxxxZMin ++++++= 50234 54321 ≥++++ xxxxx 2032 6542 ≥+++ xxxx 152 753 ≥++ xxx 按模式 2切割 12根,按模式 5切割 15根,余料 27米 最优解: x 2 =12, x 5 =15, 其余为 0; 最优值: 27 x i 为整数 CUT01a.LTX 实例2:钢管下料(问题1) 当余料没有用处时,通常以总根数最少为目标 76543212 xxxxxxxZMin ++++++=目标 2(总根数) 最优解: x 2 =15, x 5 =5, x 7 =5, 其余为 0; 最优值: 25。 50234 54321 ≥++++ xxxxx 2032 6542 ≥+++ xxxx 152 753 ≥++ xxx x i 为整数 按模式 2切割 15根, 按模式 5切割 5根, 按模式 7切割 5根, 共 25根,余料 35米 虽余料增加 8米,但减少了 2根 与目标 1的结果 “共切割 27根, 余料 27米 ” 相比 : CUT01b.LTX 实例2:钢管下料(问题1) LINGO软件简介 ? 目标与约束段 ? 集合段( SETS ENDSETS) ? 数据段( DATA ENDDATA) ? 初始段( INIT ENDINIT) LINGO模型的构成: 4个段 LINGO模型的优点 ?包含了 LINDO的全部功能,并能处理非线性优化 ?提供了灵活的编程语言(矩阵生成器) 集合的类型 集合 派生集合 基本集合 稀疏集合 稠密集合 元素列表法 元素过滤法 直接列举法 隐式列举法 setname [/member_list/] [: attribute_list]; setname(parent_set_list) [/member_list/] [: attribute_list]; SETS: CITIES /A1,A2,A3,B1,B2/; ROADS(CITIES, CITIES)/ A1,B1 A1,B2 A2,B1 A3,B2/:D; ENDSETS SETS: STUDENTS /S1..S8/; PAIRS( STUDENTS, STUDENTS) | &2 #GT# &1: BENEFIT, MATCH; ENDSETS 集合循环函数 四个集合循环函数: FOR、 SUM 、 MAX、 MIN @function( setname [ ( set_index_list)[ | condition]] : expression_list); @FOR(STUDENTS( I): [constraints] @SUM( PAIRS( J, K) | J #EQ# I #OR# K #EQ# I: MATCH( J, K)) =1); Example: ∑ ∈PAIRSJI JIMATCHJIBENEFIT ),( ),(*),( 1),( ),( = ∑ = = ∈ IK orIJ PAIRSKJ KJMATCH [objective] MAX = @SUM( PAIRS( I, J): BENEFIT( I, J) * MATCH( I, J)); 10 50 313212111 ≥++ xrxrxr 10 323222121 ≥++ xrxrxr 20 333232131 ≥++ xrxrxr 15 343242141 ≥++ xrxrxr 19865416 41312111 ≤+++≤ rrrr 19865416 42322212 ≤+++≤ rrrr 19865416 43332313 ≤+++≤ rrrr 目标函数(总根数) 321 xxxMin ++ x i ,r 1i , r 2i , r 3i , r 4i (i=1,2,3)为整数 实例2:钢管下料(问题2) 增加约束,缩小可行域,便于求解 321 xxx ≥≥ 原料钢管总根数下界: 26 19 158206105504 = ? ? ? ? ? ? ×+×+×+× 特殊生产计划:对每根原料钢管 模式 1:切割成 4根 4米钢管,需 13根; 模式 2:切割成 1根 5米和 2根 6米钢管,需 10根; 模式 3:切割成 2根 8米钢管,需 8根。 原料钢管总根数上界: 31 3126 321 ≤++≤ xxx 模式排列顺序可任定 需求: 4米 50根, 5米 10 根, 6米 20根, 8米 15根 每根原料钢管长 19米 实例2:钢管下料(问题2) Local optimal solution found at iteration: 12211 Objective value: 28.00000 Variable Value Reduced Cost X1 10.00000 0.000000 X2 10.00000 2.000000 X3 8.000000 1.000000 R11 3.000000 0.000000 R12 2.000000 0.000000 R13 0.000000 0.000000 R21 0.000000 0.000000 R22 1.000000 0.000000 R23 0.000000 0.000000 R31 1.000000 0.000000 R32 1.000000 0.000000 R33 0.000000 0.000000 R41 0.000000 0.000000 R42 0.000000 0.000000 R43 2.000000 0.000000 模式 1:每根原料钢管切割成 3 根 4米和 1根 6米钢管,共 10根; 模式 2:每根原料钢管切割成 2 根 4米、 1根 5米和 1根 6米钢管, 共 10根; 模式 3:每根原料钢管切割成 2 根 8米钢管,共 8根。 原料钢管总根数为 28根。 演示 cut02a.lg4; cut02b.lg4 实例2:钢管下料(问题2)布置实验 目的 1)掌握用 LINDO/LINGO软件求解整数规划, 并对结果作初步分析; 内容 课上布置,或参见网络学堂 2) 通过实例练习用整数规划求解实际问题。