lingo数据导入

教程里面的 自己看看 应该就会了
@file 函数
该函数用从外部文件中输入数据,可以放在模型中任何地方。该函数的语法格
式为@file(’filename’)。这里filename 是文件名,可以采用相对路径和绝对路
径两种表示方式。@file 函数对同一文件的两种表示方式的处理和对两个不同的文件
处理是一样的,这一点必须注意。
例 4.14 以例1.2 来讲解@file 函数的用法。
注意到在例1.2 的编码中有两处涉及到数据。第一个地方是集部分的6 个
warehouses 集成员和8 个vendors 集成员;第二个地方是数据部分的capacity,
demand 和cost 数据。
为了使数据和我们的模型完全分开,我们把它们移到外部的文本文件中。修改
模型代码以便于用@file 函数把数据从文本文件中拖到模型中来。修改后(修改处代
码黑体加粗)的模型代码如下:
model:
!6发点8收点运输问题;
sets:
warehouses/ @file('1_2.txt') /: capacity;
vendors/ @file('1_2.txt') /: demand;
links(warehouses,vendors): cost, volume;
endsets
!目标函数;
min=@sum(links: cost*volume);
!需求约束;
@for(vendors(J):
@sum(warehouses(I): volume(I,J))=demand(J));
!产量约束;
@for(warehouses(I):
@sum(vendors(J): volume(I,J))<=capacity(I));
!这里是数据;
data:
capacity = @file('1_2.txt') ;
demand = @file('1_2.txt') ;
cost = @file('1_2.txt') ;
enddata
end
模型的所有数据来自于1_2.txt 文件。其内容如下:
!warehouses 成员;
WH1 WH2 WH3 WH4 WH5 WH6 ~
!vendors 成员;
V1 V2 V3 V4 V5 V6 V7 V8 ~
!产量;
60 55 51 43 41 52 ~
!销量;
35 37 22 32 41 32 43 38 ~
!单位运输费用矩阵;
6 2 6 7 4 2 5 9
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3
把记录结束标记(~)之间的数据文件部分称为记录。如果数据文件中没有记录
结束标记,那么整个文件被看作单个记录。注意到除了记录结束标记外,模型的文
本和数据同它们直接放在模型里是一样的。
我们来看一下在数据文件中的记录结束标记连同模型中@file 函数调用是如何
工作的。当在模型中第一次调用@file 函数时,LINGO 打开数据文件,然后读取第一
个记录;第二次调用@file 函数时,LINGO读取第二个记录等等。文件的最后一条记
录可以没有记录结束标记,当遇到文件结束标记时,LINGO会读取最后一条记录,然
后关闭文件。如果最后一条记录也有记录结束标记,那么直到LINGO 求解完当前模
型后才关闭该文件。如果多个文件保持打开状态,可能就会导致一些问题,因为这
会使同时打开的文件总数超过允许同时打开文件的上限16。
当使用@file函数时,可把记录的内容(除了一些记录结束标记外)看作是替代
模型中@file(’filename’)位置的文本。这也就是说,一条记录可以是声明的一部
分,整个声明,或一系列声明。在数据文件中注释被忽略。注意在LINGO 中不允许
嵌套调用@file 函数。 

猜你喜欢

转载自blog.csdn.net/eric_e/article/details/80329118