5.6 範囲演算関数sum, prod
数式におけるや
に類する機能として,C++SIMPLEでは範囲演算関数として,
sum
関数とprod
関数が提供されています.次の例では,制約式を記述しています.
Set S; S = "1 2 3"; Element i(set = S); Variable x(index = i); sum(x[i], i) == 10;
上の記述をsum
関数を使わずに書くと次のようになります.
Set S; S = "1 2 3"; Element i(set = S); Variable x(index = i); x[1] + x[2] + x[3] == 10;
次の例では,制約式を記述しています.
Set S; S = "1 2 3"; Element i(set = S); Variable x(index = i); prod(x[i], i) == 20;
上の記述をprod
関数を使わずに書くと次のようになります.
Set S; S = "1 2 3"; Element i(set = S); Variable x(index = i); x[1] * x[2] * x[3] == 20;
sum
関数は複数の添字に対して適用する事もできます.次の例では,制約式を記述しています.
Set S = "1 2 3"; Set T = "1 2"; Element i(set = S); Element j(set = T); Variable y(index = (i, j)); Parameter a(index = i); Parameter b(index = j); sum(a[i] * b[j] * y[i, j], (i, j)) == 10;
次のように記述することも可能です.
Set S = "1 2 3"; Set T = "1 2"; Element i(set = S); Element j(set = T); Variable y(index = (i, j)); Parameter a(index = i); Parameter b(index = j); sum(sum(a[i] * b[j] * y[i, j], j), i) == 10;
条件式を用いて,和や積を取る範囲を制限する事もできます.次の例では,制約式を記述しています.
Set S; S = "1 2 3 4 5"; Element i(set = S); Variable x(index = i); sum(x[i], (i, i >= 3)) == 10;
次の例では,制約式,
を記述しています.
Set S = "p q r s"; Set T(superSet = S); T = "p r"; Element i(set = S); Variable x(index = i); sum(x[i], (i, i < T)) == 10; sum(x[i], (i, i > T)) == 20;
上に戻る