ペアで、A,Bが禁止のとき
!(A&B);(1)
が、実装の中身になります。これをOR表現すると
!A+!B >=1;(2)
となります。もしくは、A+B<=1;(3)
です。ただし、A,Bは、Singleが上での条件で、Singleでない場合もあります。ORとANDです。AB共にAND集合の場合は、(2)式を拡張出来、
!A1+!A2+... !B1+!B2+...>=1;(4)
とすることが出来ます。この式の意味するところは、(1)式を満足させるには、独りのスタッフがそのシフトを満足しなければ十分である、ということです。
残念ながらOR集合が一つでも入った場合のペア禁止は、線形式で書くことが出来ません。AND/OR オペレータを用いる必要があり(4)のような簡単な式には出来ません。
が、実使用上の多くの場合は、(3)式が使えます。なので、線形ソルバが得意な形とすることが出来ます。現在のこのような最適化は行っていませんが、適用すれば、性能向上する可能性があります。
0 件のコメント:
コメントを投稿