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;
上に戻る