数学模型实验3 Lingo求解非线性规划问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数学模型 实验3、LINGO 求解非线性优化模型
一、实验目的
掌握Lingo 软件求解非线性优化模型的基本用法,对于实际建模问题,能够利用数学规划建立模型,并能利用Lingo 软件进行求解。 二、实验原理及方法
Lingo 是美国LINDO 系统公司推出的求解最优化问题的专业软件包.它在求解各种大型线性、非线性和整数规划方面具有明显的优势. Lingo 具有演示(试用)版、学生版、高级版、超级版、工业版、扩展版等不同版本,不同版本的求解问题规模和选件不同.。
启动Lingo 后,在主窗口上弹出标题为”Lingo Model-Lingo1”的窗口,称为模型窗口(通常称Lingo 程序为模型),如下图所示,用于输入模型,可以在该窗口用基本类似于数学公式的形式输入小型的数学规划模型.
例1 如何在LINGO 中求解如下的LP 问题:
,6002100
350.
.32min 21211
2121≥≤+≥≥++x x x x x x x t s x x
实验步骤:
先在模型窗口中输入如下模型(代码): min=2*x1+3*x2; x1+x2>=350; x1>=100;
2*x1+x2<=600;
然后选菜单Lingo|solve(或按Ctrl+S),或用鼠标点击”求解”按钮,得到如下求解报告:
Global optimal solution found at iteration: 4 Objective value: 800.0000
Variable Value Reduced Cost X1 250.0000 0.000000 X2 100.0000 0.000000 Row Slack or Surplus Dual Price 1 800.0000 -1.000000 2 0.000000 -4.000000 3 150.0000 0.000000
即最优解为x1=250,x2=100,最优值为800。 Lingo 模型的几个说明:
1、Lingo 默认所有的决策变量都非负,故变量非负条件不必输入,Lingo 的语法规定: (1)求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示; (2)每个语句必须以分号“;”结束,每行可以有多个语句,语句可以跨行;
(3)变量名称必须以字母(A~Z )开头,由字母]、数字(0~9)和下划线所组成,长度不超过32个字符,不区分大小写;
(4)可以给语句加上标号,例如[OBJ] MAX=200*x1+300*x2; (5)以!开头,以”;”结束的语句是注释语句;
(6)如果对变量的取值范围没有作特殊要求的话,则默认所有的变量的取值都非负;
(7)Lingo 模型以语句”Model:”开始,以”End ”结束,对于比较简单的模型,这两个语句可以省略.
2、选菜单File|save as 将输入的模型存盘,默认文件格式的扩展名为.lg4,这是一种特殊的二进制格式,保存了模型窗口中的所有文本和其它对象以及格式信息,只有Lingo 能读懂它.
3、选菜单Lingo|solve(或按Ctrl+S),或用鼠标点击”求解”按钮时,如果模型有语法错误,则会弹出一个标题为”Lingo Error Message ”的窗口,指出错误在哪一行,有怎样的错误等信息,如果语法通过,Lingo 用内部所带的求解程序求出模型的解,然后弹出一个标题为”Lingo Solve Statas ”的窗口,其内容为变量的个数、约束条件的个数、优化状态、非零变量个数、耗费内存、所花时间等信息,点击Close 关闭该窗口,屏幕上出现标题为”Solution Report ”的信息窗口,显示优化计算的步数、最优目标函数值、最优解等信息.
例题2(钢管下料问题). 某钢管零售商从钢管厂进货,将钢管按照顾客的要求切割出售.从钢管厂进货得到的原材料的钢管的长度都是19m ,
现在一顾客需要50根4m ,20根6m ,15根8m ,此外还需要10根5 m 的钢管,为了简化生产过程,规定所使用的切割模式的种类不能超过3种,应如何下料?
解:设第I 种切割模式切割的根数为(,,)i x i =123,第I 种切割模式下切割成4m,6m,8m,5m 的数量分别为
,,,(,,)i i i i r r r r i =1234123,使用的频率由低到高,故有x x x >>123.令
由题意得到:
```min +..;;;;
;;;
x x x s t
r x r x r x r x r x r x r x r x r x r x r x r x r r r r r r r r r r r r +++≥++≥++≥++≥≤+++≤≤+++≤≤+++≤123
1112123131212223231312323331412423431112131421222324313233345020151016468519164685191619;
x x x ≤++≤1232631
model : sets :
qiege/1..3/:x; demand/1..4/:b,n; links(qiege,demand):r; endsets data : b=4,6,8,5; n=50,20,15,10; enddata
min =@sum (qiege(i):x(i));
@for (demand(j):@sum (qiege(i):x(i)*r(i,j))>=n(j);); @for (qiege(i):@sum (demand(j):b(j)*r(i,j))<=19;);
@for (qiege(i):@sum (demand(j):b(j)*r(i,j))>=16;); @for (qiege(i)|i#LE#2:x(i+1)<=x(i)); @sum (qiege(i):x(i))>=26; @sum (qiege(i):x(i))<=31;
@for (qiege:@gin (x);); @for (links:@gin (r)); end
运行得到:
Local optimal solution found.
Objective value: 28.00000 Objective bound: 28.00000 Infeasibilities: 0.000000 Extended solver steps: 34 Total solver iterations: 3506
Model Class: PINLP