最適化セミナーのご案内

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(w) ==> softConstraint(w,0,1)[p = x*weightと等価]
  • 第3引数の省略
    softConstraint(w,a) ==> softConstraint(w,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(w)のような記述は,バージョン10の省略規則により同一なものとして計算されます.そのため,バージョン8, 9で作成したモデルのsoftConstraint関数はバージョン10でも変更する必要はありません.


 

 

上に戻る