最適化セミナーのご案内

6.11 カウント関数count

 条件を満たす式の数を取得するカウント関数countは,添字付けられた式及び定数項の中で与えられた条件(線形の不等式)を満たす個数を返す関数です.以下の仕様になっています.

// 添字の範囲にわたる最小値
Expression   count(条件式,範囲指定並び)       // 戻り値は一般の式

 count関数によって,中間変数を用いることなく個数を数え上げることができるので問題規模の増加を防ぐことができます.目的関数やsoftConstraintで用いる場合にはメタヒューリスティクスの性質によりノイズを加えることによって速度を向上させることが可能です.以下簡単に説明します.

Variable x(index = I,type = binary);

Objective obj(type = minimize);
obj = count( 3 <= x[i] <= 5 ,i);

 上記のような問題の場合にノイズの導入は有効です.以下のように目的関数を書き換えます.

Variable x(index = I,type = binary);
Parameter rand(index = I);
Parameter M;
Objective obj(type = minimize);
obj = count(3 <= x[i] <= 5,i)*M + sum(x[i]*rand[i],i);

 上記パラメータrandは適当な乱数を想定しています.Mは目的関数の第二項が第一項に影響を及ぼさないようにするためのスケーリング値です.このようにすると大幅に速度向上する場合がありますのでお試しください.


 

 

上に戻る