在处理模型数据时,需要为集指派一些成员并且在LINGO求解模型之前为集的某些属性指定值.为此,LINGO为用户提供了两个可选部分:输入集成员和数据的数据部分(Data Section)和为决策变量设置初始值的初始部分(段)(Init Section).
1.模型的数据部分
(1)数据部分入门.
数据部分提供了模型相对静止部分和数据分离的可能性.显然,这对模型的维护和维数的缩放非常便利.
数据部分以关键字“data:”开始,以关键字“enddata”结束.在这里,可以指定集成员、集的属性.其语法如下:
object_list=value_list;
对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开.一个对象列中至多有一个集名,而属性名可以有任意多个.如果对象列中有多个属性名,那么它们的类型必须一致.如果对象列中有一个集名,那么对象列中所有的属性的类型就是这个集.
数值列(value_list)包含要分配给对象列中的对象的值,用逗号或空格隔开.注意属性值的个数必须等于集成员的个数.看下面的例子.
例1 用简单数值列为变量赋值.
在集set1中定义了两个属性X和Y.X的两个值是1、2,Y的两个值是3、4.也可采用如下例子中的复合数据声明(data statement)实现同样的功能.
例2 使用数值矩阵对变量进行复合声明.
看到这个例子,可能会认为X被指定了1、3两个值,因为它们是数值列中前两个,而正确的答案是1和2.假设对象列有n个对象,LINGO在为对象指定值时,首先在n个对象的第1个索引处依次分配数值列中的前n个对象,然后在n个对象的第2个索引处依次分配数值列中紧接着的n个对象,……,以此类推.
(2)参数.
在数据部分也可以指定一些标量变量(scalar variables).当一个标量变量在数据部分确定时,称之为参数.
例3 定义模型中利率参数为8.5%.
例4 同时为参数利率和通胀率赋值为8.5%和3%.
(3)实时数据处理.
在某些情况,对于模型中的某些数据并不是定值.譬如模型中有一个通货膨胀率的参数,我们想在2%至6%范围内,对不同的值求解模型,来观察模型的结果对通货膨胀的依赖有多么敏感.我们把这种情况称为实时数据处理.LINGO可方便地做到这件事,就是在本该放数的地方输入一个问号(?).
例5 实时数据处理通胀率参数.(www.xing528.com)
每一次求解模型时,LINGO都会提示为参数inflation_rate输入一个值.在WINDOWS操作系统下,将会接收到一个类似图1.3.1的对话框:输入一个值点击OK按钮,LINGO会把输入值指定给inflation_rate,并继续求解模型.
图1.3.1 实时数据输入对话框
除了参数之外,也可以实时输入集的属性值,但不允许实时输入集成员名.
(4)指定属性为同一个值.
可以在数据声明的右边输入一个值来把所有成员的该属性指定为同一个值.如下例.
例6 为一周每日需求量统一指定为20.
LINGO将用20指定days集的所有成员的needs属性.对于多个属性的情形,见下例.
例7 为一周每日需求量和成本分别指定为20和100.
(5)数据部分的未知数值.
有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值.在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知.两个逗号间可以有空格.
例8 属性值未知的录入法.
属性capacity的第2个和第3个值分别为34和20,其余的未知.
2.模型的初始部分
初始部分是LINGO提供的另一个可选部分.在初始部分中,可以输入初始声明,对实际问题建模时,初始部分并不起到描述模型的作用,在初始部分输入的值仅被LINGO求解器当作初始迭代点来用,并且仅仅对非线性模型有用.和数据部分指定变量的值不同,LINGO求解器可以自由改变初始部分初始化的变量的值.
一个初始部分以“init:”开始,以“endinit”结束.初始部分的初始声明规则和数据部分的数据声明规则相同.我们可以在声明的左边同时初始化多个集属性,可以把集属性初始化为一个值,可以用问号实现实时数据处理,还可以用逗号指定未知值.
例9 初始声明的使用.
好的初始点会减少模型的求解时间.
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。