数理最適化セミナーのご案内

12.7 .val と定義域外エラー

 変数の値を .val で参照するとき,添字の範囲外となります.例えば以下のようなケースです.

Set A;
Element a(set=A);
Set B;
Element b(set=B);
Set AB(dim=2, superSet=(A, B));
Element ab(set=AB);
AB="A1 B1 A2 B2";

Variable x(index=AB);
0 <= x[ab] <= 1;

options.method="simplex";
solve();

x[a,b] = x[a,b].val, (a,b)<AB; // NG

 このようなときは,変数の添字が範囲内におさまるように記述する必要があります.以下は正しい記述例です.

x[ab] = x[ab].val; // OK

 これはExpressionに .val の値を代入するときも同様です.例えば,以下のような記述はできません.

Set S = "1 2 3";
Set T = "2";
Variable x(index=T);
Expression e(index=S);
Element i(set=S);

// 添字の範囲外エラー
e[i] = x[i].val, i < T;

 このような場合は,添字をあらかじめ用意することによって,条件式を使わないで記述する必要があります.

Set S = "1 2 3";
Set T = "2";
Variable x(index=T);
Expression e(index=S);
Element i(set=S);
Element t(set=T);

e[t] = x[t].val;

 

 

上に戻る