有时候我们想输入的数据是在一个Excel表格或者其他什么形式中,或者说这里数据是实时变化的并不利于直接在程序中输入,耳而应该在程序之外将数据存储,实现数据与程序的分离存储,这个时候就涉及到程序与数据之间的传递
下面简要介绍一个如何进行数据与程序之间的传递
下面的讲解都是基于如下的问题模型
有个城市都需要采购一定量的物品,但每个城市只允许在自身所在的城市采购,城市i的最低需求量为need(i),最大供应量为supply(i),单件采购成本为cost(i),如何采购总成本最小?
模型:设order(i)为城市i的采购量,则问题的数学模型为
1.直接粘贴复制
开始的程序
model:
sets:
cities/!待输入的数据个数;/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=!待输入的数据值;;
enddata
end
粘贴的选项
可以依次试一下上面的不同粘贴格式的效果
下面是我直接在Excel中Ctrl+C与Ctrl+V实现的
model:
sets:
cities/
Seattle
Detroit
Chicago
Denver
/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=
12 1600 1700
28 1800 1900
15 1200 1300
20 1000 1100
;
enddata
end
model:
sets:
cities/@file(数据文件.ldt)/:@file(数据文件.ldt);
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost=@file(数据文件.ldt);
need=@file(数据文件.ldt);
supply=@file(数据文件.ldt);
enddata
end
如果路径不一致,也可以手动添加,Edit --> insert new object...
应当注意此时的文件类型的ldt格式,
具体里面内容:Seattle,Detroit,Chicago,Denver~cost,need,supply,order~12,28,15,20~1600,1800,1200,1000~1700,1900,1300,1100 注意中间的不同赋值用~间隔
3.存取Excel数据文件:@ole(文件名,元素名);
model:
sets:
cities/@ole('原始数据1.xls','cities')/:cost,need,supply,order;
endsets
min=@sum(cities:cost*order);
@for(cities:need<=order;order<=supply);
data:
cost,need,supply=@ole('原始数据1.xls'); !读取数据文件
@ole('原始数据1.xls','order')=order; !将计算结果存入表格中
enddata
end
对于路径不一致的情况解决方式与上述一样