1
を設定し、ここに私の問題を示し、簡単な例である:私は構文エラーを取得AMPL構文エラー - 制約の上にインデックスを作成最初
param N := 10;
set C := C1 C2 C3;
param tbar :=
C1 2
C2 3
C3 3 ;
:
# .mod file
param N;
set TIME := 1 .. N;
set C ordered;
param tbar {C};
var X {C,TIME} >= 0;
minimize cost: sum {c in C} X[c,N];
subject to C1 {c in C: ord(c)>1, t in 1 .. N-1}:
X[c,t+1] = X[c,t] + 3;
ここ.datファイルです
test.mod, line 9 (offset 142):
syntax error
context: subject to C1 {c in C: >>> ord(c)>1, <<< t in 1 .. N-1}:
私は
0123へのインデックスの位置を変更した場合{t in 1 .. N-1, c in C: ord(c)>1},
正常に動作します。問題は、私が持っていることです
{c in C: ord(c)>1, t in tbar[c] .. N-1},
私は位置を変更することはできません。 誰もがこのエラーが発生する理由と回避策があるかどうか知っていますか?すでに判明しましたよう
解決策が見つかりました。条件は最後になければなりません:{cのC、tbar [c] .. N-1:ord(c)> 1}のcが動作します。 – ops
別のオプションは条件なしで表現することです。 tbar [c] .. N-1}の{c(C diff {first(C)})のようなものが動作するはずです。この例では、どちらのバージョンを選択するかは関係ありませんが、大規模なインデックスセットの場合は、それらを生成してから再度削除するのではなく、すぐに削除するほうが効率的かもしれません。 –