ページ移動:JavaScriptを有効にして下さい!
4.不可勤務の指定
「5日は早朝に用事があるので、4日は遅番をしたくない」のように、拒否したい勤務を指定します。
指定方法:
下図右側の黄色セルに不可勤務を指定。
ここで
指定した勤務と一致しないように、シフト勤務を割り当てることになります。
数式で表すと、相互の表で一致する番号の個数を算出、
それが0になるようにするのが制約条件。
一致する番号の個数は、配列数式を使用して、
{ =SUM((R4:X8<>"")*(C4:I8=R4:X8)) }
と記述。
これは、
右側のセルが空白でなく、かつ、左側のセルと値が一致しているセルの個数 を求めています。
ただし、特に配列数式を使用しなくても、
作業表を用意すれば
IF関数を使用して簡単に求めることができます。
配列数式については、下記を参考にしてください。
配列とは?
配列数式を極めたい
初期状態
初期状態は、
解の一つ(
条件を全て満足)から始めて下さい。
割り当て勤務無しの(全て0)は制約条件を満たす解なので、ここでは、下記のように
全て0を初期値としています。
適当な値から始めた場合、解にはなかなかたどり着きません。
(変数値が少なければ問題ありませんが、本例のように多数ある場合は、まず解無しとなります。)
ソルバーの条件設定フォーム
追加する制約条件は、
R10=0ですが、
条件を増やしたくないので、
前項の条件(連続勤務禁止パターン)との和(
R20=S18+R10)=0 としています。
実行結果
少々時間が掛かりますが、見事に下図のように解が求まりました。
連続不可勤務および、不可勤務ともに満たしています。
上記のようにも求まったシフト勤務は、かなり、バラツキがあります。
Aさんは週7日、Cさんは2日。これは不公平ですね。
次項では、このバラツキを最小化して均等に勤務が配置されるようにします。
ページ移動:JavaScriptを有効にして下さい!
関連