この問題を解決するために必要なのは、IP (Integer Programming) の定式化です。あなたの直感は正しいです。これは割り当ての問題に非常に似ています。基本的に、特定の日に働くように労働者を割り当てています。
問題を定式化する手順は次のとおりです。
決定変数: (英語で) どの労働者がどの曜日に働くか?
日t (1..14) と労働者w1 から w5 にラベルを付けましょう。
そう、
X_wt = 1 if worker w works on day t
X_wt = 0 otherwise
制約は、書き留めるのがかなり簡単になりました。毎日正確に 3 人の労働者が必要です。
X_1t + X_2t + X_3t + X_4t + X_5t = 3 for each t (1..14)
各ワーカーは最大 9 日間働くことができます。
(sum over t=1..14) X_wt <= 9 for each w (1..5)
そして最後に、目的関数:
C_wt
t 日に労働者 w を雇うコストを とする。二重合計を使用すると、次のようになります。
Min (sum over w 1..5)(sum over t 1..14) C_wt
また、従業員の好みに何日も対応するために、さらに別のコスト セットを重ねることができますP_wt
。
それが基本的な処方です。実際の解を得るには、IP/LP ソルバー ( CPLEX
orExcel Solver
または R のoptim
ライブラリなど) が必要になります。
それが役立つことを願っています。