全国数学建模lingo实例讲解(4)

2018-11-17 20:32

全国数学建模lingo实例讲解

@file(’filename’)位置的文本。这也就是说,一条记录可以是声明的一部分,整个声明,或一系列声明。在数据文件中注释被忽略。注意在LINGO中不允许嵌套调用@file函数。

2.@text函数

该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为

@text([’filename’])

这里filename是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。@text函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。 我们把用接口函数产生输出的数据声明称为输出操作。输出操作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。 例4.15 借用例4.12,说明@text的用法。

model: sets:

days/mon..sun/: required,start; endsets data:

!每天所需的最少职员数;

required = 20 16 13 16 19 14 12;

@text('d:\\out.txt')=days '至少需要的职员数为' start; enddata

!最小化每周所需职员数; min=@sum(days: start); @for(days(J):

@sum(days(I) | I #le# 5:

start(@wrap(J+I+2,7))) >= required(J)); end

3.@ole函数

@OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE传输直接在内存中传输数据,并不借助于中间文件。当使用@OLE时,LINGO先装载EXCEL,再通知EXCEL装载指定的电子数据表,最后从电子数据表中获得Ranges。为了使用OLE函数,必须有EXCEL5及其以上版本。OLE函数可在数据部分和初始部分引入数据。

@OLE可以同时读集成员和集属性,集成员最好用文本格式,集属性最好用数值格式。原始集每个集成员需要一个单元(cell),而对于n元的派生集每个集成员需要n个单元,这里第一行的n个单元对应派生集的第一个集成员,第二行的n个单元对应派生集的第二个集成员,依此类推。

@OLE只能读一维或二维的Ranges(在单个的EXCEL工作表(sheet)中),但不能读间断的或三维的Ranges。Ranges是自左而右、自上而下来读。

例4.16

sets:

PRODUCT; !产品; MACHINE; !机器; WEEK; !周;

ALLOWED(PRODUCT,MACHINE,WEEK):x,y; !允许组合及属性; endsets data:

rate=0.01;

PRODUCT,MACHINE,WEEK,ALLOWED,x,y=@OLE('D:\\IMPORT.XLS'); @OLE('D:\\IMPORT.XLS')=rate; enddata

代替在代码文本的数据部分显式输入形式,我们把相关数据全部放在如下电子数据表中来输入。下面是D:\\IMPORT.XLS的图表。

除了输入数据之外,我们也必须定义Ranges名:PRODUCT,MACHINE,WEEK,ALLOWED,x,y. 明确的,我们需要定义如下的Ranges名:

Name Range

16

全国数学建模lingo实例讲解

PRODUCT B3:B4 MACHINE C3:C4 WEEK D3:D5 ALLOWED B8:D10

X F8:F10 Y G8:G10 rate C13

为了在EXCEL中定义Ranges名:

① 按鼠标左键拖曳选择Range, ② 释放鼠标按钮,

③ 选择“插入|名称|定义”, ④ 输入希望的名字, ⑤ 点击“确定”按钮。

我们在模型的数据部分用如下代码从EXECL中引入数据:

PRODUCT,MACHINE,WEEK,ALLOWED,x,y=@OLE('D:\\IMPORT.XLS'); @OLE('D:\\IMPORT.XLS')=rate; 等价的描述为

PRODUCT,MACHINE,WEEK,ALLOWED,x,y

=@OLE('D:\\IMPORT.XLS', PRODUCT,MACHINE,WEEK,ALLOWED,x,y); @OLE('D:\\IMPORT.XLS',rate)=rate;

这一等价描述使得变量名和Ranges不同亦可。

