数学建模培训讲义——优化模型与LINGO软件二○一一年七目录1 静态优化模型 (1)1.1 最优生产计划问题 (1)1.2 存贮模型 (2)2 线性规划模型 (2)2.1 LINGO简介 (2)2.2 配料问题 (3)2.3 练习:运输问题 (4)3 整数规划模型 (4)3.1 电影院广告问题 (4)3.2 练习:生产计划问题 (5)4 0-1规划 (5)4.1 背包问题 (5)4.2 矿井选址问题 (6)4.3 练习:混合泳接力队的选拔问题 (7)5 LINGO应用 (8)5.1 变量定界函数 (8)5.2 集合 (8)5.3 帆船生产问题 (9)5.4 派生集合 (11)5.5 通过电子表格(Excel)文件传递数据 (12)5.6 旅游问题 (13)优化模型与LINGO 软件优化问题是计划管理工作中经常要碰到的问题,比如,出门旅行就要考虑选择什么样的路线和交通工具,才能使旅行费用最省或使所花费的时间最少。
在工厂技术、经济管理和科学研究等领域中,最优化问题就更多,一个工厂要怎样安排产品的生产,才能获得最大利润?一个设计部门要考虑在满足结构强度的要求下怎样使得所用的材料的总重量最轻?比较有效的求解优化问题的一个方法使数学规划,它包括:线性规划、非线性规划、整数规划、动态规划和多目标规划等等。
用数学建模的方法来处理一个优化问题的时候,首先要确定优化的目标是什么,寻求的决策是什么,决策受到哪些条件的限制(如果有限制的话),然后用数学工具(变量、函数等)表示它们。
1 静态优化模型静态优化模型,归结为微积分中的函数极值问题,可以直接用微分法求解。
1.1 最优生产计划问题一计算机公司引进A 、B 两种类型的芯片技术,总耗资400000元,准备生产这两种类型的芯片出售。
生产一片A 芯片的成本为1950元,而市场售价为3390元,生产一片B 芯片的成本为2250元,而市场售价3990元。
由于市场存在竞争,每售出一片A 芯片,A 芯片就会降价0.1元,并且令B 芯片降低0.04元,每售出一片B 芯片,B 芯片就会降价0.1元,并且令A 芯片降价0.03元。
假设生产的芯片都能卖出,求一生产计划,以获得最大利润。
模型分析:假设A 、B 两种芯片的数量分别是1x 和2x ,市场价格分别是1p 和2p ,用R 表示出售芯片的总收入,用C 表示生存芯片的总费用,用P 表示总利润。
根据题意,上述变量有如下关系:11233900.10.03p x x =-- 21239900.040.1p x x =--1122R p x p x =+1240000019502250C x x =++P R C =- 模型建立:根据上述分析,可得优化模型22112212max 14400.117400.10.07400000P x x x x x x =-+---.s t 1,x 20x ≥且为整数 模型求解:用微分法求解12112214400.20.0717400.070.2Px x x P x x x ∂⎧=--⎪∂⎪⎨∂⎪=--⎪∂⎩ 最优解是14735x =,27043x =此时max 9136410P =1.2 存贮模型详见“静态优化模型”PDF 文档。
2 线性规划模型如果约束条件和目标函数都是线性的,称之为线性规划模型。
例如: 12max 25f x x =+12121243.28,0x x s t x x x x ≤⎧⎪≤⎪⎨+≤⎪⎪≥⎩解法一:两个变量的线性规划模型的图解法 解法二:消元法(迭代法) 解法三:单纯形法(迭代法演化) 解法四:LINGO 软件求解max=2*x1+5*x2; x1<=4; x2<=3; x1+2*x2<=8; 2.1 LINGO 简介LINGO 是英文“Linear Interactive And General Optimizer ”字首的缩写形式,即“交互式线性和通用优化求解器”,其语法特点是:(1)语句的顺序不重要,因为LINGO 总是根据“max =”或“min =”语句寻找目标函数,而其他语句都是约束条件,也可以没有约束条件。
(2)LINGO 不区分大小写,但变量必须以字母开头。
(3)LINGO 默认所有变量非负。
(4)LINGO 模型是由一系列语句组成,每个语句都是以“;”结尾,编写程序时应注意保持模型的可读性,同时保持语法的严谨性。
(5)LINGO 中以感叹号“!”开始的是说明语句(说明语句也必须以“:”结束)。
LINGO 软件的具体用法在模型中介绍。
表1 各版本信息2.2 配料问题某养鸡场饲养一批小鸡,对小鸡健康成长的基本营养元素有三种,简单地称为A 、B 、C 。
这批小鸡每日对这三种营养的最低需要量是:元素A 为12单位,元素B 为36单位,元素C 为恰好为24单位,C 元素不够或过量都是有害的。
现市场供应的饲料有甲、乙两种,甲饲料每千克5元,所含的营养元素A 为2单位,B 为2单位,C 为2单位;乙饲料每千克4元,所含的营养元素A 为1单位,B 为9单位,C 为3单位。
养鸡场负责人希望得到甲乙两种饲料的混合饲料最优配比,既能满足小鸡健康成长的需要,又能降低饲料的费用。
模型建立:假设甲饲料每天需求1x 千克,乙饲料每天需求2x 千克,每天饲料总费用为f 。
12min 54f x x =+121212122122936.2324,0x x x x s t x x x x +≥⎧⎪+≥⎪⎨+=⎪⎪≥⎩ LINGO 程序:min=5*x1+4*x2;2*x1+x2>=12; 2*x1+9*x2>=36; 2*x1+3*x2=24; 2.3 练习:运输问题设有两个煤厂甲和乙,每月进煤数量分别为60和100吨,联合供应三个居民区A 、B 、C ,三个居民区每月对煤的需求量依次为50吨、70吨和40吨。
煤厂到各个居民区的运输费用如图所示,如何分配供煤量使得总费用最少?3 整数规划模型部分变量或全部变量要求取整数,称为整数规划模型。
LINGO 程序中通过“@gin(变量)”命令限制变量为整数,例如:12max 43f x x =+121212410.238,0x x s t x x x x +≤⎧⎪+≤⎨⎪≥⎩且为整数 LINGO 程序:max=4*x1+3*x2; 4*x1+x2<=10; 2*x1+3*x2<=8; @gin(x1); @gin(x2); 3.1 电影院广告问题某小型工厂计划每周花71元在两个小型电影院加映广告片,推销该厂的产品,为了获得更多的观众,要合理的在两个电影院里分配经费。
已知甲电影院加映广告片的时间为4分钟,每放映一次要付12元,预计每次有200人观看,该电影院每周仅能为该厂提供13分钟广告时间;乙电影院广告片的时间为2分钟,每次收费16元,预计每次300人观看,该电影院仅能为该厂提供7分钟广告时间。
若观众人数以百人计,试建立数学模型解答。
1284乙6510甲C B A假设每周在甲电影院放映广告1x 次,在乙电影院放映2x 次,观看的观众总数为f 。
12max 23f x x =+121212121671413.27,0x x x s t x x x +≤⎧⎪≤⎪⎨≤⎪⎪≥⎩且为整数 LINGO 程序:max=2*x1+3*x2; 12*x1+16*x2<=71; 4*x1<=13; 2*x2<=7; @gin(x1); @gin(x2);3.2 练习:生产计划问题某工厂拥有A 、B 、C 三种类型的设备,生产甲、乙两种产品,每件产品在生产中需要占用的设备时数、每件产品可以获得的利润以及三种设备可利用的时数如表所示。
问题:工厂应如何安排生产可获得最大的利润?4 0-1规划0-1规划是整数规划中的一种特殊情形,当决策变量i x 只能取0或1时,这样的整数规划称之为0-1规划。
约束条件可以写成“01,i x ≤≤且为整数”,LINGO 中通过“@bin(变量)”命令实现。
4.1 背包问题一旅行者的背包最多只能装6kg 的物品,待装的物品有4件,它们的重量和价值依次为:2kg ,1元;3kg ,1.2元;3kg ,0.9元;4kg ,1.1元。
那么他的背包中携带哪些物品可使价值最大?设备设备能力产品乙产品甲25001500利润(元/件)7530设备C4012设备B 6523A/h用i x 表示第i 种物品是否被携带,令1,0,i i x i ⎧=⎨⎩携带第种物品不携带第种物品携带物品的总价值记为f 。
1234max 1.20.9 1.1f x x x x =+++123423346.01,1,2,3,4)i i x x x x s t x x i +++≤⎧⎨≤≤=⎩且为整数( LINGO 程序:max=x1+1.2*x2+0.9*x3+1.1*x4; 2*x1+3*x2+3*x3+4*x4<=6; @bin(x1); @bin(x2); @bin(x3); @bin(x4); 4.2 矿井选址问题某煤矿准备在5个矿井挖煤,现在有10个矿井可供选择,设10个矿井的代号为A1、 A2、…、A10,相应的开采费用分别为8、9、3、10、4、7、5、14、11、8,对矿井的选择要满足以下限制条件: (1)或选A1和A7,或选A8;(2)在A4、A5、A6、A7中最多只能选两个; (3)选择A3或A4,就不能选择A5,反之亦然。
如何选择,才能使开采总费用最小? 模型建立:用i x 表示第i 个矿井是否被选择,令1,0,i i x i ⎧=⎨⎩选择第个矿井不选择第个矿井开采总费用记为f 。
12345678910max 8931047514118f x x x x x x x x x x =+++++++++101187845673545511.21101,1,2,,10)i i i i x x x x x s t x x x x x x x x x x i =⎧=⎪⎪+=⎪⎪+=⎪⎨+++≤⎪⎪+≤⎪+≤⎪⎪≤≤=⎩∑且为整数(LINGO 程序:max=8x1+9*x2+3*x3+10*x4+4*x5+7*x6+5*x7+14*x8+11*x9+8*x10; x1+x2+x3+x4+x5+x6+x7+x8+x9+x10=5; x1+x8=1; x7+x8=1; x4+x5+x6+x7<=2; x3+x5<=1; x4+x5<=1; @bin(x1); @bin(x2); @bin(x3); @bin(x4); @bin(x5); @bin(x6); @bin(x7); @bin(x8); @bin(x9); @bin(x10);4.3 练习:混合泳接力队的选拔问题某学校准备从5名游泳队员中选拔4人组成接力队,参加学校的4×100m 混合泳接力赛。