说明:
处理模型的数据时,需要为集指派一些成员并且在求解模型之前为集的某些属性指定值。
两个可选部分:
输入集成员和数据的 数据部分 ( Data Section);
为决策变量设置初始值的 初始部分 ( Init Section)。
§ 3 模型的数据部分和初始部分
3.1 模型的数据部分
3.1.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;
enddata
说明:
误解,可能会认为 X被指定了 1,4,2三个值。
正确答案是 1,2,3。
假设对象列有 n个对象,在为对象指定值时,首先在 n个对象的第 1
个索引处依次分配数值列中的前 n个对象,然后在 n个对象的第 2个索引处依次分配数值列中紧接着的 n个对象,……,以此类推。
模型的所有数据 —— 属性值和集成员 —— 被单独放在数据部分,这是最规范的数据输入方式。
3.1.2 参数数据部分也可指定一些 标量变量 ( scalar variables)。
参数,在数据部分确定的标量变量举例,假设模型中用利率 8.5%作为一个参数,象下面一样输入一个利率作为参数。
例 3.3
data:
interest_rate =,085;
enddata
也可同时指定多个参数。
例 3.4
data:
interest_rate,inflation_rate =,085,03;
enddata
3.1.3 实时数据处理说明:
某些情况下,模型中的某些数据并不是定值。
如模型中有一通货膨胀率参数,想在 2%至 6%范围内,对不同的值求解模型,以观察模型的结果对通货膨胀的依赖有多么敏感。称这种情况称为 实时数据处理 ( what if analysis)。
方法:
在本该放数的地方输入一个问号(?)。
例 3.5
data:
interest_rate,inflation_rate =,085?;
enddata
每一次求解模型时,都会提示为参数 inflation_rate输入一个值。
直接输入一个值再点击 OK按钮,会把输入的值指定给 inflation_rate,
然后继续求解模型。
除参数之外,也可以时输入集的属性值,但不许实时输入集成员名在数据声明右边输入一个值将所有成员的该属性指定为一个值。
例 3.6
sets:
days /MO,TU,WE,TH,FR,SA,SU/:needs;
endsets
data:
needs = 20;
enddata
用 20指定 days集的所有成员的 needs属性。
多个属性的情形,见下例。
例 3.7
sets:
days /MO,TU,WE,TH,FR,SA,SU/:needs,cost;
endsets
data:
needs cost = 20 100;
enddata
3.1.4 指定属性为一个值有时只想为一个集的部分成员的某个属性指定值,让其余成员的该属性保持未知,以便让 LINGO去求出它们的最优值。
在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。
例 3.8
sets:
years/1..5/,capacity;
endsets
data:
capacity =,34,20,,;
enddata
属性 capacity的第 2个和第 3个值分别为 34和 20,其余的未知。
3.1.5 数据部分的未知数值说明,提供的另一个可选部分。
初始部分中,可以输入 初始声明 ( initialization statement),
和数据部分中数据声明相同。
实际问题建模时,初始部分并不起到描述模型的作用,初始部分输入的值仅被求解器当作初始点来用,并且仅仅对非线性模型有用。
和数据部分指定变量值不同,求解器可以自由改变初始部分初始化的变量的值。
格式,以,init:”开始,以,endinit”结束。
说明,初始部分的初始声明规则和数据部分的数据声明规则相同。
即可在声明左边同时初始化多个集属性,可把集属性初始化为一个值,可用问号实现实时数据处理,还可用逗号指定未知数值。
例 3.9
init:
X,Y = 0,.1;
endinit
Y=@log(X);
X^2+Y^2<=1;
好的初始点会减少模型的求解时间。
3.2 模型的初始部分