Lingo超经典编辑案例解析全套汇编
lingo学习例题详细解读
![lingo学习例题详细解读](https://img.taocdn.com/s3/m/2b7c6d7c5acfa1c7aa00cc30.png)
说明本文档一共包含两个个非线性的lingo例题的程序学习其中包含一些数学建模的思想同时对两个例题采取了多种编程方式希望在这种仿真式多角度的编程思想能够给你启发与帮助例题一某公司现有数额为20亿的一笔资金可作为未来5年内的投资资金,市场上有8个投资项目(如股票、债券、房地产、…)可供公司作投资选择。
其中项目1、项目2每年初投资,当年年末回收本利(本金和利润);项目3、项目4每年初投资,要到第二年末才可回收本利;项目5、项目6每年初投资,要到第三年末才可回收本利;项目7只能在第二年年初投资,到第五年末回收本利;项目8只能在第三年年初投资,到第五年末回收本利。
公司财务分析人员给出一组实验数据,见表1(见附录1)。
试根据实验数据确定5年内如何安排投资?使得第五年末所得利润最大?例题一分析针对问题一,这是典型的单目标优化问题,可以利用线性规划模型进行解决。
其目标是在不考虑投资风险的情况下,对20亿投资金进行合理的分配,使得在第五年末的利润达到最大。
将五年中8个项目的投资利润累加起来,得到的就是要求的目标函数,要做的是如何安排五年的投资计划,每年投资哪几个项目,每个项目投资多少,该决策要受到两个方面的约束:(1)各个投资项目的投资上限。
在对任何一个项目的投资周期内,都不能超过该项目的投资上限。
所谓一个投资周期是指从开始投资到第一次获得利润,例如对于项目4,第一年投资30000万元,由于它的运行周期是两年,投资上限是40000万元,所以第二年投资项目4的上限是10000万元。
(2)每年年初用于投资的资金。
由于不同的项目有不同的运行周期,所以在五年内每年都会有利润的产生。
每年年初用于投资的资金都要小于或等于上年末所拥有的资金。
数据5.问题一的解答针对问题一,我们确定模型一5.1 模型一的建立5.1.1 确定目标函数在无风险的情况下对20亿投资资金进行8个项目的投资选择,使得在第五年末的投资利润达到最大,预投资方案如下表五所示:根据上表我们确定出目标函数为:5811max ij j i i W x p ===∑∑5.1.2 确定约束条件 约束一:投资金额的上限⑴ 项目1和项目2每年投资金额的上限ij j x U ≤,其中i =1,2,3,4,5 j =1,2⑵ 项目3和项目4在两年的投资周期内投资金额的上限1,ij i j j x x U -+≤, 其中i =2,3,4 j =3,4⑶ 项目5和项目6在三年的投资周期内投资金额的上限1,2,ij i j i j j x x x U --++≤,其中i =3,4 j =5,6⑷ 项目7只能在第二年年初投资,且投资周期为四年,它的投资上限277x U ≤⑸ 项目8只能在第三年年初投资,且投资周期为三年,它的投资上限388x U ≤约束二:每年年初用于投资的资金 ⑴ 第一年年初用于投资的资金 120R ≤⑵ 第二年年初用于投资的资金21112121314151620R p x p x x x x x ≤++----⑶ 第三年年初用于投资的资金2231122133144151623242526271120x x i i i i R x p x p x p x p x x x x x ==≤++++-------∑∑⑷ 第四年年初用于投资的资金33224112233441551662526273334353638111120i i i i i i i i R x p x p x p x p x p x p x x x x x x x x ====≤++++++--------∑∑∑∑⑸ 第五年年初用于投资的资金443322511223344556627353638434411111120i i i i i i i i i i i i R x p x p x p x p x p x p x x x x x x ======≤++++++------∑∑∑∑∑∑5.1.3 综上所述我们得到问题一的线性规划模型5811max ij j i i W x p ===∑∑这是一个线性规划模型,因此我们利用lingo 软件进行编程求解(求解程序见附录2),解得第五年末的最大利润为23.26亿元,五年内的投资方案如下表五所示:在第一年年初,投资项目1到项目8分别为6亿元、3亿元、4亿元、1.803亿元、0、0.267亿元、0、0;在第二年年初,投资项目1到项目8分别为6亿元、3亿元、0、1.197亿元、0.663亿元、0、4亿元、0;在第三年年初,投资项目1到项目8分别为6亿元、3亿元、1.151亿元、0、2.337亿元、1.733亿元、0、3亿元;在第四年年初,投资项目1到项目8分别为6亿元、0、2.849亿元、3亿元、0、0、0、0;在第五年年初,投资项目1到项目8分别为6亿元、3亿元、0、0、0、0、0、0;5.3 模型一结果分析在模型一中,影响最终利润大小的共有三个因素:预计到期利润率,投资金额的上限,投资资金。
案例lingo分析
![案例lingo分析](https://img.taocdn.com/s3/m/d59a956725c52cc58bd6bef0.png)
Righthand Side Ranges Row Current Allowable Allowable RHS Increase Decrease 2 50.00000 10.00000 6.666667 3 480.0000 53.33333 80.00000 4 100.0000 INFINITY 40.00000 “资源”的影子价格的进一步分析: 影子价格的作用(即在最优解下“资源”增加1个单位时“效 益”的增量)是有限制的。每增加1桶牛奶利润增长48元(影子价 格),但上面输出CURRENT RHS的ALLOWABLE INCREASE、ALLOWABLE DECREASE中,给出了影子价格有意义条件下约束右端的限制范围: milk原料最多增加10(桶牛奶),time劳动时间最多增加53(小时 )。 现回答附加问题1)第2问: 虽然应该批准用35元买1桶牛奶的投资,但每天最多购买10桶 牛奶。同理,可以用低于每小时2元的工资聘用临时工人以增加劳 动时间价格概念回答附加问题: 1)用35元可以买到1桶牛奶,低于1桶牛奶的影子价格48,当然 应该作这项投资。 2)聘用临时工人以增加劳动时间,付给的工资低于劳动时间影 子价格才可增加利润,所以工资最多是每小时2元。
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
案例
根据市场需求,生产的A1,A2全部能售出,且每公斤A1获利24元,每 公斤A2获利16元。现在加工厂每天能得到50桶牛奶的供应,每天正 式工人总的劳动时间480小时,并且甲车间每天至多能加工100公斤 A1,乙车间的加工能力没有限制。 试为该厂制订一个生产计划,使每天获利最大,并进一步讨论以下 3个附加问题: 1)若用35元可以买到1桶牛奶,应否作这项投资?若投资,每天最 多购买多少桶牛奶? 2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最 多是每小时几元? 3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生 产计划?
运用lingo解决问题的例子
![运用lingo解决问题的例子](https://img.taocdn.com/s3/m/1eb2a05f876fb84ae45c3b3567ec102de3bddf5e.png)
运用lingo解决问题的例子
以下是一个运用LINGO解决实际问题的例子:
问题描述:
某公司生产A、B两种产品,已知生产1单位A产品需要3单位原料1和2单位原料2,同时产生2单位废料;生产1单位B产品需要4单位原料1和2单位原料2,同时产生3单位废料。
该公司有10单位原料1和8单位原料2,同时最多可以产生10单位废料。
请为公司制定一个生产计划,使得A、B两种产品的产量最大。
模型建立:
1. 设x1为A产品的产量,x2为B产品的产量。
2. 设原料1的消耗为3x1 + 4x2,原料2的消耗为2x1 + 2x2,废料产生为2x1 + 3x2。
3. 原料1的限制条件为3x1 + 4x2 <= 10,原料2的限制条件为2x1 +
2x2 <= 8,废料的限制条件为2x1 + 3x2 <= 10。
4. 目标函数为max x1 + x2,即最大化A、B两种产品的产量之和。
LINGO代码:
SETS:
I / 1 /;
J / 1,2 /;
K / I,J /;
PARAMETERS:
C(K) / 3I + 4J, 2I + 2J, 2I + 3J /; D(I) / 10 /;
E(I) / 8 /;
F(I) / 10 /;
VARIABLES:
X(K) / >=0 /;
MAXIMIZE Z: X(1) + X(2); SUBJECT TO:
3X(1) + 4X(2) <= D(1);
2X(1) + 2X(2) <= E(1);
2X(1) + 3X(2) <= F(1); ENDSETS
END。
lingo教程(有样例)
![lingo教程(有样例)](https://img.taocdn.com/s3/m/d7f6e218964bcf84b9d57bbe.png)
Lingo 模型Lingo 是较好的最优化建模工具(详细使用说明见Lingo模型参考),Lingo 模型由两部分组成:(一) 目标(objective):最优化目标。
(二)限制条件(constraint). (下载网址:)1.我的食谱由四种食品组成:,果仁巧克力,冰淇淋,可乐,奶酪.一块果仁巧克力价格为50 美分,一杯冰淇淋价格为20美分, 一瓶可乐价格为30美分, 一快奶酪价格为80美分.我每天的营养最低需求: 500 卡路里,6 盎司巧克力,10 盎司〔讲评〕师:该问题的目标是什么?生:食谱中饮食的成本最低师:限制条件?生:满足每天卡路里,巧克力,糖,脂肪的最低需求师:选择哪些变量?生:果仁巧克力,冰淇淋,可乐,奶酪的数量( 参考模型:lingo-LP1.lg4)讨论:如果巧克力冰淇淋的价格变为原来的两倍,食谱将如何改动?练习:1.1.你决意生产两种糖果:硬糖和软糖,糖果仅由糖,坚果,和巧克力制成.你现在有100盎司糖,20盎司坚果,30盎司巧克力.软糖须含有至少20%的坚果.硬糖须含有至少10%的坚果和10%的巧克力.一盎司的软糖售价为25美分, 一盎司的硬糖售价为20美分. 试安排生产计划( 参考模型:lingo-LP1-1.lg4)1.2.某公司生产 A, B, C 三种产品,售价分别为: A, $10;B,$56;C,$100.生产一单位A,需1小时的劳力; 生产一单位 B,需2小时的劳力加上2单位的A; 生产一单位 C,需3小时的劳力加上1单位的B.现有40小时的劳力, 试安排生产计划.( 参考模型:lingo-LP1-2.lg4)2.Donovan公司生产一种电子产品.已知明年四季度的需求(须按时交货):季度1,4000件; 季度2,2000件; 季度3,3000件; 季度4,10000件;公司员工每年有一个季度休假,每个员工年薪为$30,000,每季度最多可生产500件产品.每个季度末公司须为每件存货付存储费$30.公司现有600件产品,如何安排明年的生产?〔讲评〕师:该问题的目标是什么?生:员工年薪与存储费总和最低师:限制条件?生:每季度初的库存与该季度生产量的和须满足该季度的需求师:如何表示员工总数?生甲:各季度上班的员工x(1),x(2),x(3),x(4)总和生乙:甲的总和是员工总数的3倍,因为每个员工工作3个季度。
Lingo超经典案例大全
![Lingo超经典案例大全](https://img.taocdn.com/s3/m/83248ed7370cba1aa8114431b90d6c85ec3a8809.png)
Lingo超经典案例大全Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器〞。
Lingo超强的优化计算能力在许多方面〔线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等〕比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动〔或者不用改动〕便可以直接采纳Lingo语言编程,十分直观。
Lingo模型由4个段构成:〔1〕集合段〔sets endsets〕;〔2〕数据段〔data enddata);(3)初始段〔init endinit〕;〔4〕目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,假如在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合〞是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用处更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x20.001;@abs(x2-1)>0.001;end求得x1=2,x2=2.若再次排除这组解,发觉Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:x1=3,x2=1和x1=2,x2=2.求解模型时需留意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要推断、检验是否还有其他解〔依据具体问题的解的状况或用排除已知最优解的约束条件法〕。
Lingo的应用实例
![Lingo的应用实例](https://img.taocdn.com/s3/m/038fab295627a5e9856a561252d380eb62942388.png)
Lingo应用——旅游路线最短问题题目:从北京乘飞机到东京、纽约、墨西哥城、伦敦、巴黎五个城市做旅游,每个城市去且仅去一次,再回到东京,问如何安排旅游线路,使总旅程最短。
各城市之间的航线距离如下表:运用lingo软件求解模型建立前问题分析:1.这是一个求路线最短的问题,题目给出了两两城市之间的距离,而在最短路线中,这些城市有的两个城市是直接相连接的(即紧接着先后到达的关系),有些城市之间就可能没有这种关系,所以给出的两两城市距离中有些在最后的最短路线距离计算中使用到了,有些则没有用。
这是一个0-1规划的问题,也是一个线性规划的问题。
2.由于每个城市去且仅去一次,最终肯定是形成一个圈的结构,这就导致了这六个城市其中有的两个城市是直接相连的,另外也有两个城市是不连接的。
这就可以考虑设0-1变量,如果两个城市紧接着去旅游的则为1,否则为0。
就如同下图实线代表两个城市相连为1,虚线代表没有相连为03. 因为每个城市只去一次,所以其中任何一个城市的必有且仅有一条进入路线和一条出去的路线。
求解:为了方便解题,给上面六个城市进行编号,如下表(因为北京是起点, 将其标为1)假设:设变量x ij 。
如果x ij =1,则表示城市i 与城市j 直接相连(即先后紧接到达关系),否则若x ij =0,则表示城市i 与城市j 不相连。
特别说明:x ij 和x ji 是同一变量,都表示表示城市i 与城市j 是否有相连的关系。
这里取其中x ij (I<j)的变量。
模型建立:由于这是一个最短路线的问题,且变量已经设好。
目标函数:min z=51*x12+78*x13+68*x14+51*x15+13*x16+56*x23+35*x24+21*x25+60*x26+21*x34+57*x35+70*x36+36*x45+68*x46+61*x56约束条件:1. 上面目标函数中的变量是表示两个城市是否直接相连接的关系,且最短路线是可以形成圈的,如下图实线代表两个城市相连为1,虚线代表没有相连为0如上图城市a和城市b有直接相连接的关系,所以之间变量为1,而城市a 与城市e则没有直接相连接的关系,之间变量为0。
Lingo超经典案例大全
![Lingo超经典案例大全](https://img.taocdn.com/s3/m/44ea55020b4c2e3f5627632f.png)
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo 编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
附1:用LINGO求解线性规划的例子一奶制品加工厂用牛奶生产A1、A2
![附1:用LINGO求解线性规划的例子一奶制品加工厂用牛奶生产A1、A2](https://img.taocdn.com/s3/m/c3ec1635abea998fcc22bcd126fff705cc175c16.png)
附1:用LINGO求解线性规划的例子一奶制品加工厂用牛奶生产A1、A2两种奶制品,1桶牛奶可以在设备甲上用12小时加工成3公斤A1,或者在设备乙上用8小时加工成4公斤A2。
根据市场需求,生产的A1、A2能全部售出,且每公斤A1获利24元,每公斤A2获利16元。
现在加工厂每天能得到50桶牛奶的供应,每天正式工人总的劳动时间为480小时,并且设备甲每天至多能加工100公斤A1,设备乙的加工能力没有限制。
试为该厂制定一个生产计划,使每天获利最大,并进一步讨论以下3个附加问题:1)若用35元可以购买到1桶牛奶,应否作这项投资?若投资,每天最多购买多少桶牛奶?2)若可以聘用临时工人以增加劳动时间,付给临时工人的工资最多是每小时几元?3)由于市场需求变化,每公斤A1的获利增加到30元,应否改变生产计划?数学模型:设每天用x1桶牛奶生产A1 ,用x2桶牛奶生产A2目标函数:设每天获利为z元。
x1桶牛奶可生产3x1公斤A1,获利24*3x,x2桶牛奶可生产4*x2公1斤A2,获利16*4x2,故z=72x1+64x2约束条件:原料供应:生产A1、A2的原料(牛奶)总量不超过每天的供应50桶,即x1+x2≤50劳动时间:生产A1、A2的总加工时间不超过每天正式工人总的劳动时间480小时,即12x1+8x2≤480设备能力:A1的产量不得超过设备甲每天的加工能力100小时,即3x1≤100≥0非负约束:x1、x2均不能为负值,即x1≥0,x2综上所述可得max z=72x1+64x2s.t.x1+x2≤5012x1+8x2≤4803x1≤100x1≥0,x2≥0显然,目标函数和约束条件都是线性的,这是一个线性规划(LP),求出的最优解将给出使净利润最大的生产计划,要讨论的问题需要考虑参数的变化对最优解和影响,一般称为敏感性(或灵敏度)分析。
LINGO求解线性规划用LINGO求解线性规划时,首先在LINGO软件的模型窗口输入一个LP模型,模型以MAX或MIN 开始,按线性规划问题的自然形式输入(见下面例子所示)。
lingo处理实例(多目标问题)-文档资料
![lingo处理实例(多目标问题)-文档资料](https://img.taocdn.com/s3/m/59460ce6376baf1ffd4fad6c.png)
2 方法的选择
• 对问题进行数学描述。(比如A题) • 要有大致方向,不要直接去查题目的关键词,比如
。 直接搜索“股指预测”等等 • 平时要积累,比赛时要多查资料多思考。 • 组内讨论。 • 完整学习已有方法,关键步骤要知道为什么(一些
数学建模辅导
2012年07月19日
常见的问题
1 分析题目以及选题 2 方法的选择 3 模型的体现 4 对问题求解和软件使用 5 论文写作和格式、排版 6 其他
1 分析题目以及选题
• 越熟悉的领域越好??X (学经济的就一定要选择*
题?)
• 觉得越简单越好??X(**题感觉太难。) • 感兴趣很重要 • 挖掘内部的数学问题(A题中的数学) • 抓住主要问题(不要跑题,减速带的设计、不是分析特定类型) • 要有独到的见解和创新的思路(只要讨论量与量的
)。 特殊的回归模型 • 要结合自身条件选择方法,要可求解(偏微)。 • 对以有方法,要能够结合问题特点进行修正(规划
)。 问题、最短路等等,东三省D题
3 模型的体现
• 要有完整的建模过程,达到让人看懂(看不懂, 则白做) • 细致的问题分析(由此给出建立模型的依据,数学建模绝不简单的是用
) 计算机进行数据分析,比如C题 • 精确的提炼出所需变量(A题中需要分析的量) • 问题内在机理(变量之间的关系) • 选择特定方法的原因(比如一般的统计方法的使用都依赖于强烈的问
从LINDO 到 LINGO
如今 LINGO 功能增强,性能稳定,解答结果可靠。 与LINDO相比,LINGO 软件主要具有两大优点:
• 除具有LINDO的全部功能外,还可用于求解非线 性规划问题,包括非线性整数规划问题;
lingo学习实例讲解大全
![lingo学习实例讲解大全](https://img.taocdn.com/s3/m/68364bed102de2bd96058801.png)
§2 LINGO 中的集
对实际问题建模的时候,总会遇到一群或多群相联系的对象,比如工厂、消费者群体、交通 工具和雇工等等。LINGO 允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集, 就可以利用集来最大限度的发挥 LINGO 建模语言的优势。
伯数字(0,1,…,9)组成的总长度不超过 32 个字符的字符串,且不区分大小写。 注意:该命名规则同样适用于集成员名和属性名等的命名。 Member_list 是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和
隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。 ① 当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,
warehouses/wh1..wh6/: capacity; vendors/v1..v8/: demand; links(warehouses,vendors): cost, volume; endsets ! 目标 函数; min=@sum(links: cost*volume); ! 需求 约束; @for(vendors(J):
这里的 member1 是集的第一个成员名,memberN 是集的最末一个成员名。LINGO 将自动产生 中间的所有成员名。LINGO 也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。 列表如下:
隐式成员列表格式
示例
所产生集成员
1..n
1..5
Lingo实验例子
![Lingo实验例子](https://img.taocdn.com/s3/m/e3fd18d09b6648d7c1c746e4.png)
Lingo实验例子(例子来源:《运筹学教程》(第三版)胡运权主编清华大学出版社2007年第三版) 一、线性规划及单纯形法、灵敏度分析例1 P28页例5 Lingo程序:max=2*x1+x2;5*x2<=15;6*x1+2*x2<=24;x1+x2<=5;例2 P44页习题1.7(1)Lingo程序:model:max=2*x1-x2+2*x3;x1+x2+x3>=6;-2*x1+x3>=2;2*x2-x3>=0;end其余课本上的例题和习题同学们自己动手编写程序并进行调试运行,分析运行结果。
二、运输问题例3 P82页例1 Lingo程序:model:sets:gy/g1..g3/:ai;xs/x1..x4/:dj;link(gy,xs):c,x;endsetsdata:ai=16,10,22; dj=8,14,12,14;c=4,12,4,112,10,3,98,5,11,6;enddatamin=@sum(link(i,j):c(i,j)*x(i,j) );@for(gy(i):@sum(xs(j):x(i,j))=ai (i));@for(xs(j):@sum(gy(i):x(i,j))=dj (j));end例4 P98页例5(转运)Lingo程序:model:sets:plant/x1..x5/:produce; customer/y1..y5/:require;link(plant,customer):c,x; endsetsdata:produce=60,90,50,50,50;require=50,50,50,80,70;c=-4,5,3,2,1005,-1,2,100,43,2-3,5,52,100,5-3,6100,4,5,6,-5;enddatamin=@sum(link:c*x);@for(plant(i):@sum(customer(j):x (i,j))=produce(i));@for(customer(j):@sum(plant(i):x (i,j))=require(j));end三、目标规划例5 P108页例2 Lingo程序:第一种做法分三步来完成第一步:考虑目标:min=11Pd-model:min=dminus1;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48; end第二步:考虑目标:min=1122Pd P d-++ model:min=dminus1+dplus2;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48; end第三步:考虑目标:min=112233Pd P d P d-+-++model:min=dminus1+dplus2+dminus3;5*x1+10*x2<=60;x1-2*x2+dminus1-dplus1=0;4*x1+4*x2+dminus2-dplus2=36;6*x1+8*x2+dminus3-dplus3=48;end注意:如果想要在上述各步中进行灵敏度分析,只需按快捷键Ctrl+R就可以得到相应的结果或者采用一个程序进行输值运算:model:sets:level/1..3/:P,z,goal;variable/1..2/:x;h_con_num/1..1/:b;s_con_num/1..3/:g,dplus,dminus; h_cons(h_con_num,variable):A;s_cons(s_con_num,variable):C;obj(level,s_con_num):wplus,wminu s;endsetsdata:P=? ? ?;goal=? ? 0;b=60;g=0 36 48;A=5 10;C=1 -2 4 4 6 8;wplus=0 0 00 1 00 0 0;wminus=1 0 00 0 00 0 1;enddatamin=@sum(level:P*z);@for(level(i):z(i)=@sum(s_con_nu m(j):wplus(i,j)*dplus(j))+@sum(s _con_num(j):wminus(i,j)*dminus(j ))); @for(h_con_num(i):@sum(variable( j):A(i,j)*x(j))<=b(i));@for(s_con_num(i):@sum(variable( j):C(i,j)*x(j))+dminus(i)-dplus( i)=g(i));@for(level(i)|i #lt#@size(level):@bnd(0,z(i),goal(i) ));end例6 P110页例4 Lingo程序:第一种做法分四步来完成第一步:考虑目标:min=11Pd-model:min=dminus1;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第二步:考虑目标:min=1122Pd P d-++model:min=dminus1+dplus2;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第三步:考虑目标:min= 1122335Pd P d P d-+-++model:min=dminus1+dplus2+5*dminus3+3*d minus4;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end第四步:考虑目标:min= 1122334(53)Pd P d P d d-+--+++model:min=dminus1+dplus2+5*dminus3+3*d minus4+dplus1;x1+2*x2+dminus1-dplus1=6;x1+2*x2+dminus2-dplus2=9;x1-2*x2+dminus3-dplus3=4;x2+dminus4-dplus4=2;end注:做到此步后已得到满意解,可不必再往下求解,因为此时第三级优先因子已不能完全满足。
lingo经典例题
![lingo经典例题](https://img.taocdn.com/s3/m/f9bed389112de2bd960590c69ec3d5bbfd0adaa0.png)
lingo经典例题今天咱们来一起看看Lingo的经典例题呀。
比如说有这么一个例子,学校要组织一次春游活动。
老师要安排大巴车来接送同学们。
每辆大巴车能坐50个人。
咱们班有230个同学呢。
那我们就可以用Lingo的思路来想想需要多少辆大巴车。
这就像是把同学们分成一组一组的,每组50个人,看看能分成多少组,要是还有剩下的同学,哪怕就几个,也得再安排一辆车。
那230除以50等于4余30,这剩下的30个同学也得坐一辆车呀,所以一共就需要5辆大巴车啦。
这就有点像Lingo解决问题的感觉,把实际的情况变成数字和计算。
再讲讲另一个例子。
学校的小商店卖铅笔和橡皮。
铅笔一支2元,橡皮一块1元。
小明有10元钱,他想买铅笔和橡皮,他想尽可能多的买东西。
那我们可以这样想,如果都买铅笔,10元可以买5支铅笔就没有钱买橡皮了。
要是买4支铅笔就花了8元,还剩下2元就能买2块橡皮。
这就是一种简单的组合问题,Lingo也能帮助我们找到最好的组合方式呢。
还有一个关于分糖果的例子。
老师拿来了100颗糖果,要分给三个小组。
第一组有20个同学,第二组有30个同学,第三组有25个同学。
我们想让每个同学分到的糖果尽量一样多。
那我们先算出总共有多少个同学,20 + 30 + 25 = 75个同学。
100颗糖果分给75个同学,100除以75约等于1.33颗。
但糖果不能分成小数呀,所以我们可以想办法先每个同学分1颗糖果,这样就分出去了75颗,还剩下25颗糖果。
我们可以再把这25颗糖果分给一些同学,这时候就可以根据小组的人数比例来分啦。
这也是一种Lingo可能会涉及到的分配问题的简单版呢。
这些例子虽然很简单,但是就像Lingo经典例题的小缩影。
Lingo就像是一个聪明的小助手,能帮助我们解决生活里各种各样的数学小难题。
它能让我们把复杂的事情变得简单,就像把一堆乱乱的小珠子,用一根线串起来,变得整整齐齐的。
我们通过这些小例子,就能慢慢理解Lingo是怎么回事啦,小伙伴们是不是也觉得很有趣呢?以后我们再遇到类似的问题,就可以像做游戏一样,用这种思路去解决啦。
LINGO模型实例及求解
![LINGO模型实例及求解](https://img.taocdn.com/s3/m/3b2907ebe45c3b3567ec8bed.png)
j 1
6
cij e j , j 1,2
i 1
决策变量: ci j,(xj,yj)~16维
非线性规划模型
LINGO模型的构成:4个段
集合段(SETS ENDSETS)
数据段(DATA ENDDATA)
LP:移到数据段
初始段(INIT ENDINIT) 目标与 约束段
局部最优:89.8835(吨公里 )
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根。
背包问题
某人打算外出旅游并登山,路程比较远,途中要 坐火车和飞机,考虑要带许多必要的旅游和生活用 品,例如照相机、摄像机、食品、衣服、雨具、书 籍等等,共n件物品,重量分别为ai,而受航空行 李重量限制,以及个人体力所限,能带的行李总重 量为b,n件物品的总重量超过了b,需要裁减,该 旅行者为了决策带哪些物品,对这些物品的重要性 进行了量化,用ci表示,试建立该问题的数学模 型.这个问题称为背包问题(Knapsack Problem).
钢管下料
切割模式
按照客户需要在一根原料钢管上安排切割的一种组合。
4米1根 6米1根
8米1根
余料1米
4米1根 6米1根
典型LINGO循环例子
![典型LINGO循环例子](https://img.taocdn.com/s3/m/3a99c5ccee06eff9aff8075f.png)
例2 运输问题解: 设决策变量ij x = 第i 个发点到第j 个售点的运货量,i =1,2,…m; j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8.设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。
于是形成如下规划问题:nj m i x n j d xm i s x x c ij j n i ij i mj ij m i nj ij ij ,...,2,1,,...,2,1,0 ,...,2,1,,...,2,1, st.z min 1111==>=<==<==∑∑∑∑====把上述程序翻译成LINGO 语言,编制程序如下:!exam_2.lg4 源程序model : !6发点8收点运输问题;sets :rows/1..6/: s; !发点的产量限制;cols/1..8/: d; !售点的需求限制;links(rows,cols): c, x; !运输单价,决策运输量;endsets!-------------------------------------;data:s = 60,55,51,43,41,52;d = 35 37 22 32 41 32 43 38;c = 6 2 6 7 4 2 9 54 95 3 8 5 8 25 2 1 9 7 4 3 37 6 7 3 9 2 7 12 3 9 5 7 2 6 55 5 2 2 8 1 4 3;enddata!------------------------------------;min = @sum(links: c*x); !目标函数=运输总成本;@for(rows(i):@sum(cols(j): x(i,j))<=s(i) ); ! 产量约束;@for(cols(j):@sum(rows(i): x(i,j))=d(j) ); !需求约束;end。
Lingo超经典案例大全
![Lingo超经典案例大全](https://img.taocdn.com/s3/m/ae1d744d4028915f804dc2b2.png)
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为FOR、SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及FOR、SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;gin(x1);gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。
LINGO的一个小例子及相关解释
![LINGO的一个小例子及相关解释](https://img.taocdn.com/s3/m/d3cd7ed7b9f3f90f76c61bca.png)
LINGO的一个小例子及相关解释北航:孔继利第一部分:在LINGO Model窗口,键入如下的最优化模型:!目标函数;max=100*x+150*y;!约束条件;x<=80;y<=100;x*2+y<=180;1.从中可以看出,最优化模型包含三个要素:目标函数、变量、约束。
2.在LINGO的模型中,每一行都必须要用一个分号结尾。
如果没有这些分号,模型将无法求解。
3. LINGO模型的一个表达式可以分几行输入,但是表达式必须用一个分号结束。
如:max=100*x+150*y;4.在LINGO中为了提高模型的可读性,需要增加注释。
注释以“!”开始,以“;”结束。
5. LINGO不区分字母的大小写。
6. LINGO中的变量名都必须用字母A~Z开始,接下来是其他字符、数字或底线。
第二部分:点击“solve”按钮,在编译不出错的情况下,将给出“求解状态窗口”和“模型解答报告”。
该模型的“求解状态窗口”的如下图:其中,变量框(Variables)显示的是变量的总数。
它也显示非线性变量和整数变量的个数。
一般,非线性变量和整数变量的个数越多,求解越困难,耗费的时间越多。
模型中变量的数目不包含取定值的变量。
约束框(Constraints)显示的是模型约束的总数和非线性约束的总数。
非零框(Nonzeros)显示的是模型中非零系数的总数和非线性变量中非零系数的总数。
内存显示框(Memory Used)显示正在使用的模型所需的内存大小。
耗用时间框(Elapsed Runtime)显示用于编译和求解模型所需的时间。
最优状态框(Optimizer Status)显示最优解得状态。
State(状态):给出现行解的状态。
可能的结果有“全局最优解”、“局部最优解”、“可行解”、“不可行解”、“无界解”、“中断”和“未定”。
Iterations(跌代):求解的跌代次数。
Infeasibility(不可行):矛盾约束的数目。
管理运筹学lindo案例分析
![管理运筹学lindo案例分析](https://img.taocdn.com/s3/m/b56438e9fad6195f302ba682.png)
管理运筹学lindo案例分析(a)Lindo的数据分析及习题(a)灵敏性分析〔Range,Ctrl+R〕用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么围〔此时假定其它系数不变〕时,最优基保持不变。
灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。
为了激活灵敏性分析,运行LINGO|Options…,选择General Solver Tab,在Dual putations列表框中,选择Prices and Ranges选项。
灵敏性分析消耗相当多的求解时间,因此当速度很关键时,就没有必要激活它。
下面我们看一个简单的具体例子。
例5.1某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。
生产数据如下表所示:用DESKS、TABLES和CHAIRS分别表示三种产品的生产量,建立LP模型。
max=60*desks+30*tables+20*chairs;8*desks+6*tables+chairs<=48;4*desks+2*tables+1.5*chairs<=20;2*desks+1.5*tables+.5*chairs<=8;tables<=5;求解这个模型,并激活灵敏性分析。
这时,查看报告窗口〔Reports Window〕,可以看到如下结果。
Global optimal solution found at iteration: 3Objective value: 280.0000Variable Value Reduced CostDESKS 2.000000 0.000000TABLES 0.000000 5.000000CHAIRS 8.000000 0.000000Row Slack or Surplus Dual Price1 280.0000 1.0000002 24.00000 0.0000003 0.000000 10.000004 0.000000 10.000005 5.000000 0.000000“Global optimal solution found at iteration: 3〞表示3次迭代后得到全局最优解。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Lingo超经典案例大全LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”。
Lingo超强的优化计算能力在很多方面(线性规划、非线性规划、线性整数规划、非线性整数规划、非线性混合规划、二次规划等)比matlab、maple等强得多,Lingo编程简洁明了,数学模型不用做大的改动(或者不用改动)便可以直接采用Lingo语言编程,十分直观。
Lingo模型由4个段构成:(1)集合段(sets endsets);(2)数据段(data enddata);(3)初始段(init endinit);(4)目标与约束段。
Lingo的五大优点:1. 对大规模数学规划,LINGO语言所建模型较简洁,语句不多;2. 模型易于扩展,因为@FOR、@SUM等语句并没有指定循环或求和的上下限,如果在集合定义部分增加集合成员的个数,则循环或求和自然扩展,不需要改动目标函数和约束条件;3. 数据初始化部分与其它部分语句分开,对同一模型用不同数据来计算时,只需改动数据部分即可,其它语句不变;4. “集合”是LINGO有特色的概念,它把实际问题中的事物与数学变量及常量联系起来,是实际问题到数学量的抽象,它比C语言中的数组用途更为广泛。
5. 使用了集合以及@FOR、@SUM等集合操作函数以后可以用简洁的语句表达出常见的规划模型中的目标函数和约束条件,即使模型有大量决策变量和大量数据,组成模型的语句并不随之增加.一、求解线性整数规划、非线性整数规划问题:1.线性整数规划:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);end求得x1=3,x2=1,最大值为4.运用matlab求时可以发现有两组解:x1=3,x2=1和x1=2,x2=2。
通过验证也可知这两组解均满足。
Lingo的一个缺陷是:每次只能输出最优解中的一个(有时不只一个)。
那么,怎样求得其他解呢?一个办法是将求得的解作为约束条件,约束x1不等于3,x2不等于1,再求解。
如下:model:max=x1+x2;x1+9/14*x2<=51/14;-2*x1+x2<=1/3;@gin(x1);@gin(x2);@abs(x1-3)>0.001;@abs(x2-1)>0.001;end求得x1=2,x2=2.若再次排除这组解,发现Lingo解不出第三组解了,这时我们可以断定:此优化模型有两组解:x1=3,x2=1和x1=2,x2=2.求解模型时需注意:Lingo中,默认变量均为非负;输出的解可能是最优解中的一组,要判断、检验是否还有其他解(根据具体问题的解的情况或用排除已知最优解的约束条件法)。
2、非线性整数规划:model:sets:row/1..4/:b;col/1..5/:c1,c2,x;link(row,col):a;endsetsdata:c1=1,1,3,4,2;c2=-8,-2,-3,-1,-2;a=1 1 1 1 11 2 2 1 62 1 6 0 00 0 1 1 5;b=400,800,200,200;enddatamax=@sum(col:c1*x^2+c2*x);@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));@for(col:@gin(x));@for(col:@bnd(0,x,99));End求得:x1=50,x2=99,x3=0,x4=99,x5=20.最大值为51568。
这里,我们看不出是否还有其他解,需要将已知的最优解排除掉。
利用1的方法分别可得到其他解:x1=48,x2=98,x3=1,x4=98,x5=19.最大值为50330。
x1=45,x2=97,x3=2,x4=97,x5=18.最大值为49037。
x1=43,x2=96,x3=3,x4=96,x5=17.最大值为47859。
x1=40,x2=95,x3=4,x4=95,x5=16.最大值为46636。
......发现x1,x2,x4,x5均单调减少,x3单调增加。
最大值越来越小。
可以简单判断第一组为最优的。
当然,能够一一检验最好。
二、最优选择问题某钻井队要从10个可供选择的井位中确定5个钻井探油,使总的钻探费用为最小。
若10个井位的代号为s1,s2,...,s10,相应的钻探费用c1,c2,...,c10为5,8,10,6,9,5,7,6,10,8.并且井位选择上要满足下列限制条件:(1)或选择s1和s7,或选择钻探s9;(2)选择了s3或s4就不能选s5,或反过来也一样;(3)在s5,s6,s7,s8中最多只能选两个.试建立这个问题的整数规划模型,确定选择的井位。
取0-1变量s_i,若s_i=1,则表示选取第i个井,若s_i=0,则表示不选取第i个井。
建立数学模型如下:model:sets:variables/1..10/:s,cost;endsetsdata:cost=5 8 10 6 9 5 7 6 10 8;enddatamin=@sum(variables:cost*s);(s(1)+s(7)-2)*(s(9)-1)=0;s(3)*s(5)+s(4)*s(5)=0;@sum(variables(i)|i#ge#5#and#i#le#8:s(i))<=2;@sum(variables:s)=5;@for(variables:@bin(s));end求得:Total solveriterations: 26Variable Val ue Reduced CostS( 1) 1.000000 -4.000000S( 2) 1.0000 00 0.000000S( 3) 0.0000 00 2.000000S( 4) 1.0000 00 -2.000000S( 5) 0.0000 00 0.000000S( 6) 1.0000 00 -1.000000S( 7) 1.0000 00 0.000000S( 8) 0.0000 00 0.000000S( 9) 0.0000 00 2.000000S( 10) 0.00000 0 0.000000Objectivevalue: 31.00000即选择井S1,S2,S4,S6,S7以达到最小费用31.三、路径和最短问题:设平面上有N个点,求一点,使得这个点到所有点距离之和最小。
这里,取N=8。
数据点是1~5的随机数。
Lingo:model:sets:position/1..8/:x,y;ab/1/:a,b;endsetsdata:@text('E:\matlab7.0\work\data.txt')=x,y;!读入到matlab的工作空间中;@text('E:\matlab7.0\work\data1.txt')=a,b;enddatax(1)=1+4*@rand(0.12345);y(1)=1+4*@rand(0.25);@for(position(i)|i#ge#2:x(i)=1+4*@rand(x(i-1)));!随机产生1~5中的8个点;@for(position(i)|i#ge#2:y(i)=1+4*@rand(y(i-1)));[obj]min=@sum(position(i):@sqrt((x(i)-a(1))^2+(y(i)-b(1))^2));!目标函数;@bnd(1,a(1),5);@bnd(1,b(1),5);endmatlab:clear;clc;close all;load('data.txt');load('data1.txt');hold on;plot(data1(1),data1(2),'o','MarkerSize',15,'MarkerFaceColor','r');plot(data(:,1),data(:,2),'or','MarkerSize',15,'MarkerFaceColor','b');set(gcf,'Color','w');set(gca,'FontSize',16)grid off;data1=repmat(data1,8,1);P=[data1(:,1)';data(:,1)'];Q=[data1(:,2)';data(:,2)'];plot(P,Q,'g','LineWidth',2);xlabel('x');ylabel('y');title('Solving the problem of the minimun distance of tne sum of all the blue points towards the being known red point.');gtext(['The minimun distance is',num2str(10.2685),'.'],'FontSize',16,'Color','r');三、运输+选址问题:某公司有6个建筑工地,位置坐标为(ai, bi) (单位:公里),水泥日用量di (单位:吨)i 1 2 3 45 6a 1.25 8.75 0.5 5.753 7.25b 1.25 0.75 4.75 56.57.75d 3 5 4 76 11(1)现有2料场,位于A (5, 1), B (2, 7),记(x j,y j),j=1,2, 日储量e j各有20吨。
假设料场和工地之间有直线道路,制定每天的供应计划,即从A, B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。
取决策变量c_ij表示i工地从j料场运来的水泥量。
模型(线性模型)为:model:sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25 8.75 0.5 5.75 3 7.25;b=1.25 0.75 4.75 5 6.5 7.75;d=3 5 4 7 6 11;x=5 2;y=1 7;e=20 20;enddata[obj]min=@sum(link(i,j):c(i,j)*@sqrt((a(i)-x(j))^2+(b(i)-y(j))^2));!目标函数; @for(demand(i):@sum(supply(j):c(i,j))=d(i));@for(supply(j):@sum(demand(i):c(i,j))<=e(j));end求得:C( 1, 1) 3.000000C( 1, 2) 0.000000C( 2, 1) 5.000000C( 2, 2) 0.000000C( 3, 1) 0.000000C( 3,2) 4.000000C( 4,1) 7.0000002) 0.000000C( 5,1) 0.000000C( 5,2) 6.000000C( 6,1) 1.000000C( 6, 2) 10.00000Objective value: 136.2275(2)改建两个新料场,需要确定新料场位置(xj,yj)和运量cij ,在其它条件不变下使总吨公里数最小。