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

6.3.3 ソフト制約関数softConstraint

 softConstraint関数を使用すると,その行以降に出現した制約式をソフト制約として扱います.さらに,softConstraint関数へ与えた引数(求解オプション)により制約式の違反量の扱いの設定もできます.

 一般的なソフト制約への求解オプションの設定は,次のように3つの引数の値により行われます.

softConstraint(int weight, double a, double b);

 ただし,引数は全て非負で設定します.この時,ソフト制約の違反量をxとすると,そのソフト制約のペナルティ量pは,

p = (a * x * x + b * x) * weight;

という式により定義します.

 また,softConstraint関数の第2引数と第3引数は省略することができ,次のような規則により解釈されます.

  • 第2, 3引数の省略
    softConstraint(weight) ==> softConstraint(weight, 0, 1)[p = x * weightと等価]
  • 第3引数の省略
    softConstraint(weight, a) ==> softConstraint(weight, a, 0)[p = a * x * x * weightと等価]

 即ち,

softConstraint(1); // softConstraint(1, 0, 1)と等価
softConstraint(1, 2); // softConstraint(1, 2, 0)と等価

となります.

 softConstraint関数は,第2, 3引数を省略する時のみ引数に-1, -2を設定できます.それぞれハード制約,セミハード制約と解釈されます.

softConstraint(-1);
sum(a[i] * x[i], i) == 3; // ハード制約となる
softConstraint(-2);
sum(a[i] * x[i], i) == 3; // セミハード制約となる

 hardConstraint関数,semiHardConstraint関数,softConstraint関数が混在する場合は,後の行に記述されたものが優先されます.

 バージョン8, 9のsoftConstraint関数は,softConstraint(int weight)という書き方のみ可能でした.バージョン10から,上記のような形式になっています.なお,バージョン8, 9で作成したwcspモデルにおいて,softConstraint(weight)のような記述は,バージョン10の省略規則により同一なものとして計算されます.そのため,バージョン8, 9で作成したモデルのsoftConstraint関数はバージョン10以降でも変更する必要はありません.


 

 

上に戻る