2022年2月18日金曜日

ソフトペア制約の仕様変更

 ペア制約は、最も複雑な制約で、特に>=は、設定しても中々言うことを聞いてくれない場合が多かったと思います。今回、数理ソルバを実装するにあたり、複雑すぎる制約を見直し、ペア制約の実装をもう少し容易にすることを考えました。

ペア制約で AならばB の実装は、基本!A|B です。それのソフト実装は、コストをもった、バイナリ変数を追加します。数理的に書くと

(1-A)+B+C >=1 

となるようにするものとします。基本的には、現在も上式に従いますが、Aや、Bに>=が入った場合、現在は異なる実装になっています。殆ど同じですが、厳密に言うと違います。(複雑すぎるので説明は割愛します。)

具体例

Aグループ3人以上 ならば Bグループ2人以下

という制約の場合、次のA,Bに関して、次のいずれかが成立すれば、よいことになります。

1)Bグループ2人以下(B)

2)Aグループ3人未満(!A)

2)も許容されることに注意してください。つまり、Aグループが3人未満なら、Bグループには何の制約も存在せず、Bグループは、2人以上であっても2人以下であっても、何人でもよいのです。

同様にB側も、Bさえ成立すれば、Aの状態には依存しません。

ソフト制約は、上記の全てが出来ないときに初めて働く仕様です。つまり、1)も2)も満たせないときに、コストが発生するものとします。真理値表を書いてみれば、上記が不成立となるのは、A!Bのときのみです。つまり、Aグループ3人以上で、Bグループが3人以上のときだけコストが発生します。


現状は、ソフト制約の場合にさらに基数制約の許容エラー数も関係するような実装になっていました。今回数理的ソルバをペア制約化するにあたり、仕様を整理しました。ハードペア制約については変更ありません。

仕様変更は、2月21日予定版から適用になりAlgroithm1/2/3/4共同じ仕様となります。









0 件のコメント:

コメントを投稿