【问题标题】:Initialize a two-dimensional array from literals从文字初始化二维数组
【发布时间】:2019-03-25 16:34:01
【问题描述】:

我有这个数据文件:

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】:

    型号:

    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 了解变体。

    “默认 0”选项避免了显式列出零值的需要,这对于稀疏数据集很有用。

    如果有一个 AMPL 输入格式,它允许在带有行和列标题的简单表格布局中指定二维参数,沿着您的数据步骤的行,会很有用,但我不知道有一个这样做。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-29
      • 2012-05-20
      • 1970-01-01
      • 2014-05-14
      • 2011-06-04
      相关资源
      最近更新 更多