第一范文网 - 专业文章范例文档资料分享平台

第10章 Lingo软件包及其应用

来源:用户分享 时间:2025/5/21 1:18:35 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

x?7.32835

,x?8.26383),Lingo软件包只能求出一个根。

§9.3 应用Lingo软件包求解大型优化问题

(1)关于数据的输入

Lingo软件包的一大特点是,可以调用外部已有的大型数据进行优化计算,这些数据可以是以Excel格式存盘,也可以是以TEXT文本格式存盘,或者是数据库中的已有数据。

在Lingo软件包中,调用外部数据的函数有: @FILE( 'filename') 调用TEXT文本数据;

@OLE( 'spreadsheet_file'[, range_name_list]) 调用以Excel格式存盘的数据,其中range_name_list表示Excel数据的范围。

@ODBC(['data_source'[, 'table_name'[, 'col_1'[, 'col_2' ...]]]]) 调用数据库中的数据文件。

例10-8 在Lingo软件包中,数据部分可以如下编写程序: ① data:

c=@file(‘f:\\pianai.tex’); enddata ② data:

ca=@file(‘d:\\b.txt’); a=@ole(‘d:\\data.xls’,ca); enddata

其中ca表示Excel数据的取值范围。

(2)关于集的定义 ①定义向量

在Lingo软件包中,以下列格式定义向量: 集合名称/集合的维数/:向量名称 例如:

set1/1..3/:x,y; set2/1..4/:a,b;

表示定义了第一类集合set1,维数是3,具体向量名称为x和y,即,定义了

x?(x1,x2,x3)和y?(y1,y2,y3)

同时定义了第二类集合set2,维数是4,具体向量名称为a和b,即,定义了

a?(a1,a2,a3,a4)和b?(b1,b2,b3,b4)

②定义矩阵

在Lingo软件包中,利用已经定义的向量来定义矩阵,格式为:

9

矩阵名称(集合名称1,集合名称2)/:矩阵名称 例如:

set1/1..3/:x,y; set2/1..4/:a,b;

link(set1,set2)/:A, Q;

表示定义了3×4阶的矩阵link,具体矩阵的名称为A和Q

③定义超级矩阵

下面的程序定义了一个2×3×2的超级矩阵x: sets:

student/A,B/; class/1..3/;

subject/Math,English/;

score(student,class,subject):x; endsets

执行后得到结果:

Feasible solution found at iteration: 0 Variable Value

X( A, 1, MATH) 1.234568 X( A, 1, ENGLISH) 1.234568 X( A, 2, MATH) 1.234568 X( A, 2, ENGLISH) 1.234568 X( A, 3, MATH) 1.234568 X( A, 3, ENGLISH) 1.234568 X( B, 1, MATH) 1.234568 X( B, 1, ENGLISH) 1.234568 X( B, 2, MATH) 1.234568 X( B, 2, ENGLISH) 1.234568 X( B, 3, MATH) 1.234568 X( B, 3, ENGLISH) 1.234568

其中Value的值是随机取值的,在具体问题中需要使用Data命令赋值。

例10-9 在Lingo软件包中,求解下列不等式组:

?70a???40?100??70??;b???100140??40??;x??x1,x2??0;y??y1,y2??0; ?140?x1?x2?1;y1?y2?1; x.a.yx.b.yTT?ai.y?x.bjT

其中,ai表示矩阵a的第i行,bj表示矩阵b的第j列。 解:在Lingo软件包中,编写程序如下:

10

model: sets:

set1/1..2/:x; set2/1..2/:y;

link(set1,set2):a,b; endsets

@for(set1(i):@sum(set1(k):x(k))=1); @for(set2(j):@sum(set2(k):y(k))=1);

@for(link(i,j):@sum(link(p,q):x(p)*a(p,q)*y(q))

>=@sum(link(i,q):a(i,q)*y(q)));

@for(link(i,j):@sum(link(p,q):x(p)*b(p,q)*y(q))

>=@sum(link(t,j):x(t)*b(t,j)));

data: a=70 100 40 140; b=70 40 100 140; enddata end

执行后得到结果如下:

Feasible solution found at iteration: 8

Variable Value X( 1) 1.000000 X( 2) 0.000000 Y( 1) 1.000000 Y( 2) 0.000000 A( 1, 1) 70.00000 A( 1, 2) 100.0000 A( 2, 1) 40.00000 A( 2, 2) 140.0000 B( 1, 1) 70.00000 B( 1, 2) 40.00000 B( 2, 1) 100.0000 B( 2, 2) 140.0000 Row Slack or Surplus 1 0.000000 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 30.00000

11

8 30.00000 9 0.000000 10 30.00000 11 0.000000 12 30.00000

即,得到不等式组的解x?y??1,0?。

例10-10 一家工厂生产甲乙两种产品(单位:吨),生产甲每吨需要消耗煤20吨、电30千瓦小时、人工30个,净利润11万元,生产乙每吨需要消耗煤30吨、电25千瓦小时、人工35个,净利润15万元,另外,在一个生产周期中,这家工厂拥有可调配的资源为煤360吨、电2000千瓦小时、人工300个。求最优生产方案。

解:假设生产甲x1吨、乙x2吨,则,数学模型为

maxf?11x1?15x2?20x1?30x2?360??30x1?25x2?2000 s.t.??30x1?35x2?300??x1,x2?0在这个例子中,有两个2维向量:利润lirun=(11, 15),和x=(x1, x2),一个3维向量b=(360, 2000, 300),以及一个3×2的系数矩阵

?20?A??30?30?30??25? 35??9007607①在Mathematica软件包中,求得最优解(精确值)为

fmax?,x1?0,x2?,

化为近似值是fmax?128.571,x1?0,x2?8.57143。

②在Lingo软件包中输入程序如下: model: sets:

set1/1..2/:lirun,x; set2/1..3/:b;

link(set2,set1):A; endsets

max=@sum(set1(j):lirun(j)*x(j));

@for(set2(i):[supply]@sum(link(i,j):A(i,j)*x(j))<=b(i)); !这里的supply是把约束条件命名(自己的意愿),方便分析灵敏度; data:

lirun=11 15;

12

搜索更多关于: 第10章 Lingo软件包及其应用 的文档
第10章 Lingo软件包及其应用.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7j42g22cjq9d31q9oede_3.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top