LINGO语言应用讲座.docx
- 文档编号:5127109
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:13
- 大小:112.37KB
LINGO语言应用讲座.docx
《LINGO语言应用讲座.docx》由会员分享,可在线阅读,更多相关《LINGO语言应用讲座.docx(13页珍藏版)》请在冰豆网上搜索。
LINGO语言应用讲座
LINGO语言应用讲座
(一)
Lingo解方程、求极值以及简单规划问题
例1求解非线性方程组
其LINGO代码如下:
model:
x^2+y^2=2;
2*x^2+x+y^2+y=4;
@bnd(0.4,x,0.5);@bnd(1,y,2);
end
例2某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日(1个工人工作8小时称为1个劳动日)进行调试、检测等工作,而美国P产品需要2个劳动日,该厂工人每天共计能提供160劳动日,假如原材料等其他条件不受限制,问应如何安排生产计划,才能使获得的利润最大?
解设两种产品的生产量分别为
和
,则该问题的数学模型为
目标函数
.
约束条件
其LINGO代码如下:
Model:
MAX=200*X1+300*X2;
X1<=100;
X2<=120;
X1+2*X2<=160;
End
Globaloptimalsolutionfound.
Objectivevalue:
29000.00
Totalsolveriterations:
0
VariableValueReducedCost
X1100.00000.
X230.000000.
RowSlackorSurplusDualPrice
129000.001.
20.50.00000
390.000000.
40.150.0000
该报告说明:
运行2步找到全局最优解,目标函数值为29000,变量值分别为X1=100,X2=30.
“ReducedCost”的含义是缩减成本系数(最优解中变量的RedcedCost值自动取零),“Row”是输入模型中的行号,“SlackorSurplus”的意思为松弛或剩余,即约束条件左边与右边的差值,对于“<=”不等式,左边减右边的差值称为Surplus(剩余),当约束条件的两边相等时,松弛或剩余的值为零,如果约束条件无法满足,即没有可行解,则松弛或剩余的值为负数.“Dualprice”的意思是影子价格,上面报告中Row2的松弛值为0,意思是第二行的约束条件,即第一条生产线的最大生产能力已经到达饱和状态(100个),影子价格为50,含义是:
如果该生产线最大生产能力增加1,能使目标函数值,即利润增加50,;报告中Row3的松弛值为90,表示按照最优解安排生产(X20=30),则第三行的约束条件,即第条生产线的最大值不起作用,故影子价格为0;
例3求解非线性规划问题
,
其LINGO代码如下:
Model:
Max=x1^(1/2)+x2^(1/2)+x3^(1/2)+x4^(1/2);
x1<=400;
1.1*x1+x2<=440;
1.21*x1+1.1*x2+x3<=484;
1.33*x1+1.21*x2+1.1*x3+x4<=532.4;
end
例4.求函数
在区间(0.2,4)内的极小点和极小值以及极大值点和极大值.
Model:
Max=(x^3+1.5*@cos(x)+x*@log(x))*@exp(-x);
@bnd(0.2,x,4);
end
Model:
Min=(x^3+1.5*@cos(x)+x*@log(x))*@exp(-x);
@bnd(0.2,x,4);
end
例5基金的优化使用(2001年数学建模竞赛题).
假设某校基金会得到了一笔数额为M万元的基金,打算将其存入银行,小基金会计划在n年内每年用部分本息奖励优秀师生,要求每年的奖金额相同,且在n年末仍保留原基金数额.银行存款税后年利率见表1.1.2.
表1.1.2银行存款税后利率表
存期
1年
2年
3年
5年
税后年利率/%
1.8
2.16
2.592
2.88
校基金会希望获得最佳的基金使用计划,以提高每年的奖金额,请在M=5000万元、n=5年的情况下设计具体存款方案.
解分析:
假设首次发放奖金的时间是在基金到位后一年,一行每隔一年发放一次,每年发放的时间大致相同,小基金会希望获得最佳的基金使用计划,一提高每年的奖金额,且在n年末仍保留原基金数额M,实际上n年中发放的奖金总额全部来自与利息.如果全部基金都存为一年定期,每年都用到期利息发放奖金,则每年的奖金数为5000*0.018=90万,这是没有优化的存款方案.显然,准备在两年后使用的款项应当存成两年定期,必存两次一年定期的收益高,以此类推.目标是合理分配基金的存款方案,使得n年的利息总额最多.
定义收益比
.按照银行存款税后利率表计算得到个存款年限对应的最优收益比见表1.1.3.
表1.1.3各存款年限对应的最优收益比
存期年限
1年
2年
3年
4年(3+1方式)
5年
最优收益比
1.018
1.0432
1.07776
1.
1.144
经分析得到两点结论:
(1)一次性存成最长期,优于两个(或两个以上)较短期的组合(中途转存).
(2)当存款年限需要组合时,收益比与组合的先后次序无关.
建立模型把总基金M分成5+1份,分别用
表示,其中
分别存成1-5年定期,到期后本息合计用于当年发放奖金,
存5年定期,到期的本息合计等于原基金总数M.用S表示每年用于奖励优秀师生的奖金额,用
表示第i年的最优收益比.
目标函数是每年的奖金额最大,即maxS.
约束条件有3个:
①各年度的奖金数额相等;②奖金总数为M;③n年末保留原基金总额M.
于是得到模型如下:
maxS,
(1.1.2)
这是线性规划模型,用LINGO软件求解,令M=5000,编写程序如下:
其LINGO代码如下:
MAX=S;
1.018*x1=S;
1.0432*x2=S;
1.07776*x3=S;
1.07776*1.018*x4=S;
1.144*x5=S;
1.144*x6=M;
M=5000;
X1+x2+x3+x4+x5+x6=M;
Globaloptimalsolutionfound.
Objectivevalue:
135.2227
Totalsolveriterations:
0
VariableValueReducedCost
S135.22270.
X1132.83170.
X2129.62300.
X3125.46640.
X4123.24790.
X5118.20160.
X64370.6290.
M5000.0000.
RowSlackorSurplusDualPrice
1135.22271.
20.-0.
30.-0.
40.-0.
50.-0.
60.-0.
70.-0.
80.0.
90.0.
例6某公司6个供货栈,库存货物总数分别为60,55,51,43,41,52,现由8个客户各要一批货,数量分别为35,37,22,32,42,32,43,38,各供货栈到8个客户处的单位货物运输价见表2
表2供货栈到客户的单位货物运价(元/每单位)
客户货栈
V1
V2
V3
V4
V5
V6
V7
V8
W1
6
2
6
7
4
2
5
9
W2
4
9
5
3
8
5
8
2
W3
5
2
1
9
7
4
3
3
W4
7
6
7
3
9
2
7
1
W5
2
3
9
5
7
2
6
5
W6
5
5
2
2
8
1
4
3
试确定各货栈到各客户的货物调运数量,使总的运费最小.
解引入决策变量
,代表从第i个货栈到第j个客户的货物运量.用符号
表示从第i个货栈到第j个客户的单位货物运价,
表示第i个货栈的最大供货量,
表示第j个客户的订货量.
目标函数是总运输费用最小.
约束条件有三条:
①各货栈运出的货物总量不超过其库存数;②各客户收到的货物总量等于其订货数量;③决策变量
非负.
则本问题的数学模型为:
,
(1.2.1)
1.集合定义部分
LINGO将集合(SET)的概念引入建模语言,集合是一组相关对象构成的组合,代表模型中的实际事物,并于数学变量及常量联系起来,是实际问题到数学的抽象.例1.2.1中的6个仓库可以看成是一个集合,8个客户可以看成另外一个集合.
每个集合在使用之前需要预先给出定义,定义集合时要明确三方面内容:
集合的名称、集合内的成员(组成集合的个体,也称元素)、集合的属性(可以看成是与该集合有关的变量或常量,相当于数组).本例先定义仓库集合:
WH/W1..W6/AI;
其中WH是集合的名称,W1..W6是集合内的成员,“..”是特定的省略号(如果不用省略号,也可以把成员一一列出来,成员之间用逗号或空格分开),表明该集合有个成员,分别对应6个货栈,AI是集合的属性,它可以看成是一个一维数组,有6个分量,分别表示各货栈现有货物的总数.
集合、成员、属性的命名规则与变量相同,可按自己的意愿,用有一定意义的字母数字串来表示,式中“/”和“/:
”是规定的语法规则.
本例还定义客户集合:
VD/V1..V8/DJ;
该集合有8个成员,DJ是集合的属性(有8个分量)表示各客户的需求量.
以上两个集合称为初始集合(或称基本集合,原始集合),初始集合的属性都相当一维数组.
为了表示数学模型中从货栈到客户的运输关系以及与此相关的运输单价
和运量
,再定义一个表示运输关系(路线)的集合:
LINKS(WH,VD):
C,X;
该集合以初始集合WH和VD为基础,称为衍生集合(或称派生集合).C和X是该衍生集合的两个属性.衍生集合的定义语句有如下要素组成:
(1)集合的名称;
(2)对应的初始集合;
(3)集合的成员(可以省略不写明);
(4)集合的属性(可以没有).
定义衍生集合时可以用罗列的方式将衍生集合的成员一一列出来,如果省略不写,则默认衍生集合的成员取它所对应初始集合的所有可能的组合,上述衍生集合LINKS的定义中没有指明成员,而它对应的初始集合WH有6个成员,VD有8个成员,因此LINKS成员取WH和VD的所有可能组合,即集合LINKS有48个成员,48个成员可以排列成一个矩阵,其行数与集合WH的成员个数相等,列数与VD的成员个数相等.相应地,集合LINKS的属性C和X都相当于二维数组,各有48个分量,C表示货栈
到客户
的单位货物运价,X表示货栈
到客户
的运量.
本模型完整的集合定义为:
SETS:
WH/W1..W6/:
AI;
VD/V1..V8/:
DJ;
LINKS(WH,VD):
C:
X;
ENDSETS
注集合定义部分以语句SETS:
开始,一语句ENDSETS结束,这两个语句必须单独成一行.ENDSETS后面不加标点符号.
2.数据初始化(数据段)
以上集合中属性X(有48个分量)是决策变量,是待求未知数,属性AI、DJ和C(分别有6,8,48个分量)都是已知数,LINGO建模语言通过数据初始化部分来实现对已知属性赋以初始值,格式为:
DATA:
AI=60,55,43,41,52;
DJ=35,37,22,32,41,32,43,38;
C=6,2,6,7,4,2,5,9
4,9,5,3,8,5,8,2
5,2,1,9,7,4,3,3
7,6,7,3,9,2,7,1
2,3,9,5,7,2,6,5
5,5,2,2,8,1,4,3;
ENDDATA
注数据初始化部分以语句DATA:
开始,以语句ENDDATA结束,这两个语句必须单独成一行.数据之间的逗号和空格可以互相替换.
3.目标函数和约束条件
目标函数表达式
用LINGO语句表示为:
MIN=@SUM(LINKS(I,J):
C(I,J)*X(I,J));
式中@SUM是LINGO提供的内部函数,其作用是对某个集合的所有成员,求指定表达式的和,该函数需要两个参数,第一个参数是集合名称,指定对该集合的所有成员求和,如果此集合是一个初始集合,它有m个成员,则求和运算对这m个成员进行,相当于求
,第二个参数是一个表达式,表示求和运算对该表达式进行.此处@SUM的第一个参数是LINKS(I,J),表达式求和运算对衍生集合LINKS进行,该集合的维数是2,共有48个成员,运算规则是:
先对48个成员分别求表达式C(I,J)*X(I,J)的值,然后求和,相当于求
,表达式中的C和X是集合LINKS的两个属性,它们各有48个分量.
注如果表达式中参与运算的属性属于同一个集合,则@SUM语句中索引(相当于矩阵或数组的下标)可以省略(隐藏),假如表达式中参与运算的属性属于不同的集合,则不能省略属性的索引.本例的目标函数可以表示成:
MIN=(LINKS:
C*X);
约束条件
实际上表示了6个表达式,用LINGO语言表示该约束条件,语句为:
@FOR(WH(I):
@SUM(VD(J):
X(I,J))<=AI(I));
语句中的@FOR是LINGO提供的内部函数,它的作用是对某个集合的所有成员分别生成一个约束表达式,它有两个参数,第一个参数为WH,它表示货栈,共有6个成员,故应生成6个约束表达式,@FOR的第二个参数为是约束表达式的具体内容,此处再调用@SUM函数,表示约束表达式的左边求和,是对集合VD的8个成员,并且对表达式X(I,J)中第二维J求和,即
,约束表达式的右边是集合WH的属性AI,它有个约束表达式一一对应.本语句中的属性分别属于不同的集合,所以不能省略索引I,J.
注@SUM和@FOR函数可以嵌套使用.
同样地,约束条件
用LINGO语句表示为:
@FOR(VD(J):
@SUM(WH(I):
X(I,J))=DJ(J));
4.完整的模型
综上所述,本问题完整的LINGO模型如下:
MODEL:
SETS:
WH/W1..W6/:
AI;VD/V1..V8/:
DJ;
LINKS(WH,VD):
C,X;
ENDSETS
DATA:
AI=60,55,43,41,52;
DJ=35,37,22,32,41,32,43,38;
C=6,2,6,7,4,2,5,9
4,9,5,3,8,5,8,2
5,2,1,9,7,4,3,3
7,6,7,3,9,2,7,1
2,3,9,5,7,2,6,5
5,5,2,2,8,1,4,3;
ENDDATA
MIN=@SUM(LINKS(I,J):
C(I,J)*X(I,J));!
目标函数;
@FOR(WH(I):
@SUM(VD(J):
X(I,J))<=AI(I));!
约束条件;
@FOR(VD(J):
@SUM(WH(I):
X(I,J))=DJ(J));
END
注LINGO模型以语句MODEL:
开始,以语句END结束,这两个语句单独成一行.完整的模型由集合定义、数据段、目标函数和约束条件等部分所组成,这几个部分的先后次序无关紧要,!
开头的语句是注释语句(可有可无).
选菜单Lingo|Solve(或按Ctrl+S),或鼠标点击“求解”按钮,在“SolutionReport”信息窗口中,看到具体求解结果为:
Globaloptimalsolutionfoundatstep:
17(计算步骤数)
Objectivevalue:
664.0000(目标函数值)
VariableValueReducedCost
(以下是调运方案)X(W1,V1)0.5.
X(W1,V2)19.000000.
……
(以上省略了X(W1,V3)至X(W6,V6)的具体数值)
X(W6,V7)3.0.
X(W6,V8)0.3.
计算结果表明:
目标函数值为664.0000,最优运输方案见表1.2.2.
表1.2.2最优运输方案
V1
V2
V3
V4
V5
V6
V7
V8
合计
W1
0
19
0
0
41
0
0
0
60
W2
1
0
0
32
0
0
0
0
33
W3
0
11
0
0
0
0
40
0
51
W4
0
0
0
0
0
5
0
38
43
W5
34
7
0
0
0
0
0
0
41
W6
0
0
22
0
0
27
3
0
52
合计
35
37
22
32
41
32
43
38
问题:
1.用LINGO求解下列方程组的所有实数解:
(1)
(2)
2.已知方程组
且
,其中x,y是变量,u是常数,问u在什么范围内时该方程组有解?
若u=1.2,求该方程组的解.
3.用LINGO求解下列线性规划:
(1)
,
(2)
,
4.求解下列非线性规划:
(1)
,
5.用LINGO求函数
在区间(2,8)内的极小值点和极小值
6.求函数
在区间(0.2,4)内的极小点和极小值以及极大值点和极大值.
.(提示:
sinx表示为@sin(x),cosx示为@cos(x),lnx表示为@log(x),ex表示为@exp(x))
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- LINGO 语言 应用 讲座