Ans.まず、グループ定義で「新人属性」を定義します。新人属性の一要素として「新人」を定義します。
<欲しい集合は、グループ集合で作成>
Ans.まず、グループ定義で「新人属性」を定義します。新人属性の一要素として「新人」を定義します。
First Orderのリニアソルバは、前にも評価しました。HIGHS版では、PDLPのGPU版もあるのですが、Google OR-TOOLS版では、また別な改善がされているということなので評価してみました。
Scaling up linear programming with PDLP
が、残念なことに、「収束速度、精度から言って、問題がある」、INRC2や、SchedulingBenchmarksの記録更新用途には、使用に耐えないという結論に達しました。問題の性質上、Barrior Solver(内点法)によるソルバが有効である、というのは分かっていて、HIGHSの改善版
Funding for the IPM solver and beyond
を待っていたのですが、一向に出る気配がないので諦めてCOPTに依頼することにしました。
NEOSサーバ上のCOPTは、Simplexなので遅いです。CLPと大差ありません。
しかし内点法によるMittlemanBenchmarkによれば、圧倒的に1位です。
Ans. 次のように、休日の集合で2連休パターンを作り、パターン最初の曜日を「土」にします。最小を1としてソフト制約にすれば、「出来れば1回以上」になります。
これだけでOKです。<「出来れば、土日2連休」は、「明け後なるべく2連休」と深く関わっている>
ちなみに、この制約は、「明けの後はなるべく2連休」という制約と関係があり、この制約追加によって、「明けの後はなるべく2連休」制約の実現が難しくなります。
下図は、その様子です。土日休み1回以上が全スタッフ達成しているのに対して、「明けの後の2連休が、かなりの部分出来ていません。スタッフによっては、4になっているところがありますが、これは、4回エラーつまり、夜勤4回も2連休ではなかった、ということになります。
一応、今月とANDを取っておきます。この作業は無くても可です。
なので、単純に追加の記述のみでOKです。(包含関係になければ、単純な追加では済みません。)
Ans. ハード制約化すればよいです。
以下は、行制約レベル4でソフト制約されて例で、そのエラー許容量=0とすればよいです。ただし、ハード制約化することによって「解がない」状態になるリスクがあることに注意してください。