AMPL 中的稀疏矩阵

Sparse Matrix in AMPL

我在 AMPL 中有一个稀疏矩阵。因此,它包含许多编码为“.”的值。这 ”。” AMPL 中的值表示 "no value specified here." 当我尝试解决优化问题时,我收到一条消息,内容为 "no value specified for...",涉及包含“.”的单元格。因此,它不会解决问题。

但是,当我尝试指定一个默认值来替换“.”时,问题搅来搅去,并没有解决。有什么办法可以对参数设置限制,以便求解器不查看“。”值?

希望这已经够清楚了。

您可以使用稀疏矩阵来代替指定默认值。例如:

   param m integer > 0; 
   set C within {1..m,1..m}; 
   param A{C}; 

   data;
   param m := 4; 
   param: C: A:    1  2  3  4 := 
              1   36  .  . -2 
              2    .  7  3  . 
              3    .  . -8 16 
              4   12  3  . 77 ; 

并且在您的模型中,您应该将 {i in 1..m, j in 1..m} 上的索引替换为 {(i,j) in C} 上的索引。

另见 https://groups.google.com/d/msg/ampl/1s1X-UNSCg4/RWZm0sVa0IQJ

用点(或句点)表示无用的值不是我所说的 "sparse"。它可以节省操作时间,但它会使用与密集表示一样多的内存。 话虽如此,上面的例子也不是我所说的稀疏。很多位置都是非零的。

话虽如此,如果您确实有一个大的稀疏矩阵,请改用下面的公式。它确实利用了结构 "within" 并且应该为您节省一些内存。

param m 整数 > 0;

设置C在{1..m,1..m}内;

参数A{C};

数据;

参数 m := 4;

参数:C:A:=

   1 1 36

   1 4 -2

   2 2 7

   2 3 3

   3 3 -8

   3 4 16

   4 1 12

   4 2 3

   4 4 77;