LINGO教程(1、2.、3、4)(5)

2019-03-16 21:26

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 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并没有找到一个) 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 求解最优化问题

其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

2.@warn(’text’,logical_condition)

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

例4.19 示例。 model: x=1;

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


LINGO教程(1、2.、3、4)(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:金属材料中Si、C、Mn、S、P等元素的作用及影响

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

马上注册会员

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