AMPL中有序对集的声明

时间:2015-01-22 13:54:15

标签: ampl

我有一个变量u [i,j,p],其中i和j是有序集。具体来说,我已经定义了变量和像

这样的集合
  set I;
  set J;
  set P;
  set LINKS within {I,J};
  param u{LINKS,P}
<。>在.mod文件中。在我的.dat中我写过:

set I := 1 2 3 4;
set J := Factory1 Factory2 Factory3 Factory4
set LINKS := (1,Factory1) (2,Factory1) (3,Factory2) (4,Factory2);
set P:= prod1 prod2 prod3;

param u default 0:=
     [1,Factory1,*] prod1 0.5251 prod2 0.3738
     [2,Factory1,*] prod1 0.5052 prod2 0.3311
     [3,Factory2,*] prod1 0.5555 prod3 0.6666
     [4,Factory2,*] prod3 0.6156 prod4 0.3353;

但是这给了我关于你如何申报的错误。当我试图按照我试图做的AMPL文档时

param LINKS: u:=
     [1,Factory1,*] prod1 0.5251 prod2 0.3738
     [2,Factory1,*] prod1 0.5052 prod2 0.3311
     [3,Factory2,*] prod1 0.5555 prod3 0.6666
     [4,Factory2,*] prod3 0.6156 prod4 0.3353;

但它也给出了错误。

1 个答案:

答案 0 :(得分:1)

您的代码中存在两个问题:

  1. 中缺少分号
    param u{LINKS,P}
    

    set J := Factory1 Factory2 Factory3 Factory4
    
  2. 使用不属于prod4成员的P

  3. 否则看起来是正确的。