最適化セミナーのご案内

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));

 

 

上に戻る