我有这个数据文件:
param: name car pro fat vit cal :=
1 'Fiddleheads' 3 1 0 3 80
2 'Fireweed Shoots' 3 0 0 4 150
3 'Prickly Pear Fruit' 2 1 1 3 190
;
而这个模型:
set I;
set J;
param name{I} symbolic;
param car{I} integer >= 0;
param pro{I} integer >= 0;
param fat{I} integer >= 0;
param vit{I} integer >= 0;
param cal{I} integer >= 0;
param nut{i in I, J} = (car[i], pro[i], fat[i], vit[i]);
最后一行无效:
mod, line 10 (offset 176):
syntax error
context: param nut{i in I, J} = >>> (car[i], <<< pro[i], fat[i], vit[i]);
但我不知道如何获得同等的工作。基本上,我想基于文字表达式形成一个{3,4}数组。我在数据和模型文件中尝试了一些不同的语法,并且无法正常工作。
模型:
set names;
set components;
param nut{names,components} default 0;
数据:
set names :=
Fiddleheads
'Fireweed Shoots'
'Prickly Pear Fruit';
set components := car pro fat vit cal
;
param nut :=
[Fiddleheads,*]
car 3 pro 1 vit 3 cal 80
['Fireweed Shoots',*]
car 3 vit 4 cal 150
['Prickly Pear Fruit',*]
car 2 pro 1 fat 1 vit 3 cal 190
;
有关变体,请参阅Chapter 9 of the AMPL Book。
“default 0”选项避免了显式列出零值的需要,这对稀疏数据集很有用。
有一个AMPL输入格式允许在带有行标题和行标题的简单表格布局中指定2-D参数,沿着数据步骤的行,这将是有用的,但我不知道有一个这样做。