lingo 程序

lingo 程序,第1张

sets:

k/1..5/

z/1..8/:m

link(k,z):a,c,l,s

endsets

min=@sum(link:a)

@sum(z(j):a(4,j)*c(4,j))<=150

@sum(z(j):a(5,j)*c(5,j))<=400

@sum(z(j):a(1,j)*c(1,j))<=360+40*t

@sum(z(j):a(2,j)*c(2,j))<=600+30*t

@sum(z(j):a(3,j)*c(3,j))<=500+20*t

@for(z(j):@sum(k(i):a(i,j))=m(j))

t=@max(link(i,j):c(i,j)*(2*s(i,j)+2))

t<=10

data:

m=300 330 120 170 110 100 1000 700

s=3.08 2.5 2.6 5.74 4.28 6.2 2 3.86

1.16 3.14 4.12 5.06 2.36 5.52 1.96 2.96

4.48 6.64 6.74 2.9 3.28 1.86 3.34 2.04

4.8 4.5 5.4 8.1 8.2 6.55 5.74 4.32

1.84 2.58 3.92 3.74 3.84 3.98 3.82 2.36

enddata

1.1 LINGO编写格式LINGO模型以MODEL开始,以END结束.中间为语句,分为四大部分。(1)集合部分(SETS):这部分以“SETS:”开始,以“ENDSETS"结束.这部分的作用在于定义必要的变量,便于后面进行编程进行大规模计算,在LINGO中称为集合(SET)及其元素和属性。(2)目标与约束:这部分定义了目标函数、约束条件等。一般要用到LINGO的内部函数。求解优化问题时,该部分是必须的.(3)数据部分(DATA):这部分以“DATA:”开始,以“END DATA"结束。其作用在于对集合的属性(数组)输入必要的数值.(4)初始化部分(INIT):这部分以“INIT”开始,以“END INIT”结束。

1.@file 函数

该函数用从外部文件中输入数据,可以放在模型中任何地方。

该函数的语法格式为    @file(’filename’)。

这里 filename 是文件名,可以采用相对路径和绝对路径两种表示方式。@file 函数对同一文件的两种表示方式的处理和对两个不同的文件处理是一样的,这一点必须注意。

把记录结束标记(~)之间的数据文件部分称为记录。

当在模型中第一次调用@file 函数时,LINGO 打开数据文件,然后读取第一个记录;第二次调用@file 函数时,LINGO 读取第二个记录等等。文件的最后一条记录可以没有记录结束标记,当遇到文件结束标记时,LINGO 会读取最后一条记录,然后关闭文件。如果最后一条记录也有记录结束标记。

2.@text 函数

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

其语法为    @text([’filename’])

这里 filename 是文件名,可以采用相对路径和绝对路径两种表示方式。如果忽略 filename,那么数据就被输出到标准输出设备(大多数情形都是屏幕)。@text 函数仅能出现在模型数据部分的一条语句的左边,右边是集名(用来输出该集的所有成员名)或集属性名(用来输出该集属性的值)。

我们把用接口函数产生输出的数据声明称为输出 *** 作。输出 *** 作仅当求解器求解完模型后才执行,执行次序取决于其在模型中出现的先后。

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.@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 时,那么解将不可信,几乎不能用。该函数仅被用在模型的数据部分来输出数据。

7.@dual

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11640831.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存