第四章 数学规划模型 4.1 奶制品的生产与销售 4.2 自来水输送与货机装运 4.3 汽车生产与原油采购 4.4 接力队选拔和选课策略 第四章 数学规划模型 4.1 奶制品的生产与销售 4.2 自来水输送与货机装运 4.3 汽车生产与原油采购 4.4 接力队选拔和选课策略 4.5 饮料厂的生产与检修 4.6 钢管和易拉罐下料
数学规划模型 实际问题中 的优化模型 gi(x)0~约束条件 x~决策变量 f(x)~目标函数 决策变量个数n和 约束条件个数m较大 线性规划 非线性规划 整数规划 多元函数条件极值 最优解在可行域 的边界上取得 重点在模型的建立和结果的分析
4.1 奶制品的生产与销售 企业生产计划 空间层次 工厂级:根据外部需求和内部设备、人力、原料等条件,以最大利润为目标制订产品生产计划; 4.1 奶制品的生产与销售 企业生产计划 空间层次 工厂级:根据外部需求和内部设备、人力、原料等条件,以最大利润为目标制订产品生产计划; 车间级:根据生产计划、工艺流程、资源约束及费用参数等,以最小成本为目标制订生产批量计划. 时间层次 若短时间内外部需求和内部资源等不随时间变化,可制订单阶段生产计划,否则应制订多阶段生产计划. 本节课题
例1 加工奶制品的生产计划 问题 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 每天: 例1 加工奶制品的生产计划 问题 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 每天: 50桶牛奶 时间480小时 至多加工100公斤A1 制订生产计划,使每天获利最大 35元可买到1桶牛奶,买吗?若买,每天最多买多少? 可聘用临时工人,付出的工资最多是每小时几元? A1的获利增加到 30元/公斤,应否改变生产计划?
基本模型 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 50桶牛奶 每天 时间480小时 决策变量 x1桶牛奶生产A1 x2桶牛奶生产A2 获利 24×3x1 获利 16×4 x2 目标函数 每天获利 线性规划模型(LP) 原料供应 劳动时间 约束条件 加工能力 非负约束
模型分析与假设 线性规划模型 xi对目标函数的“贡献”与xi取值成正比 A1,A2每公斤的获利是与各自产量无关的常数 比例性 xi对目标函数的“贡献”与xj取值无关 A1,A2每公斤的获利是与相互产量无关的常数 可加性 xi对约束条件的“贡献”与xj取值无关 每桶牛奶加工A1,A2的数量,时间是与相互产量无关的常数 连续性 xi取值连续 加工A1,A2的牛奶桶数是实数
模型求解 图解法 约束条件 目标函数 z=c (常数) ~等值线 在B(20,30)点得到最优解 目标函数和约束条件是线性函数 x1 x2 A B C D 约束条件 l1 l2 l3 l4 l5 Z=3600 Z=2400 c Z=0 目标函数 z=c (常数) ~等值线 在B(20,30)点得到最优解 目标函数和约束条件是线性函数 最优解一定在凸多边形的某个顶点取得。 可行域为直线段围成的凸多边形 目标函数的等值线为直线
模型求解 软件实现 LINGO 20桶牛奶生产A1, 30桶生产A2,利润3360元。 model: max = 72*x1+64*x2; [milk] x1 + x2<50; [time] 12*x1+8*x2<480; [cpct] 3*x1<100; end Global optimal solution found. Objective value: 3360.000 Total solver iterations: 2 Variable Value Reduced Cost X1 20.00000 0.000000 X2 30.00000 0.000000 Row Slack or Surplus Dual Price 1 3360.000 1.000000 MILK 0.000000 48.00000 TIME 0.000000 2.000000 CPCT 40.00000 0.000000 20桶牛奶生产A1, 30桶生产A2,利润3360元。
结果解释 三种资源 “资源” 剩余为零的约束为紧约束(有效约束) Global optimal solution found. model: Objective value: 3360.000 Total solver iterations: 2 Variable Value Reduced Cost X1 20.00000 0.000000 X2 30.00000 0.000000 Row Slack or Surplus Dual Price 1 3360.000 1.000000 MILK 0.000000 48.00000 TIME 0.000000 2.000000 CPCT 40.00000 0.000000 model: max = 72*x1+64*x2; [milk] x1 + x2<50; [time] 12*x1+8*x2<480; [cpct] 3*x1<100; end 原料无剩余 三种资源 时间无剩余 加工能力剩余40 “资源” 剩余为零的约束为紧约束(有效约束)
最优解下“资源”增加1单位时“效益”的增量 Global optimal solution found. Objective value: 3360.000 Total solver iterations: 2 Variable Value Reduced Cost X1 20.00000 0.000000 X2 30.00000 0.000000 Row Slack or Surplus Dual Price 1 3360.000 1.000000 MILK 0.000000 48.00000 TIME 0.000000 2.000000 CPCT 40.00000 0.000000 结果解释 最优解下“资源”增加1单位时“效益”的增量 影子价格 原料增加1单位, 利润增长48 时间增加1单位, 利润增长2 加工能力增长不影响利润 35 <48, 应该买! 35元可买到1桶牛奶,要买吗? 聘用临时工人付出的工资最多每小时几元? 2元!
敏感性分析 (“LINGO|Ranges” ) 最优解不变时目标函数系数允许变化范围 Ranges in which the basis is unchanged: Objective Coefficient Ranges Current Allowable Allowable Variable Coefficient Increase Decrease X1 72.00000 24.00000 8.000000 X2 64.00000 8.000000 16.00000 Righthand Side Ranges Row Current Allowable Allowable RHS Increase Decrease MILK 50.00000 10.00000 6.666667 TIME 480.0000 53.33333 80.00000 CPCT 100.0000 INFINITY 40.00000 (约束条件不变) x1系数范围(64,96) x2系数范围(48,72) x1系数由24 3=72增加为303=90,在允许范围内 不变! A1获利增加到 30元/公斤,应否改变生产计划?
结果解释 影子价格有意义时约束右端的允许变化范围 (目标函数不变) 最多买10桶! 35元可买到1桶牛奶, 每天最多买多少? Ranges in which the basis is unchanged: Objective Coefficient Ranges Current Allowable Allowable Variable Coefficient Increase Decrease X1 72.00000 24.00000 8.000000 X2 64.00000 8.000000 16.00000 Righthand Side Ranges Row Current Allowable Allowable RHS Increase Decrease MILK 50.00000 10.00000 6.666667 TIME 480.0000 53.33333 80.00000 CPCT 100.0000 INFINITY 40.00000 (目标函数不变) 原料最多增加10 时间最多增加53 充分条件 ! 最多买10桶! 35元可买到1桶牛奶, 每天最多买多少?
例2 奶制品的生产销售计划 在例1基础上深加工 50桶牛奶, 480小时 至多100公斤A1 制订生产计划,使每天净利润最大 1桶牛奶 例2 奶制品的生产销售计划 在例1基础上深加工 1桶牛奶 3公斤A1 12小时 8小时 4公斤A2 或 获利24元/公斤 获利16元/公斤 0.8公斤B1 2小时,3元 1公斤 获利44元/公斤 0.75公斤B2 2小时,3元 1公斤 获利32元/公斤 50桶牛奶, 480小时 至多100公斤A1 制订生产计划,使每天净利润最大 30元可增加1桶牛奶,3元可增加1小时时间,应否投资?现投资150元,可赚回多少? B1,B2的获利经常有10%的波动,对计划有无影响? 每天销售10公斤A1的合同必须满足,对利润有什么影响?
基本模型 决策变量 目标函数 约束条件 1桶牛奶 3kg A1 12小时 8小时 4kg A2 或 获利24元/kg 获利16元/kg 0.8kg B1 2小时,3元 1kg 获利44元/kg 0.75kg B2 获利32元/kg 决策变量 出售x1 kg A1, x2 kg A2, x3 kg B1, x4 kg B2 x5 kg A1加工B1, x6 kg A2加工B2 目标函数 利润 原料供应 加工能力 约束条件 附加约束 劳动时间 非负约束
模型求解 软件实现 LINGO Global optimal solution found. Objective value: 3460.800 Total solver iterations: 2 Variable Value Reduced Cost X1 0.000000 1.680000 X2 168.0000 0.000000 X3 19.20000 0.000000 X4 0.000000 0.000000 X5 24.00000 0.000000 X6 0.000000 1.520000 Row Slack or Surplus Dual Price 1 3460.800 1.000000 MILK 0.000000 3.160000 TIME 0.000000 3.260000 CPCT 76.00000 0.000000 5 0.000000 44.00000 6 0.000000 32.00000 软件实现 LINGO
结果解释 每天销售168 kgA2和19.2 kgB1, 利润3460.8(元) 8桶牛奶加工成A1,42桶牛奶加工成A2, Global optimal solution found. Objective value: 3460.800 Total solver iterations: 2 Variable Value Reduced Cost X1 0.000000 1.680000 X2 168.0000 0.000000 X3 19.20000 0.000000 X4 0.000000 0.000000 X5 24.00000 0.000000 X6 0.000000 1.520000 Row Slack or Surplus Dual Price 1 3460.800 1.000000 MILK 0.000000 3.160000 TIME 0.000000 3.260000 CPCT 76.00000 0.000000 5 0.000000 44.00000 6 0.000000 32.00000 结果解释 每天销售168 kgA2和19.2 kgB1, 利润3460.8(元) 8桶牛奶加工成A1,42桶牛奶加工成A2, 将得到的24kgA1全部加工成B1 除加工能力外均为紧约束
结果解释 增加1桶牛奶使利润增长3.16×12=37.92 增加1小时时间使利润增长3.26 30元可增加1桶牛奶,3元可增加1小时时间,应否投资?现投资150元,可赚回多少? 结果解释 Global optimal solution found. Objective value: 3460.800 Total solver iterations: 2 Variable Value Reduced Cost X1 0.000000 1.680000 X2 168.0000 0.000000 X3 19.20000 0.000000 X4 0.000000 0.000000 X5 24.00000 0.000000 X6 0.000000 1.520000 Row Slack or Surplus Dual Price 1 3460.800 1.000000 MILK 0.000000 3.160000 TIME 0.000000 3.260000 CPCT 76.00000 0.000000 5 0.000000 44.00000 6 0.000000 32.00000 增加1桶牛奶使利润增长3.16×12=37.92 增加1小时时间使利润增长3.26 投资150元增加5桶牛奶,可赚回189.6元。(大于增加时间的利润增长)
结果解释 生产计划应重新制订:如将x3的系数改为39.6计算,会发现结果有很大变化。 B1,B2的获利有10%的波动,对计划有无影响 Ranges in which the basis is unchanged: Objective Coefficient Ranges Current Allowable Allowable Variable Coefficient Increase Decrease X1 24.000000 1.680000 INFINITY X2 16.000000 8.150000 2.100000 X3 44.000000 19.750002 3.166667 X4 32.000000 2.026667 INFINITY X5 -3.000000 15.800000 2.533334 X6 -3.000000 1.520000 INFINITY …… …… 敏感性分析 B1获利下降10%,超出X3 系数允许范围 B2获利上升10%,超出X4 系数允许范围 波动对计划有影响 生产计划应重新制订:如将x3的系数改为39.6计算,会发现结果有很大变化。
Reduced Cost有意义也是有条件的(LINGO没有给出) 每天销售10公斤A1的合同必须满足,对利润有什么影响? 结果解释 Global optimal solution found. Objective value: 3460.800 Total solver iterations: 2 Variable Value Reduced Cost X1 0.000000 1.680000 X2 168.0000 0.000000 X3 19.20000 0.000000 X4 0.000000 0.000000 X5 24.00000 0.000000 X6 0.000000 1.520000 Row Slack or Surplus Dual Price 1 3460.800 1.000000 MILK 0.000000 3.160000 TIME 0.000000 3.260000 CPCT 76.00000 0.000000 5 0.000000 44.00000 6 0.000000 32.00000 x1从0开始增加一个单位时,最优目标函数值将减少1.68 公司利润减少 1.68×10=16.8(元) 最优利润为 3460.8 – 16.8 = 3444 Reduced Cost有意义也是有条件的(LINGO没有给出)
奶制品的生产与销售 由于产品利润、加工时间等均为常数,可建立线性规划模型. 线性规划模型的三要素:决策变量、目标函数、约束条件. 建模时尽可能利用原始的数据信息,把尽量多的计算留给计算机去做(分析例2的建模). 用LINGO求解,输出丰富,利用影子价格和灵敏性分析可对结果做进一步研究.
4.2 自来水输送与货机装运 运输问题 生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或利润最大? 4.2 自来水输送与货机装运 运输问题 生产、生活物资从若干供应点运送到一些需求点,怎样安排输送方案使运费最小,或利润最大? 各种类型的货物装箱,由于受体积、重量等限制,如何搭配装载,使获利最高,或装箱数量最少?
例1 自来水输送 收入:900元/千吨 支出 引水管理费 其他费用:450元/千吨 应如何分配水库供水量,公司才能获利最多? A:50 B:60 C:50 甲:30;50 乙:70;70 丙:10;20 丁:10;40 水库供水量(千吨) 小区基本用水量(千吨) 小区额外用水量(千吨) (以天计) 例1 自来水输送 收入:900元/千吨 元/千吨 甲 乙 丙 丁 A 160 130 220 170 B 140 190 150 C 200 230 / 支出 引水管理费 其他费用:450元/千吨 应如何分配水库供水量,公司才能获利最多? 若水库供水量都提高一倍,公司利润可增加到多少?
问题分析 总供水量:160 < 总需求量:120+180=300 收入:900元/千吨 总收入900160=144,000(元) A:50 B:60 C:50 甲:30;50 乙:70;70 丙:10;20 丁:10;40 问题分析 总供水量:160 < 总需求量:120+180=300 收入:900元/千吨 总收入900160=144,000(元) 支出 引水管理费 其他费用:450元/千吨 其他支出450160=72,000(元) 确定送水方案使利润最大 使引水管理费最小
模型建立 确定3个水库向4个小区的供水量 决策变量 水库i 向j 区的日供水量为 xij(x34=0) 目标函数 供应限制 线性规划模型(LP) 约束条件 需求限制
模型求解 引水管理费 24400(元) 利润=总收入-其它费用-引水管理费=144000-72000-24400 = 47600(元) 部分结果: Objective Value: 24400.00 Variable Value Reduced Cost X11 0.000000 30.000000 X12 50.000000 0.000000 X13 0.000000 50.000000 X14 0.000000 20.000000 X21 0.000000 10.000000 X22 50.000000 0.000000 X23 0.000000 20.000000 X24 10.000000 0.000000 X31 40.000000 0.000000 X32 0.000000 10.000000 X33 10.000000 0.000000 A(50) B(60) C(50) 甲(30;50) 乙(70;70) 丙(10;20) 丁(10;40) 50 40 10 引水管理费 24400(元) 利润=总收入-其它费用-引水管理费=144000-72000-24400 = 47600(元)
问题讨论 每个水库最大供水量都提高一倍 总供水量(320) > 总需求量(300) 确定送水方案使利润最大 利润 = 收入(900) –其它费用(450) –引水管理费 利润(元/千吨) 甲 乙 丙 丁 A 290 320 230 280 B 310 260 300 C 250 220 / 目标函数 供应限制 B, C 类似处理 需求约束可以不变
求解 总利润 88700(元) 运输问题 供应点 需求点 供需平衡或不平衡 部分结果: X11 0.000000 20.000000 Objective Value: 88700.00 Variable Value Reduced Cost X11 0.000000 20.000000 X12 100.000000 0.000000 X13 0.000000 40.000000 X14 0.000000 20.000000 X21 30.000000 0.000000 X22 40.000000 0.000000 X23 0.000000 10.000000 X24 50.000000 0.000000 X31 50.000000 0.000000 X32 0.000000 20.000000 X33 30.000000 0.000000 A(100) B(120) C(100) 甲(30;50) 乙(70;70) 丙(10;20) 丁(10;40) 40 100 50 30 总利润 88700(元) 运输问题 供应点 需求点 物资 供需平衡或不平衡
例2 货机装运 前仓: 10;6800 中仓: 16;8700 后仓: 8;5300 飞机平衡 三个货舱中实际载重必须与其最大载重成比例. 例2 货机装运 三个货舱最大载重(吨),最大容积(米3) 前仓: 10;6800 中仓: 16;8700 后仓: 8;5300 飞机平衡 三个货舱中实际载重必须与其最大载重成比例. 重量 (吨) 空间 ( 米3/吨) 利润 (元/吨) 货物1 18 480 3100 货物2 15 650 3800 货物3 23 580 3500 货物4 12 390 2850 如何装运,使本次飞行获利最大?
已知参数 货机装运 i=1,2,3,4(货物) j=1,2,3 (分别代表前、中、后仓) 货舱j的重量限制WETj 体积限制VOLj 第i种货物的重量wi,体积vi,利润pi WET=(10,16,8), VOL=(6800,8700,5300); w=(18,15,23,12), v=(480,650, 580,390), p=(3100,3800,3500,2850).
模型假设 货机装运 模型建立 每种货物可以分割到任意小; 每种货物可以在一个或多个货舱中任意分布; 多种货物可以混装,并保证不留空隙; 所给出的数据都是精确的,没有误差. 模型建立 xij--第i 种货物装入第j 个货舱的重量(吨) i=1,2,3,4, j=1,2,3 (分别代表前、中、后仓) 决策变量
货机装运 模型建立 xij--第i 种货物装入第j 个货舱的重量 目标函数(利润) 货舱重量 约束条件 货舱容积 10;6800 16;8700 8;5300 约束条件 货舱容积
货机装运 模型建立 xij--第i 种货物装入第j 个货舱的重量 平衡要求 约束条件 货物供应 j,k=1,2,3; j≠k 10;6800 16;8700 8;5300 平衡要求 j,k=1,2,3; j≠k 约束条件 货物供应
货机装运 LINGO程序 !定义集合及变量; sets: cang/1..3/:WET,VOL; wu/1..4/:w,v,p; link(wu,cang):x; endsets !对已知变量赋值; data: WET=10,16,8; VOL=6800,8700,5300; w=18,15,23,12; v=480,650, 580,390; p=3100,3800,3500,2850; enddata max=@sum(wu(i):p(i)*@sum(cang(j):x(i,j))); @for(wu(i):@sum(cang(j):x(i,j))<w(i)); @for(cang(j):@sum(wu(i):x(i,j))<WET(j)); @for(cang(j):@sum(wu(i):v(i)*x(i,j))<VOL(j)); @for(cang(j): @for(cang(k)|k #GT# j: !#GT#是大于等于的含义; @sum(wu(i):x(i,j)/WET(j))=@sum(wu(i):x(i,k)/WET(k))); ); END 货机装运 LINGO程序
货机装运 模型求解 货物2:前仓7,后仓8; 货物3: 前仓3, 中仓13;货物4: 中仓3。 最大利润约121516元 运输问题 Global optimal solution found. Objective value: 121515.8 Total solver iterations: 12 Variable Value Reduced Cost X( 1, 1) 0.000000 400.0000 X( 1, 2) 0.000000 57.89474 X( 1, 3) 0.000000 400.0000 X( 2, 1) 7.000000 0.000000 X( 2, 2) 0.000000 239.4737 X( 2, 3) 8.000000 0.000000 X( 3, 1) 3.000000 0.000000 X( 3, 2) 12.94737 0.000000 X( 3, 3) 0.000000 0.000000 X( 4, 1) 0.000000 650.0000 X( 4, 2) 3.052632 0.000000 X( 4, 3) 0.000000 650.0000 货物2:前仓7,后仓8; 货物3: 前仓3, 中仓13;货物4: 中仓3。 最大利润约121516元 运输问题 货物~供应点 货舱~需求点 装载平衡要求 运输问题的扩展
4.3 汽车生产与原油采购 例1 汽车厂生产计划 汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需求,利润及工厂每月的现有量. 4.3 汽车生产与原油采购 例1 汽车厂生产计划 汽车厂生产三种类型的汽车,已知各类型每辆车对钢材、劳动时间的需求,利润及工厂每月的现有量. 小型 中型 大型 现有量 钢材(吨) 1.5 3 5 600 劳动时间(小时) 280 250 400 60000 利润(万元) 2 3 4 制订月生产计划,使工厂的利润最大. 如果生产某一类型汽车,则至少要生产80辆, 那么最优的生产计划应作何改变?
汽车厂生产计划 模型建立 设每月生产小、中、大型汽车的数量分别为x1, x2, x3 线性规划模型(LP) 小型 中型 大型 现有量 小型 中型 大型 现有量 钢材 1.5 3 5 600 时间 280 250 400 60000 利润 2 3 4 设每月生产小、中、大型汽车的数量分别为x1, x2, x3 线性规划模型(LP)
模型求解 结果为小数,怎么办? 1)舍去小数:取x1=64,x2=167,算出目标函数值 z=629,与LP最优值632.2581相差不大. Objective Value: 632.2581 Variable Value Reduced Cost X1 64.516129 0.000000 X2 167.741928 0.000000 X3 0.000000 0.946237 Row Slack or Surplus Dual Price 2 0.000000 0.731183 3 0.000000 0.003226 结果为小数,怎么办? 1)舍去小数:取x1=64,x2=167,算出目标函数值 z=629,与LP最优值632.2581相差不大. 2)试探:如取x1=65,x2=167;x1=64,x2=168等,计算函数值z,通过比较可能得到更优的解. 但必须检验它们是否满足约束条件. 为什么? 3)模型中增加条件:x1, x2, x3 均为整数,重新求解.
整数规划(Integer Programming,简记IP) 模型求解 整数规划(Integer Programming,简记IP) IP可用LINGO直接求解 max=2*x1+3*x2+4*x3; 1.5*x1+3*x2+5*x3<600; 280*x1+250*x2+400*x3 <60000; @gin(x1);@gin(x2);@gin(x3); Global optimal solution found. Objective value: 632.0000 Extended solver steps: 0 Total solver iterations: 3 Variable Value Reduced Cost X1 64.00000 -2.000000 X2 168.0000 -3.000000 X3 0.000000 -4.000000 IP 结果输出 IP 的最优解x1=64,x2=168,x3=0,最优值z=632
汽车厂生产计划 若生产某类汽车,则至少生产80辆,求生产计划. x1,x2,, x3=0 或 80 方法1:分解为8个LP子模型 其中3个子模型应去掉,然后逐一求解,比较目标函数值,再加上整数约束,得最优解: x1=80,x2= 150,x3=0,最优值z=610
若生产某类汽车,则至少生产80辆,求生产计划. 方法2:引入0-1变量,化为整数规划 x1=0 或 80 M为大的正数,本例可取1000 x2=0 或 80 x3=0 或 80 Objective Value: 610.0000 Variable Value Reduced Cost X1 80.000000 -2.000000 X2 150.000000 -3.000000 X3 0.000000 -4.000000 Y1 1.000000 0.000000 Y2 1.000000 0.000000 Y3 0.000000 0.000000 LINGO中对0-1变量的限定: @bin(y1); @bin(y2); @bin(y3); 最优解同前
若生产某类汽车,则至少生产80辆,求生产计划. 方法3:化为非线性规划 最优解同前. x1=0 或 80 非线性规划(Non- Linear Programming,简记NLP) x2=0 或 80 x3=0 或 80 max=2*x1+3*x2+4*x3; 1.5*x1+3*x2+5*x3<600; 280*x1+250*x2+400*x3<60000; x1*(x1-80)>0; x2*(x2-80)>0; x3*(x3-80)>0; @gin(x1);@gin(x2);@gin(x3); 一般地,整数规划和非线性规划的求解比线性规划困难得多,特别是问题规模较大或者要求得到全局最优解时.
汽车厂生产计划 决策变量为整数, 建立整数规划模型. 求解整数规划和非线性规划比线性规划困难得多 (即便用数学软件) . 当整数变量取值很大时, 可作为连续变量处理, 问题简化为线性规划. 对于类似于“x=0 或 80”这样的条件,通常引入0-1变量处理,尽量不用非线性规划(特别是引入的整数变量个数较少时).
例2 原油采购与加工 汽油甲(A50%) 售价4800元/吨 库存500吨 原油A 汽油乙 (A60%) 库存1000吨 原油B 例2 原油采购与加工 汽油甲(A50%) 原油A 原油B 汽油乙 (A60%) 售价4800元/吨 售价5600元/吨 库存500吨 库存1000吨 市场上可买到不超过1500吨的原油A: 购买量不超过500吨时的单价为10000元/吨; 购买量超过500吨但不超过1000吨时,超过500吨的 部分8000元/吨; 购买量超过1000吨时,超过1000吨的部分6000元/吨. 应如何安排原油的采购和加工 ?
问题分析 决策变量 目标函数 利润:销售汽油的收入购买原油A的支出. 难点:原油A的购价与购买量的关系较复杂. 原油A的购买量,原油A, B生产汽油甲,乙的数量 甲(A50%) A B 乙(A60%) 购买x x11 x12 x21 x22 4.8千元/吨 5.6千元/吨 目标函数 利润(千元) c(x) ~ 购买原油A的支出 c(x)如何表述?
目标函数 约束条件 x 500吨单价为10千元/吨; 500吨 x 1000吨,超过500吨的8千元/吨; 原油供应 购买x A B x11 x12 x21 x22 库存500吨 库存1000吨
约束条件 汽油含原油A的比例限制 目标函数中c(x)不是线性函数,是非线性规划; B 乙(A60%) x11 x12 x21 x22 目标函数中c(x)不是线性函数,是非线性规划; 对于用分段函数定义的c(x),一般的非线性规划软件也难以输入和求解; 想办法将模型化简,用现成的软件求解.
模型求解 方法1 x1 , x2 , x3 ~以价格10, 8, 6(千元/吨)采购A的吨数 x= x1+x2+x3, c(x) = 10x1+8x2+6x3 x= x1+x2+x3, c(x) = 10x1+8x2+6x3 目标函数 500吨 x 1000吨,超过500吨的8千元/吨 增加约束 只有当以10千元/吨的价格购买x1=500(吨)时,才能以8千元/吨的价格购买x2 类似地有 非线性规划模型,可以用LINGO求解
用库存的500吨原油A、500吨原油B生产汽油甲,不购买新的原油A,利润为4800千元。 方法1:LINGO求解 Local optimal solution found. Objective value: 4800.000 Total solver iterations: 14 Variable Value Reduced Cost X11 500.0000 0.000000 X21 500.0000 0.000000 X12 0.000000 0.2666667 X22 0.000000 0.000000 X1 0.000000 0.4000000 X2 0.000000 0.000000 X3 0.000000 0.000000 X 0.000000 0.000000 Model: Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - 10*x1 - 8*x2 - 6*x3; x11+x12 < x + 500; x21+x22 < 1000; x11 - x21 > 0; 2*x12 - 3*x22 > 0; x=x1+x2+x3; (x1 - 500) * x2=0; (x2 - 500) * x3=0; x1 < 500; x2 < 500; x3 < 500; end 用库存的500吨原油A、500吨原油B生产汽油甲,不购买新的原油A,利润为4800千元。 LINGO得到的是局部最优解,还能得到更好的解吗?
购买1000吨原油A,与库存的500吨原油A和1000吨原油B一起,共生产2500吨汽油乙,利润为5000千元 。 方法1:LINGO求解 Global optimal solution found. Objective value: 5000.000 Extended solver steps: 1 Total solver iterations: 43 Variable Value Reduced Cost X11 0.000000 0.000000 X21 0.000000 0.900000 X12 1500.000 0.000000 X22 1000.000 0.000000 X1 500.0000 0.000000 X2 500.0000 0.000000 X3 0.000000 0.000000 X 1000.000 0.000000 计算全局最优解 : 选LINGO|Options菜单; 在弹出的选项卡中选择“General Solver”; 然后找到选项“Use Global Solver”将其选中; 应用或保存;重新求解。 购买1000吨原油A,与库存的500吨原油A和1000吨原油B一起,共生产2500吨汽油乙,利润为5000千元 。 还有其他建模和求解方法吗?
购买1000吨原油A,与库存的500吨原油A和1000吨原油B一起,生产汽油乙,利润为5000千元 。 x1 , x2 , x3 ~以价格10, 8, 6(千元/吨)采购A的吨数 方法2 y1, y2 , y3=1 ~以价格10, 8, 6(千元/吨)采购A 引入0-1变量 y=0 x=0 x>0 y=1 增加约束 y1,y2,y3 =0或1 0-1线性规划模型, 可用LINGO求解. 购买1000吨原油A,与库存的500吨原油A和1000吨原油B一起,生产汽油乙,利润为5000千元 。 与方法1(全局最优解)的结果相同
方法3 直接处理处理分段线性函数c(x) b1 xb2,x= z1b1+z2b2, z1+z2=1,z1, z20, 12000 9000 5000 500 1000 1500 b1 xb2,x= z1b1+z2b2, z1+z2=1,z1, z20, c(x)= z1c(b1)+z2c(b2). b1 b2 b3 b4 b2 x b3,x= z2b2+z3b3, z2+z3=1,z2, z3 0, c(x)= z2c(b2)+z3c(b3). b3 x b4,x= z3b3+z4b4, z3+z4=1,z3, z4 0, c(x)= z3c(b3)+z4c(b4).
bkxbk+1 ,x= zkbk+z k+1 bk+1 zk+zk+1 =1,zk, zk+1 0, c(x) x 12000 9000 5000 500 1000 1500 b1 b2 b3 b4 方法3 对于k=1,2,3 bkxbk+1 ,x= zkbk+z k+1 bk+1 zk+zk+1 =1,zk, zk+1 0, c(x)= zkc(bk)+zk+1 c(bk+1 ). bkxbk+1yk=1,否则,yk=0 IP模型,LINGO求解,得到的结果与方法2相同.
原油采购与加工 分段函数无法直接用非线性规划方法或软件求解. 方法1: 增加约束化为非线性规划,可以用LINGO 求解, 但可能得到的是局部最优解. 方法2: 引入0-1变量, 化为线性规划模型, 可用LINGO求解. 方法3: 直接处理分段线性函数,方法更具一般性.
4.4 接力队选拔和选课策略 分派问题 若干项任务分给一些候选人来完成,每人的专长不同,完成每项任务取得的效益或需要的资源不同,如何分派任务使获得的总效益最大,或付出的总资源最少? 若干种策略供选择,不同的策略得到的收益或付出的成本不同,各个策略之间有相互制约关系,如何在满足一定条件下作出抉择,使得收益最大或成本最小?
例1 混合泳接力队的选拔 5名候选人的百米成绩 如何选拔队员组成4100米混合泳接力队? 例1 混合泳接力队的选拔 5名候选人的百米成绩 甲 乙 丙 丁 戊 蝶泳 1’06”8 57”2 1’18” 1’10” 1’07”4 仰泳 1’15”6 1’06” 1’07”8 1’14”2 1’11” 蛙泳 1’27” 1’06”4 1’24”6 1’09”6 1’23”8 自由泳 58”6 53” 59”4 1’02”4 如何选拔队员组成4100米混合泳接力队? 讨论:丁的蛙泳成绩退步到1’15”2;戊的自由泳成绩进步到57”5, 组成接力队的方案是否应该调整? 穷举法:组成接力队的方案共有5!=120种.
0-1规划模型 cij(秒)~队员i 第j 种泳姿的百米成绩 若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 目标函数 66.8 57.2 78 70 67.4 j=2 75.6 66 67.8 74.2 71 j=3 87 66.4 84.6 69.6 83.8 j=4 58.6 53 59.4 62.4 若选择队员i参加泳姿j 的比赛,记xij=1, 否则记xij=0 目标函数 每人最多入选泳姿之一 每种泳姿有且只有1人 约束条件
模型求解 输入LINGO求解 MODEL: sets: person/1..5/; position/1..4/; link(person,position): c, x; endsets data: c= 66.8, 75.6, 87, 58.6, 57.2, 66, 66.4, 53, 78, 67.8, 84.6, 59.4, 70, 74.2, 69.6, 57.2, 67.4, 71, 83.8, 62.4; enddata min=@sum(link: c*x); @for(person(i): @sum(position(j):x(i,j))<=1;); @for(position(i): @sum(person(j):x(j,i))=1;); @for(link: @bin(x)); END
模型求解 输入LINGO求解 最优解:x14 = x21 = x32 = x43 = 1, 其它变量为0; 成绩为253.2(秒)=4’13”2 甲 乙 丙 丁 戊 蝶泳 1’06”8 57”2 1’18” 1’10” 1’07”4 仰泳 1’15”6 1’06” 1’07”8 1’14”2 1’11” 蛙泳 1’27” 1’06”4 1’24”6 1’09”6 1’23”8 自由泳 58”6 53” 59”4 1’02”4 甲~ 自由泳、乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳.
讨论 原分配方案: 甲~ 自由泳、乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳. 丁蛙泳c43 = 69.675.2 (秒),戊自由泳c54= 62.4 57.5 (秒), 方案是否调整? 敏感性分析? IP一般没有与LP相类似的理论,LINGO输出的敏感性分析结果通常是没有意义的. c43, c54 的新数据重新输入模型,用LINGO求解 最优解:x21 = x32 = x43 = x51 = 1, 成绩为4’17”7 新方案:乙~ 蝶泳、丙~ 仰泳、丁~ 蛙泳、戊~ 自由泳
混合泳接力队的选拔 建立0-1规划模型是常用方法 指派(Assignment)问题:有若干项任务, 每项任务必有且只能有一人承担,每人只能承担一项,不同人员承担不同任务的效益(或成本)不同,怎样分派各项任务使总效益最大(或总成本最小)? 人员数量与任务数量相等 人员数量大于任务数量(本例) 人员数量小于任务数量 ? 建立0-1规划模型是常用方法
例2 选课策略 要求至少选两门数学课、三门运筹学课和两门计算机课 为了选修课程门数最少,应学习哪些课程 ? 例2 选课策略 课号 课名 学分 所属类别 先修课要求 1 微积分 5 数学 2 线性代数 4 3 最优化方法 数学;运筹学 微积分;线性代数 数据结构 数学;计算机 计算机编程 应用统计 6 计算机模拟 计算机;运筹学 7 计算机 8 预测理论 运筹学 9 数学实验 运筹学;计算机 要求至少选两门数学课、三门运筹学课和两门计算机课 为了选修课程门数最少,应学习哪些课程 ? 选修课程最少,且学分尽量多,应学习哪些课程 ?
0-1规划模型 决策变量 xi=1 ~选修课号i 的课程(xi=0 ~不选) 目标函数 选修课程总数最少 最少2门数学课,3门运筹学课, 课名 所属类别 1 微积分 数学 2 线性代数 3 最优化方法 数学;运筹学 4 数据结构 数学;计算机 5 应用统计 6 计算机模拟 计算机;运筹学 7 计算机编程 计算机 8 预测理论 运筹学 9 数学实验 运筹学;计算机 xi=1 ~选修课号i 的课程(xi=0 ~不选) 目标函数 选修课程总数最少 最少2门数学课,3门运筹学课, 2门计算机课. 约束条件
0-1规划模型 约束条件 先修课程要求 x3=1必有x1 = x2 =1 模型求解(LINGO) 课号 课名 先修课要求 1 微积分 2 线性代数 3 最优化方法 微积分;线性代数 4 数据结构 计算机编程 5 应用统计 6 计算机模拟 7 8 预测理论 9 数学实验 先修课程要求 x3=1必有x1 = x2 =1 模型求解(LINGO) 最优解: x1 = x2 = x3 = x6 = x7 = x9 =1, 其它为0;6门课程,总学分21.
讨论:选修课程最少,学分尽量多,应学习哪些课程? 学分最多 两目标(多目标)规划 多目标优化的处理方法:化成单目标优化。 以课程最少为目标,不管学分多少. 最优解如上,6门课程,总学分21 . 以学分最多为目标,不管课程多少. 最优解显然是选修所有9门课程 .
多目标规划 增加约束 , 以学分最多为目标求解. 在课程最少的前提下以学分最多为目标. 增加约束 , 以学分最多为目标求解. 在课程最少的前提下以学分最多为目标. 课号 课名 学分 1 微积分 5 2 线性代数 4 3 最优化方法 数据结构 应用统计 6 计算机模拟 7 计算机编程 8 预测理论 9 数学实验 最优解: x1 = x2 = x3 = x5 = x7 = x9 =1, 其它为0;总学分由21增至22. 注意:最优解不唯一! 可将x9 =1 易为x6 =1 LINGO不能告诉优化问题的解是否唯一.
多目标规划 对学分数和课程数加权形成一个目标,如三七开. 课号 课名 学分 1 微积分 5 2 线性代数 4 3 最优化方法 数据结构 应用统计 6 计算机模拟 7 计算机编程 8 预测理论 9 数学实验 最优解: x1 = x2 = x3 = x4 = x5 = x6 = x7 = x9 =1, 其它为0;总学分28.
多目标规划 讨论与思考 最优解与1=0,2=1的结果相同——学分最多. 最优解与1=1,2=0的结果相同——课程最少.
选 课 策 略 用0-1变量表示策略选择是常用的方法 “要选甲 (x1)必选乙 (x2)” 可用x1 x2描述. “甲乙二人至多选一人” 怎样描述? “甲乙二人至少选一人” 怎样描述? 双(多)目标规划的处理方法 加权组合成一个新目标, 化为单目标规划. 一个目标作为约束, 解另一个目标的规划.
例3 销售代理的开发与中断 公司未来5年的业务量分别为400,500,600,700和800 问题1 公司应该与哪些候选企业建立代理关系 ? 例3 销售代理的开发与中断 候选代理1 候选代理2 候选代理3 候选代理4 年最大业务量 350 250 300 200 一次性费用(万元) 100 80 90 70 年运行费用(万元) 7.5 4.0 6.5 3.0 公司未来5年的业务量分别为400,500,600,700和800 问题1 公司应该与哪些候选企业建立代理关系 ? 代理1 代理2 代理3 代理4 临时中断费用(万元) 5 3 4 2 重新恢复费用(万元) 1 9 问题2 若目前全部建立了代理关系,应如何进行调整 ?
问题1的建模 假 设 公司可在任一年开始与代理建立代理关系. 代理关系一旦建立,将长期保持. 决策变量 假 设 公司可在任一年开始与代理建立代理关系. 代理关系一旦建立,将长期保持. 决策变量 xit=1 ~在第t年初(首次)与代理i建立代理关系 xit=0 ~否 目标函数 总费用(建立代理 +运行费用)最小 ~建立代理 ~运行费用
问题1的建模 公司每年的业务量必须能够由足够的代理承担 约束条件 第1年 第2年 第3年 第4年 第5年
问题1的求解 假定公司一旦与候选代理建立代理关系,则这一关系将长期保持 LINGO求解结果 x11= x21= x44=1(其他变量为0),最小总费用313.5万元 公司应在第1年初与代理1、2建立代理关系; 在第4年初与代理4建立代理关系.
问题2的建模 假 设 公司目前已与所有代理建立代理关系. 公司每年初可中断或恢复代理关系. 决策变量 假 设 公司目前已与所有代理建立代理关系. 公司每年初可中断或恢复代理关系. 决策变量 xit=1 ~第t年代理i从事代理业务; xit=0 ~否 yit=1 ~第t年与代理i中断代理关系; yit=0 ~否 yit=1 ~第t年与代理i中断代理关系; yit=0 ~否 zit=1 ~第t年与代理i恢复代理关系; zit=0 ~否 zit=1 ~第t年与代理i恢复代理关系; zit=0 ~否 总费用(运行费+中断费+恢复费)最小 目标函数
问题2的建模 业务量约束、业务中断约束、业务恢复约束 约束条件 业务量约束:每年公司的业务量由足够的代理承担 业务中断约束:某年运行,下一年不运行,则需中断 如果xit=1而xi,t+1=0, 则yi,t+1=1 业务恢复约束:某年不运行,下一年运行,则需恢复 如果xit=0而xi,t+1=1, 则zi,t+1=1
问题2的求解 模型分析 设法减少整数变量数目 可只要求xit为0-1变量,最优解中yit (zit)自然是0-1变量 LINGO求解结果 xit的值:x11= x12= x13= x14= x15= x23= x24= x25= x41= x42= x43= x44= x45=1 (其他为0); 最小总费用86.5万元. 公司应在第1年初临时中断与代理2、3的代理关系,而在第3年初重新恢复与代理2的代理关系.
4.5 饮料厂的生产与检修 企业生产计划 单阶段生产计划 外部需求和内部资源随时间变化 多阶段生产计划 生产批量问题 4.5 饮料厂的生产与检修 企业生产计划 单阶段生产计划 外部需求和内部资源随时间变化 多阶段生产计划 生产批量问题 考虑与产量无关的固定费用. 给优化模型求解带来新的困难.
例1 饮料厂的生产与检修计划 某种饮料4周的需求量、生产能力和成本 存贮费:每周每千箱饮料 0.2 (千元). 周次 需求量(千箱) 生产能力(千箱) 成本(千元/千箱) 1 15 30 5.0 2 25 40 5.1 3 35 45 5.4 4 20 5.5 合计 100 135 存贮费:每周每千箱饮料 0.2 (千元). 安排生产计划, 满足每周的需求, 使4周总费用最小. 在4周内安排一次设备检修,占用当周15千箱生产能力,能使检修后每周增产5千箱,检修应排在哪一周?
问题分析 模型假设 除第4周外每周的生产能力超过每周的需求; 生产成本逐周上升; 前几周应多生产一些. 饮料厂在第1周开始时没有库存; 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 合计 100 135 成本 5.0 5.1 5.4 5.5 模型假设 饮料厂在第1周开始时没有库存; 从费用最小考虑, 第4周末不能有库存; 周末有库存时需支出一周的存贮费; 每周末的库存量等于下周初的库存量.
模型建立 决策变量 x1~ x4:第1~4周的生产量 y1~ y3:第1~3周末库存量 存贮费:0.2(千元/周•千箱) 目标函数 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 x1~ x4:第1~4周的生产量 y1~ y3:第1~3周末库存量 存贮费:0.2(千元/周•千箱) 目标函数 产量、库存与需求平衡 能力限制 约束条件 非负限制
模型求解 讨论 LINGO求解 最优解: x1~ x4:15,40,25,20; y1~ y3: 0,15,5 . 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 产量 库存 5 4周生产计划的总费用为528 (千元) 讨论 增加库存量(y1~ y3)为决策变量使模型清晰并便于检查.
检修计划 在4周内安排一次设备检修,占用当周15千箱生产能力,能使检修后每周增产5千箱,检修应排在哪一周? 检修安排在任一周均可 周次 需求 能力 1 15 30 2 25 40 3 35 45 4 20 成本 5.0 5.1 5.4 5.5 0-1变量wt :wt=1~ 检修安排在第t周(t=1,2,3,4) 约束条件 能力限制 产量、库存与需求平衡条件不变
检修计划 讨论 0-1变量 wt=1~ 检修安排在第t周 增加约束条件:检修1次 目标函数不变 LINGO求解 最优解:w1=1, w2 , w3, w4=0; x1~ x4:15,45,15,25; y1~ y3:0,20,0 . 总费用由528降为527(千元) 讨论 引入0-1变量表示检修 检修所导致的生产能力提高的作用, 需要更长的时间才能得到充分体现 .
例2 饮料的生产批量问题 饮料厂使用同一条生产线轮流生产多种饮料。 若某周开工生产某种饮料, 需支出生产准备费8千元. 例2 饮料的生产批量问题 饮料厂使用同一条生产线轮流生产多种饮料。 若某周开工生产某种饮料, 需支出生产准备费8千元. 某种饮料4周的需求量、生产能力和成本(与例1同) 周次 需求量(千箱) 生产能力(千箱) 成本(千元/千箱) 1 15 30 5.0 2 25 40 5.1 3 35 45 5.4 4 20 5.5 合计 100 135 存贮费:每周每千箱饮料 0.2 (千元) (与例1同) . 安排生产计划, 满足每周的需求, 使4周总费用最小.
问题分析 模型建立 与例1的主要差别: 需考虑与生产数量无关的费用——生产准备费 ct ~时段t 生产费用(元/件);ht ~时段t (末)存贮费(元/件) st ~时段t 生产准备费(元);dt ~时段t 市场需求(件); Mt ~时段t 生产能力(件). 假设初始库存为0. 制订生产计划, 满足需求并使T个时段的总费用最小. xt ~时段t 生产量;yt ~时段t (末)存贮量; 决策变量 wt =1 ~时段t 开工生产 (wt =0 ~不开工).
ct ~生产费,ht ~存贮费,st ~准备费,dt ~需求量, Mt ~生产能力,xt ~生产量,yt ~存贮量,wt ~开工生产0-1变量. 模型建立 目标函数 约束条件 ~ 满足需求 混合0-1规划模型
模型求解 将所给参数代入模型,用LINGO求解 最优解:x1~ x4:15,40,45,0;总费用:554.0(千元) 生产批量(Lot-sizing)问题 既含可变费用(生产成本、存贮费)又含固定费用(生产准备费)的多阶段生产计划问题. 关键是引入0-1变量wt表示时段t是否开工生产.
§6 钢管和易拉罐下料 原料下料问题 生产中通过切割、剪裁、冲压等手段,将原材料加工成规定大小的成材. §6 钢管和易拉罐下料 原料下料问题 生产中通过切割、剪裁、冲压等手段,将原材料加工成规定大小的成材. 优化问题: 按照工艺要求,确定下料方案,使所用材料最省,或利润最大.
例1 钢管下料 原料钢管:每根19米 客户需求 4米50根 6米20根 8米15根 问题1. 如何下料最节省 ? 节省的标准是什么? 问题1. 如何下料最节省 ? 节省的标准是什么? 问题2. 客户增加需求: 5米10根 由于采用不同切割模式太多, 会增加生产和管理成本,规定切割模式不能超过3种. 如何下料最节省?
钢管下料 切割模式 按照客户需要在一根原料钢管上安排切割的一种组合,如: 余料1米 4米1根 6米1根 8米1根 余料3米 4米1根 合理切割模式的余料应小于客户需要钢管的最小尺寸.
为满足客户需要,按照哪些种合理模式切割,每种模式切割多少根原料钢管,最为节省? 钢管下料问题1 合理切割模式 模式 4米钢管根数 6米钢管根数 8米钢管根数 余料(米) 1 4 3 2 5 6 7 为满足客户需要,按照哪些种合理模式切割,每种模式切割多少根原料钢管,最为节省? 1. 原料钢管剩余总余量最小 . 节省的 两种标准 2. 所用原料钢管总根数最少 .
xi ~按第i 种模式切割的原料钢管根数(i=1,…7) 决策变量 xi ~按第i 种模式切割的原料钢管根数(i=1,…7) 目标1(总余量) 模 式 4米 根数 6米 8米 余 料 1 4 3米 2 3 1米 5 6 7 需 求 50 20 15 约束 满足需求 整数约束: xi 为整数 最优解:x2=12, x5=15, 其余为0; 最优值:27. 按模式2切割12根,按模式5切割15根,共27根,余料27米.
钢管下料问题1 目标2(总根数) 约束条件不变 xi 为整数 最优解:x2=15, x5=5, x7=5, 其余为0; 最优值:25. 按模式2切割15根,按模式5切割5根,按模式7切割5根,共25根,余料35米 . 与目标1的结果“共切割27根,余料27米” 相比. 目标2切割减少了2根, 但余料增加8米, 为什么?
按照目标1比需求多生产1根4米、7根6米, 共46米, 正好等于2根原料(38米)再加8米. 钢管下料问题1 原料钢管:每根19米 目标1(总余量) ~ x2=12, x5=15, 共27根,余27米 目标2(总根数) ~ x2=15, x5=5, x7=5, 共25根, 余35米 模 式 4米 根数 6米 8米 余料 (米) 2 3 1 5 7 4米 根数 6米 8米 需求 50 20 15 目标1 51 27 目标2 按照目标1比需求多生产1根4米、7根6米, 共46米, 正好等于2根原料(38米)再加8米. 若多生产的也视为余料, 则总余量最小等价于总根数最少. 若余料没有用处, 通常以总根数最少为目标.
钢管下料问题2 增加一种需求:5米10根;切割模式不超过3种. 现有4种需求:4米50根,5米10根,6米20根,8米15根,用枚举法确定合理切割模式,过于复杂. 对大规模问题,用模型的约束条件界定合理模式. 决策变量 xi ~按第i 种模式切割的原料钢管根数(i=1,2,3). r1i, r2i, r3i, r4i ~ 第i 种切割模式下,每根原料钢管生产4米、5米、6米和8米长的钢管的数量.
钢管下料问题2 目标函数(总根数) 模式合理:每根余料不超过3米 约束条件 满足需求 整数约束: xi ,r1i, r2i, r3i, r4i (i=1,2,3)为整数 整数非线性规划模型
钢管下料问题2 增加约束,缩小可行域,便于求解. 需求:4米50根,5米10根,6米20根,8米15根 每根原料钢管长19米 原料钢管总根数下界: 特殊生产计划:对每根原料钢管 模式1:切割成4根4米钢管,需13根; 模式2:切割成1根5米和2根6米钢管,需10根; 模式3:切割成2根8米钢管,需8根. 原料钢管总根数上界:13+10+8=31 模式排列顺序可任定
模式1:每根原料钢管切割成3根4米和1根6米钢管, 共10根; LINGO求解整数非线性规划模型 Local optimal solution found. Objective value: 28.00000 Variable Value Reduced Cost X( 1) 10.00000 1.000000 X( 2) 10.00000 1.000000 X( 3) 8.000000 1.000000 R( 1, 1) 3.000000 0.000000 R( 1, 2) 2.000000 0.000000 R( 1, 3) 0.000000 0.000000 R( 2, 1) 0.000000 0.000000 R( 2, 2) 1.000000 0.000000 R( 2, 3) 0.000000 0.000000 R( 3, 1) 1.000000 0.000000 R( 3, 2) 1.000000 0.000000 R( 3, 3) 0.000000 0.000000 R( 4, 1) 0.000000 0.000000 R( 4, 2) 0.000000 0.000000 R( 4, 3) 2.000000 0.000000 (也是全局最优解) 模式1:每根原料钢管切割成3根4米和1根6米钢管, 共10根; 模式2:每根原料钢管切割成2根4米、1根5米和1根6米钢管,共10根; 模式3:每根原料钢管切割成2根8米钢管,共8根. 原料钢管总根数为28根.
例2 易拉罐下料 板材规格1: 正方形,边长24cm,5万张。 板材规格2: 长方形, 罐身高10cm,上盖、下底直径均5cm. 模式1:1.5秒 模式2:2秒 模式3:1秒 板材规格1: 正方形,边长24cm,5万张。 板材规格2: 长方形, 3228cm, 2万张。 模式4:3秒 上盖 下底 罐 身 罐身高10cm,上盖、下底直径均5cm. 每周工作40小时,每只易拉罐利润0.10元,原料余料损失0.001元 / cm2(不能装配的罐身、盖、底也是余料). 如何安排每周生产?
问题分析 计算各种模式下的余料损失 模式1: 上、下底直径d=5cm,罐身高h=10cm. 正方形 边长24cm 模式1 余料损失: 242-10d2/4 - dh=222.6 cm2 罐身个数 底、盖 个数 余料损失 (cm2) 冲压时间(秒) 模式1 1 10 222.6 1.5 模式2 2 4 183.3 模式3 16 261.8 模式4 5 169.5 3
问题分析 模型建立 目标:易拉罐利润扣除原料余料损失后的净利润最大. 注意:不能装配的罐身、上下底也是余料. 约束:每周工作时间不超过40小时; 原料数量:规格1(模式1 ~3)5万张, 规格2(模式4)2万张; 罐身和底、盖的配套组装 . 模型建立 xi ~ 按照第i 种模式的生产张数(i=1,2,3,4); y1 ~ 一周生产的易拉罐个数; y2 ~ 不配套的罐身个数; y3 ~ 不配套的底、盖个数. 决策变量
模型建立 y1 ~ 易拉罐个数;y2 ~ 不配套的罐身; y3 ~ 不配套的底、盖. 每只易拉罐利润0.10元,余料损失0.001元 / cm2 产量 余料 时间 x1 222.6 1.5 x2 183.3 2 x3 261.8 1 x4 169.5 3 罐身面积dh=157.1 cm2 底盖面积d2/4=19.6 cm2 目标 时间约束 (40小时) 约束条件 原料约束
虽然xi和y1,y2,y3应是整数,但是因生产量很大,可以把它们看成实数,从而用线性规划模型处理 . 约束条件 y1 ~ 易拉罐个数;y2 ~ 不配套的罐身; y3 ~ 不配套的底、盖. 罐身 底、盖 1 10 2 4 16 5 产量 x1 x2 x3 x4 配套约束 虽然xi和y1,y2,y3应是整数,但是因生产量很大,可以把它们看成实数,从而用线性规划模型处理 .
模型求解 数据之间的数量级差别太大,可以进行预处理,缩小数据之间的差别,便于减少计算误差. 将所有决策变量扩大10000倍(xi ~万张,yi ~万件) Objective value: 0.4298337 Variable Value Reduced Cost Y1 16.02500 0.000000 X1 0.000000 0.000050 X2 4.012500 0.000000 X3 0.3750000 0.000000 X4 2.000000 0.000000 Y2 0.000000 0.2233312 Y3 0.000000 0.0364844 模式2生产40125张, 模式3生产3750张, 模式4生产20000张, 共产易拉罐160250个 (罐身和底、盖无剩余), 净利润为4298元 .
下料问题的建模 确定下料模式 构造优化模型 一维问题(如钢管下料) 规格不太多,可枚举下料模式,建立整数线性规划模型,否则要构造整数非线性规划模型,求解困难,可用缩小可行域的方法进行化简,但要保证最优解的存在. 二维问题(如易拉罐下料) 具体问题具体分析(比较复杂 )