数理最適化セミナーのご案内

6.7 選択関数selection

 選択関数selectionは,添字つき0-1整数変数の中で一つだけを1に固定したい場合に用います.同様の記述はsum関数を用いる事でも可能ですが,wcspを利用する際にはselection関数を用いた方が効率的です注1

 次の例では,3つの0-1整数変数z[1], z[2], z[3]のうち一つだけを1にするよう指定しています.

Set S = "1 2 3";
Element i(set = S);
IntegerVariable z(type = binary, index = i);
selection(z[i], i);

 第二引数の添字は省略することもできます.

selection(z[i]);

 sum関数を利用した場合,次のようになります.

sum(z[i], i) == 1;

 selection関数の引数には,条件式を指定することもできます.次の例では,z[1], z[2]のうち一つだけを1にするよう指定しています.

Set S = "1 2 3";
Element i(set = S);
IntegerVariable z(type = binary, index = i);
selection(z[i], (i, i <= 2));

 引数に条件式を指定する場合には,第二引数の添字を省略することはできません.例えば,次の例は誤りです.

selection(z[i], i <= 2);

注1)selection関数を用いた場合,内部的には複数の0-1整数変数を用意する替わりに一つの離散変数を用意するため,内部処理が高速化されます.また,実行時に標準出力に出力されるNUMBER_OF_VARIABLESの値は,内部的な変数の数になります.


 

 

上に戻る