内容发布更新时间 : 2024/12/23 1:20:47星期一 下面是文章的全部内容请认真阅读。
为对象指定值时,首先在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 实时数据处理
在某些情况,对于模型中的某些数据并不是定
页 第16
值。譬如模型中有一个通货膨胀率的参数,我们想在2%至6%范围内,对不同的值求解模型,来观察模型的结果对通货膨胀的依赖有多么敏感。我们把这种情况称为实时数据处理(what if analysis)。LINGO有一个特征可方便地做到这件事。 在本该放数的地方输入一个问号(?)。 例3.5 data:
interest_rate,inflation_rate = .085 ?; enddata
每一次求解模型时,LINGO都会提示为参数inflation_rate输入一个值。在WINDOWS操作系统下,将会接收到一个类似下面的对话框:
直接输入一个值再点击OK按钮,LINGO就会把输入的值指定给inflation_rate,然后继续求解模型。 除了参数之外,也可以实时输入集的属性值,但不允许实时输入集成员名。
页 第17
3.1.4 指定属性为一个值
可以在数据声明的右边输入一个值来把所有的成员的该属性指定为一个值。看下面的例子。 例3.6 sets:
days /MO,TU,WE,TH,FR,SA,SU/:needs; endsets data:
needs = 20; enddata
LINGO将用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.5 数据部分的未知数值
有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。
页 第18
例3.8 sets:
years/1..5/: capacity; endsets data:
capacity = ,34,20,,; enddata
属性capacity的第2个和第3个值分别为34和20,其余的未知。
3.2 模型的初始部分
初始部分是LINGO提供的另一个可选部分。在初始部分中,可以输入初始声明(initialization statement),和数据部分中的数据声明相同。对实际问题的建模时,初始部分并不起到描述模型的作用,在初始部分输入的值仅被LINGO求解器当作初始点来用,并且仅仅对非线性模型有用。和数据部分指定变量的值不同,LINGO求解器可以自由改变初始部分初始化的变量的值。
一个初始部分以“init:”开始,以“endinit”结束。初始部分的初始声明规则和数据部分的数据声明规则相同。也就是说,我们可以在声明的左边同时初始化多个集属性,可以把集属性初始化为一个值,可以用问号实现实时数据处理,还可以用逗号指定未知数值。 例3.9
页 第19
init:
X, Y = 0, .1; endinit Y=@log(X); X^2+Y^2<=1;
好的初始点会减少模型的求解时间。
在这一节中,我们仅带大家接触了一些基本的数据输入和初始化概念,不过现在你应该可以轻松的为自己的模型加入原始数据和初始部分啦。 §4 LINGO函数
有了前几节的基础知识,再加上本节的内容,你就能够借助于LINGO建立并求解复杂的优化模型了。
LINGO有9种类型的函数:
1.基本运算符:包括算术运算符、逻辑运算符和关系运算符
2.数学函数:三角函数和常规的数学函数 3.金融函数:LINGO提供的两种金融函数
4.概率函数:LINGO提供了大量概率相关的函数 5.变量界定函数:这类函数用来定义变量的取值范围
6.集操作函数:这类函数为对集的操作提供帮助
7.集循环函数:遍历集的元素,执行一定的操作的函数
页 第20