云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > lingo8.0完美教程

lingo8.0完美教程

  • 62 次阅读
  • 3 次下载
  • 2025/5/2 19:01:20

列表如下:

隐式成员列表格式示例所产生集成员 1..n 1..5 1,2,3,4,5

StringM..StringN Car2..car14 Car2,Car3,Car4,?,Car14 DayM..DayN Mon..Fri Mon,Tue,Wed,Thu,Fri

5

③集成员不放在集定义中,而在随后的数据部分来定义。 例2.2 !集部分; sets:

students:sex,age;!注意无成员定义,仅由集的名称和成员的属性; endsets !数据部分; data:

students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata

注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。

在集部分只定义了一个集students,并未指定成员。在数据部分罗列了集成员John、 Jill、Rose 和Mike,并对属性sex 和age 分别给出了值。 2.2.2 定义派生集

为了定义一个派生集,必须详细声明:

[1]集的名字[2]父集的名字[3]集的成员(可选)[4]集成员的属性(可选) 可用下面的语法定义一个派生集:

setname(parent_set_list)[/member_list/][:attribute_list];

setname 是集的名字。parent_set_list 是已定义的集的列表,多个时必须用逗号隔开。 如果没有指定成员列表,那么LINGO 会自动创建父集成员的所有组合作为派生集的成员,相 当于由父集形成的完全集。派生集的父集既可以是原始集,也可以是其它的派生集。 例2.3 sets:

product/A B/; machine/M N/;

week/1..2/;!此三个集合均没有定义属性; allowed(product,machine,week):x; endsets

LINGO 生成了三个父集的所有组合共八组作为allowed 集的成员。列表如下: 编号成员 1 (A,M,1) 2 2 (A,M,2) 3 3 (A,N,1) 4 4 (A,N,2) 5 5 (B,M,1)

6 6 (B,M,2)

7 7 (B,N,1) 8 8 (B,N,2)

成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。 如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集 成为稀疏集。同原始集一样,派生集成员的声明也可以放在数据部分。一个派生集的成员列 表有两种方式生成:①显式罗列;②设置成员资格过滤器。当采用方式①时,必须显式罗列 出所有要包含在派生集中的成员,并且罗列的每个成员必须属于稠密集。使用前面的例子, 显式罗列派生集的成员:

allowed(product,machine,week)/A M 1,A N 2,B N 1/;

如果需要生成一个大的、稀疏的集,那么显式罗列就很讨厌。幸运地是许多稀疏集的成员都 满足一些条件以和非成员相区分。我们可以把这些逻辑条件看作过滤器,在LINGO 生成派生 集的成员时把使逻辑条件为假的成员从稠密集中过滤掉。 例2.4 sets:

6

!学生集:性别属性sex,1 表示男性,0 表示女性;年龄属性age. ; students/John,Jill,Rose,Mike/:sex,age;

!男学生和女学生的联系集:友好程度属性friend,[0,1]之间的数。;

linkmf(students,students)|sex(&1) #eq# 1 #and# sex(&2) #eq# 0: friend;

!男学生和女学生的友好程度大于0.5 的集;

linkmf2(linkmf) | friend(&1,&2) #ge# 0.5 : x; endsets data:

sex,age = 1 16 0 14

0 17 0 13;

friend = 0.3 0.5 0.6;

enddata

用竖线(|)来标记一个成员资格过滤器的开始。#eq#是逻辑运算符,用来判断是否“相 等”,可参考§4. &1 可看作派生集的第1 个原始父集的索引,它取遍该原始父集的所有成 员;&2 可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成员;&3,&4,??, 以此类推。注意如果派生集B 的父集是另外的派生集A,那么上面所说的原始父集是集A 向 前回溯到最终的原始集,其顺序保持不变,并且派生集A 的过滤器对派生集B 仍然有效。因 此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作 限制的总和。

§3 模型的数据部分

在处理模型的数据时,需要为集指派一些成员并且在LINGO 求解模型之前为集的某些属 性指定值(如例1.2 程序中的第6-15 行)。

3.1 数据部分入门

数据部分提供了模型相对静止部分和数据分离的可能性。显然,这对模型的维护和维数 的缩放非常便利。