4.@ranged(variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许减少的量。 5.@rangeu(variable_or_row_name)

为了保持最优基不变,变量的费用系数或约束行的右端项允许增加的量。 6.@status()

返回LINGO求解模型结束后的状态: 0 Global Optimum(全局最优) 1 Infeasible(不可行) 2 Unbounded(无界)

3 Undetermined(不确定) 4 Feasible(可行)

5 Infeasible or Unbounded(通常需要关闭“预处理”选项后重新求解模型,以确定模型究竟是不可行还是无界)

6 Local Optimum(局部最优)

7 Locally Infeasible(局部不可行,尽管可行解可能存在,但是LINGO并没有找到一个)

17

全国数学建模lingo实例讲解

8 Cutoff(目标函数的截断值被达到)

9 Numeric Error(求解器因在某约束中遇到无定义的算术运算而停止)

通常,如果返回值不是0、4或6时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。 例4.17

model:

min=@sin(x); data:

@text()=@status(); enddata end

部分计算结果为:

Local optimal solution found at iteration: 33 Objective value: -1.000000

Variable Value Reduced Cost X 4.712388 0.000000

结果中的6就是@status()返回的结果,表明最终解是局部最优的。 7.@dual

@dual(variable_or_row_name)返回变量的判别数(检验数)或约束行的对偶(影子)价格(dual prices)。

4.9 辅助函数

1.@if(logical_condition,true_result,false_result)

@if函数将评价一个逻辑表达式logical_condition,如果为真,返回true_ result,否则返回false_result。

例4.18 求解最优化问题

mins.t.f(x)?g(y)?100?2x,x?0f(x)??x?0?2x,?60?3y,g(y)???2y,x?y?30x,y?0其LINGO代码如下:

model:

min=fx+fy;

fx=@if(x #gt# 0, 100,0)+2*x; fy=@if(y #gt# 0,60,0)+3*y; x+y>=30; end

y?0y?0

2.@warn(’text’,logical_condition)

如果逻辑条件logical_condition为真,则产生一个内容为’text’的信息框。 例4.19 示例。

model: x=1;

@warn('x是正数',x #gt# 0); end

§5 LINGO WINDOWS命令

18

全国数学建模lingo实例讲解

5.1 文件菜单(File Menu) 1. 1. 新建(New)

从文件菜单中选用“新建”命令、单击“新建”按钮或直接按F2键可以创建一个新的“Model”窗口。在这个新的“Model”窗口中能够输入所要求解的模型。

2. 2. 打开(Open)

从文件菜单中选用“打开”命令、单击“打开”按钮或直接按F3键可以打开一个已经存在的文本文件。这个文件可能是一个Model文件。

3. 3. 保存(Save)

从文件菜单中选用“保存”命令、单击“保存”按钮或直接按F4键用来保存当前活动窗口(最前台的窗口)中的模型结果、命令序列等保存为文件。

4. 4. 另存为...(Save As...) 从文件菜单中选用“另存为...”命令或按F5键可以将当前活动窗口中的内容保存为文本文件,其文件名为你在“另存为...”对话框中输入的文件名。利用这种方法你可以将任何窗口的内容如模型、求解结果或命令保存为文件。

5. 5. 关闭(Close)

在文件菜单中选用“关闭”(Close)命令或按F6键将关闭当前活动窗口。如果这个窗口是新建窗口或已经改变了当前文件的内容,LINGO系统将会提示是否想要保存改变后的内容。

6. 6. 打印(Print)

在文件菜单中选用“打印” (Print)命令、单击“打印”按钮或直接按F7键可以将当前活动窗口中的内容发送到打印机。

7. 7. 打印设置(Print Setup...) 在文件菜单中选用“打印设置...”命令或直接按F8键可以将文件输出到指定的打印机。

8. 8. 打印预览(Print Preview) 在文件菜单中选用“打印预览...”命令或直接按Shift+F8键可以进行打印预览。

9. 9. 输出到日志文件(Log Output...) 从文件菜单中选用“Log Output...”命令或按F9键打开一个对话框,用于生成一个日志文件,它存储接下来在“命令窗口”中输入的所有命令。

10.提交LINGO命令脚本文件(Take Commands...) 从文件菜单中选用“Take Commands...”命令或直接按F11键就可以将LINGO命令脚本(command script)文件提交给系统进程来运行。

11.引入LINGO文件(Import Lingo File...) 从文件菜单中选用“Import Lingo File...”命令或直接按F12键可以打开一个LINGO格式模型的文件,然后LINGO系统会尽可能把模型转化为LINGO语法允许的程序。

12.退出(Exit)

从文件菜单中选用“Exit”命令或直接按F10键可以退出LINGO系统。 5.2 编辑菜单(Edit Menu) 1. 1. 恢复(Undo)

从编辑菜单中选用“恢复”(Undo)命令或按Ctrl+Z组合键,将撤销上次操作、恢复至其前的状态。

2. 2. 剪切(Cut)

从编辑菜单中选用“剪切”(Cut)命令或按Ctrl+X组合键可以将当前选中的内容剪切至剪贴板中。

3. 3. 复制(Copy)

从编辑菜单中选用“复制”(Copy)命令、单击“复制”按钮或按Ctrl+C组合键可以将当前选中的内容复制到剪贴板中。

4. 4. 粘贴(Paste)

从编辑菜单中选用“粘贴”(Paste)命令、单击“粘贴”按钮或按Ctrl+V组合键可以将粘贴板中的当前内容复制到当前插入点的位置。

5. 5. 粘贴特定..(Paste Special。。)

与上面的命令不同,它可以用于剪贴板中的内容不是文本的情形。 6. 6. 全选(Select All)

19

全国数学建模lingo实例讲解

从编辑菜单中选用“Select All”命令或按Ctrl+A组合键可选定当前窗口中的所有内容。

7. 7. 匹配小括号(Match Parenthesis)

从编辑菜单中选用“Match Parenthesis”命令、单击“Match Parenthesis”按钮或按Ctrl+P组合键可以为当前选中的开括号查找匹配的闭括号。

8. 8. 粘贴函数(Paste Function)

从编辑菜单中选用“Paste Function”命令可以将LINGO的内部函数粘贴到当前插入点。 5.3 LINGO菜单

1. 1. 求解模型(Slove)

从LINGO菜单中选用“求解”命令、单击“Slove”按钮或按Ctrl+S组合键可以将当前模型送入内存求解。

2. 2. 求解结果...(Solution...) 从LINGO菜单中选用“Solution...”命令、单击“Solution...”按钮或直接按Ctrl+O组合键可以打开求解结果的对话框。这里可以指定查看当前内存中求解结果的那些内容。

3. 3. 查看...(Look...) 从LINGO菜单中选用“Look...”命令或直接按Ctrl+L组合键可以查看全部的或选中的模型文本内容。

4. 4. 灵敏性分析(Range,Ctrl+R) 用该命令产生当前模型的灵敏性分析报告:研究当目标函数的费用系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析是在求解模型时作出的,因此在求解模型时灵敏性分析是激活状态,但是默认是不激活的。为了激活灵敏性分析,运行LINGO|Options?,选择General Solver Tab, 在Dual Computations列表框中,选择Prices and Ranges选项。灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它。

下面我们看一个简单的具体例子。

例5.1某家具公司制造书桌、餐桌和椅子,所用的资源有三种:木料、木工和漆工。生产数据如下表所示: 木料 漆工 木工 成品单价 每个书桌 8单位 4单位 2单位 60单位 每个餐桌 6单位 2单位 1.5单位 30单位 每个椅子 1单位 1.5单位 0.5单位 20单位 现有资源总数 48单位 20单位 8单位 若要求桌子的生产量不超过5件,如何安排三种产品的生产可使利润最大? 用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: 3 Objective value: 280.0000

Variable Value Reduced Cost DESKS 2.000000 0.000000 TABLES 0.000000 5.000000 CHAIRS 8.000000 0.000000 Row Slack or Surplus Dual Price 1 280.0000 1.000000 2 24.00000 0.000000 3 0.000000 10.00000

20


全国数学建模lingo实例讲解(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:国内设施农业的发展现状与对策分析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: