Indexing 在ampl中使用包含相同编号的集合多次工作

Indexing 在ampl中使用包含相同编号的集合多次工作,indexing,duplicates,set,ampl,Indexing,Duplicates,Set,Ampl,我正在做一个优化问题。为此,某些参数必须采用不同的值。我使用的是Smolyak简化网格。我有9个认识。我已经构建了一个代码,在每个集合中包含参数在每个实现中必须接受的值。不幸的是,这些参数在不同的实现中采用相同的值,因此使我的代码毫无用处。我需要一种方法使ampl接受上述集合 我在ampl的书中关于布景的章节中没有发现任何有用的东西 然而我发现了这个问题,类似的事情也发生了。但是,如果复制代码,错误仍然存在 这是我定义集合的地方,错误发生了 param Level=9; set slM1Se

我正在做一个优化问题。为此,某些参数必须采用不同的值。我使用的是Smolyak简化网格。我有9个认识。我已经构建了一个代码,在每个集合中包含参数在每个实现中必须接受的值。不幸的是,这些参数在不同的实现中采用相同的值,因此使我的代码毫无用处。我需要一种方法使ampl接受上述集合

我在ampl的书中关于布景的章节中没有发现任何有用的东西

然而我发现了这个问题,类似的事情也发生了。但是,如果复制代码,错误仍然存在

这是我定义集合的地方,错误发生了

param Level=9;

set slM1Set ordered := {45.4236, 45.3191, 45.5438,45.4236, 45.4236, 45.4236, 45.4236, 45.4236, 45.4236};
set slM2Set ordered := {3.8222, 3.8222, 3.8222, 3.8134, 3.8324, 3.8222, 3.8222, 3.8222, 3.8222};
set slP1Set ordered := {-37040,-37040,-37040,-37040,-37040,-47040,-27040, 37040,-37040};
set slP2Set ordered := {0, 0, 0, 0, 0, 0, 0, -577.350, 577.350};
param w_x;
param w_y;
param x1M;
param x2M;
这就是我使用它们的地方

for {a in 1..Level}
{

let w_x := member(a, slM1Set);
let w_y := member(a, slM2Set);
let x1M := member(a, slP1Set);
let x2M := member(a, slP2Set);

solve;

我需要知道我是否可以更改代码使其按预期工作,这意味着循环将执行9次,第一次,变量w_x将从slM1Set获取第一个值,w_y从slM2Set获取,x1M从slP1Set获取,x2M从slP2Set获取,在第二次执行中,变量w_x将从slM1Set获取第二个值,w_y从slM2Set获取,x1M来自slP1Set,x2M来自slP2Set等等。

除非有某种原因特别需要将这些设置为集合,否则几乎可以肯定,最好将它们作为索引参数处理

param Level=9;
param slM1{1..Level} := ...
param slM2{1..Level} := ...
param slP1{1..Level} := ...
param slP2{1..Level} := ...

...

for {a in 1..Level}
{
let w_x := slM1[a];
let w_y := slM2[a];
let x1m := slP1[a];
let x2m := slP2[a];
solve;
}

非常感谢你的回答。你说的有道理。但是,当我将参数写为param Level=9时,我遇到了一个问题;参数slM1{1..Level}:=45.4236,45.3191,45.5438,45.4236,45.4236,45.4236,45.4236,45.4236,45.4236,45.4236,45.4236;等等错误如下所示:语法错误上下文:param slM1{1..Level}:=45.4236>>45.3191@slow_learner您需要显式地包含每个值的索引。AMPL不从这里的位置假定索引。有关正确的语法,请参阅AMPL手册的第页(根据您是处于“模型”模式还是“数据”模式,语法可能略有不同)。