6.6 重複不能関数alldiff
重複不能関数alldiffは,添字つきの離散変数DiscreteVariableを引数に取り,「それぞれの値が全て異なる」という制約を与えることができます.
次の例では,添字と定義域が同じ集合を対象とする,離散変数yを考えます.alldiff関数により,y[1], ..., y[10]は全て異なる値(1, ..., 10のどれか)を取ります.
Set S = "1 .. 10"; Element i(set = S); DiscreteVariable y(dom = S, index = i); alldiff(y[i], i);
第二引数の添字は,省略することもできます.
alldiff(y[i]);
alldiff関数の引数には,条件式を与えることもできます.これにより,alldiff関数が作用する範囲を制限することができます.次の例では,y[1], ..., y[5]までは,全て異なる値を取るように定めています.
Set S = "1 .. 10"; Element i(set = S); DiscreteVariable y(dom = S, index = i); alldiff(y[i], (i, i <= 5));
条件式を付与した場合は,第二引数の添字を省略することはできません.例えば,次の例は誤りです.
alldiff(y[i], i <= 5);
次の例では,y[1], y[2], y[3]が重複せずにa, b, cのいずれかを取るように定めています.
Set S = "1 .. 10"; Set T = "a b c"; Element i(set = S); DiscreteVariable y(dom = T, index = i); alldiff(y[i], (i, i <= 3));
上に戻る