数据部分以关键字“data:”开始,以关键字“enddata”结束。在这里,可以指定集成 员、集的属性。其语法如下: object_list = value_list;

对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格 隔开。一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名, 那么它们的类型必须一致。如果对象列中有一个集名,那么对象列中所有的属性的类型就是 这个集。

数值列(value_list)包含要分配给对象列中的对象的值,用逗号或空格隔开。注意属 性值的个数必须等于集成员的个数。看下面的例子。 例3.1 sets:

set1/A,B,C/: X,Y; endsets data: X=1,2,3; Y=4,5,6;

enddata

在集set1 中定义了两个属性X 和Y。X 的三个值是1、2 和3,Y 的三个值是4、5 和6。 也可采用如下例子中的复合数据声明(data statement)实现同样的功能。 例3.2 sets:

set1/A,B,C/: X,Y; endsets data: X,Y=1 4 2 5 3 6;

7

enddata

看到这个例子,可能会认为X 被指定了1、4 和2 三个值,因为它们是数值列中前三个, 而正确的答案是1、2 和3。假设对象列有n 个对象,LINGO 在为对象指定值时,首先在n 个对象的第1 个索引处依次分配数值列中的前n 个对象,然后在n 个对象的第2 个索引处依 次分配数值列中紧接着的n 个对象,??,以此类推。

模型的所有数据——属性值和集成员——被单独放在数据部分,这可能是最规范的数据 输入方式。 3.2 参数

在数据部分也可以指定一些标量变量(scalar variables)。当一个标量变量在数据部 分确定时,称之为参数。假设模型中用利率8.5%作为一个参数,就可以象下面一样输入一 个利率作为参数。 例3.3 data:

interest_rate = .085; enddata

也可以同时指定多个参数。

例3.4

data:

interest_rate,inflation_rate = .085 .03; enddata

3.3 实时数据处理

在某些情况,对于模型中的某些数据并不是定值。譬如模型中有一个通货膨胀率的参数, 我们想在2%至6%范围内,对不同的值求解模型,来观察模型的结果对通货膨胀的依赖有多 么敏感。我们把这种情况称为实时数据处理(what if analysis)。LINGO 有一个特征可方 便地做到这件事。

在本该放数的地方输入一个问号(?)。 例3.5 data:

interest_rate,inflation_rate = .085 ?; enddata

每一次求解模型时,LINGO 都会提示为参数inflation_rate 输入一个值。在WINDOWS 操作 系统下,将会接收到一个类似下面的对话框:

直接输入一个值再点击OK 按钮,LINGO 就会把输入的值指定给inflation_rate,然后继续 求解模型。

除了参数之外,也可以实时输入集的属性值,但不允许实时输入集成员名。

3.4 数据部分的未知数值

有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以 便让LINGO 去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成 员的属性值未知。两个逗号间可以有空格。 例3.8 sets:

years/1..5/: capacity; endsets

8

data:

capacity = ,34,20,,;

enddata

属性capacity 的第2 个和第3 个值分别为34 和20,其余的未知。

§4 LINGO 函数

在编写程序的时候,可能会碰到某些函数,在这对这些函数我们仅简单的介绍一下,以 便查询。

LINGO 有9 种类型的函数:

1.基本运算符:包括算术运算符、逻辑运算符和关系运算符 2.数学函数:三角函数和常规的数学函数 3.金融函数:LINGO 提供的两种金融函数

4.概率函数:LINGO 提供了大量概率相关的函数

5.变量界定函数:这类函数用来定义变量的取值范围

6.集操作函数:这类函数为对集的操作提供帮助

7.集循环函数:遍历集的元素,执行一定的操作的函数

8.数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出

搜索更多关于: lingo8.0完美教程 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

列表如下: 隐式成员列表格式示例所产生集成员 1..n 1..5 1,2,3,4,5 StringM..StringN Car2..car14 Car2,Car3,Car4,?,Car14 DayM..DayN Mon..Fri Mon,Tue,Wed,Thu,Fri 5 ③集成员不放在集定义中,而在随后的数据部分来定义。 例2.2 !集部分; sets: students:sex,age;!注意无成员定义,仅由集的名称和成员的属性; endsets !数据部分; data: students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13; enddata 注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行。 在

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com