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