ページ移動: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を有効にして下さい!

関連

×
PageTop