AMPL 优化函数中嵌套乘积和求和的语法
Syntax for nested products and sums in AMPL optimization function
我在为集合编制索引时遇到问题。
出于某种原因,sum {i in {1..n_paths}} P[i];
.
总和中的方括号出现语法错误
我能够显示集合 {i in {1..n_paths}}
和 P[1]
或任何其他合法的 i
,但我没有以某种方式正确格式化求和表达式。
ampl: param n_paths;
ampl: set P {1..n_paths};
ampl: display sum {i in {1..n_paths}} P[i];
syntax error
context: display sum {i in {1..n_paths}} >>> P[ <<< i];
在您的示例中,P 是集合的索引集合,这意味着每个 P[i]
本身就是一个集合。例如:
reset;
param n_paths := 2;
set P{1..n_paths};
data;
set P[1] := 1 2 5;
set P[2] := 6 5 1;
这里,display P[1];
returns set P[1] := 1 2 3;
.
如果我尝试计算 sum{i in 1..n_paths} P[i]
,我要求 AMPL 将集合 {1,2,3} 添加到集合 {6,5,1},并且 sum
两组未定义。如果我想将 P[1]
到 P[n_paths]
的所有成员相加,那么我需要一个双倍和:
display sum{i in 1..n_paths} sum{j in P[i]} j;
# caution: this will fail if we have non-numbers in our sets
这个 returns 20:P[1]
的 1+2+5 添加到 P[2]
的 6+5+1。
我也可以在求和之前合并集合:
display sum{j in union{i in 1..n_paths} P[i]} j;
因为 union
丢弃了重复的值,所以最终将 1、2、5 和 6 相加得到 14。
我在为集合编制索引时遇到问题。
出于某种原因,sum {i in {1..n_paths}} P[i];
.
我能够显示集合 {i in {1..n_paths}}
和 P[1]
或任何其他合法的 i
,但我没有以某种方式正确格式化求和表达式。
ampl: param n_paths;
ampl: set P {1..n_paths};
ampl: display sum {i in {1..n_paths}} P[i];
syntax error
context: display sum {i in {1..n_paths}} >>> P[ <<< i];
在您的示例中,P 是集合的索引集合,这意味着每个 P[i]
本身就是一个集合。例如:
reset;
param n_paths := 2;
set P{1..n_paths};
data;
set P[1] := 1 2 5;
set P[2] := 6 5 1;
这里,display P[1];
returns set P[1] := 1 2 3;
.
如果我尝试计算 sum{i in 1..n_paths} P[i]
,我要求 AMPL 将集合 {1,2,3} 添加到集合 {6,5,1},并且 sum
两组未定义。如果我想将 P[1]
到 P[n_paths]
的所有成员相加,那么我需要一个双倍和:
display sum{i in 1..n_paths} sum{j in P[i]} j;
# caution: this will fail if we have non-numbers in our sets
这个 returns 20:P[1]
的 1+2+5 添加到 P[2]
的 6+5+1。
我也可以在求和之前合并集合:
display sum{j in union{i in 1..n_paths} P[i]} j;
因为 union
丢弃了重复的值,所以最终将 1、2、5 和 6 相加得到 14。