从文字初始化二维数组

问题描述 投票:0回答:1

我有这个数据文件:

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}数组。我在数据和模型文件中尝试了一些不同的语法,并且无法正常工作。

ampl
1个回答
1
投票

模型:

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参数,沿着数据步骤的行,这将是有用的,但我不知道有一个这样做。

© www.soinside.com 2019 - 2024. All rights reserved.