シフト最適化(ケーススタディ7)
注意:このケーススタディは,幾つかの企業のコンサルティングから抽出したもので,特定の企業を想定したものではない.データや登場人物は,架空のものである.
サービスネットワーク設計で成功したあなたに,今回は拠点でのシフト最適化の依頼が来た.
拠点では,入庫された荷物を行き先別に仕分けし,出庫する作業が行われているが,仕分け作業に膨大な時間が割かれている.
現状では,非常に忙しいピーク時間帯があるため多くのスタッフを当てている状態だ.
ただし,ピーク時以外は,行う作業がなく手持ち無沙汰になっている作業場もあるようだ.
ここでは,午前9時から21時の12時間を考え,スタッフの適切配置を考えることにする.現状では,30日の希望シフトを出してもらって,ほぼ希望通りに来てもらい,当日来た人数をもとに配置を経験的に(Excelで)決定しているが,これにSCMOPTに含まれるOptShiftを用いた最適化を適用することにする.以下では,OptShiftの用語を用いて解説するものとし,OptShiftの用語にならい,作業員はスタッフ,作業はジョブと呼ぶものとする.
計画期間は30日(1ヶ月分)の計画を建てることにする.これは,今までのルール通りにしたいという現場からの要望に基づくものである.
作業量は曜日によって異なるので,休日,曜日などの情報をもった日データを準備する.ちなみに,今回考える5月のスケジュールは休日が多いので,日本のカレンダーデータを用いることにする.
この会社では,休憩時間は4時間を超えると1時間の休憩をとるという規則が徹底されている.これは,以下の表のようになっており,5時間働いたら1時間休憩,10時間働いたら2時間休憩となっている.
また,期間(period)が3から始まるのは,一度出社したら,最低でも3時間は働くことを表している.
ジョブは,仕分けが中心だが,冷凍の仕分けと方面別の仕分け(2つ)に別れている.これらのジョブは,忙しくなる時間帯が異なるので,できればスタッフを複数のジョブに割り当てたいのだが,現状は忙しいときにはフル回転で,仕事がないときには休憩という感じになっている.
スタッフは全員時給1200円であり,人によって休日や最大稼働時間,出勤可能時間帯が異なる. また,希望する休日や,できるジョブの種類も設定できるようになっている.
ここでは,20人のスタッフが出勤可能とする.
最後に,各ジョブに対する必要人数を現場からの聞き取りで収集する.ここでは,平日,日曜,休日で作業量が大きく異なることから,3通りの時間帯別の必要人数データを準備する.
以上のデータを入力し,バイト代の総額を目的関数と設定する.さらに,制約逸脱のペナルティ費用も設定し,なるべく制約を満たしてくれる解を探索することにする.
ヒヤリングをすると,各制約を逸脱したときのペナルティは,以下のように推定される.もちろん,これらのペナルティを色々変更して,なるべく現場にあった解を探索する必要がある.
- スタッフの人数の下限: 人数が足りないとスタッフに過剰の負担がかかることになる.これが続くとバイトが集まらなくなる可能性があるので,1人足りないと1万円のペナルティと設定する.
- スタッフの人数の上限: 1人多いとその分の時給が会社の損になる. 時給は1200円だが,余裕をもって作業することができると,離職率が減るので,必要人数より1人多いと1000円のペナルティと設定する.
- ジョブチェンジ: スタッフは途中でジョブを変わることができる.当然,作業場は異なるので,移動する必要があり,移動時間分の時給が会社の損出になる.ここでは,作業場が比較的近いので,ペナルティは(頻繁なジョブチェンジを避けるために)1円と設定する.
- 休憩の違反: 稼働時間に対して決められた休憩時間は「必ず」守るものとする. また,休憩が最初と最後に入ることは望ましくはないが,現場ではそれほど問題にしていないので,8000円と見積もることにする.
- 月間稼働日数: 今月働きたい日数は,税金の関係で重要だ.これを逸脱すると来月以降に出勤してくれなくなるかもしれない.シフト最適化は動的な問題であり,今は1ヶ月の「静的な」問題を考えて,最適化しているが,来月以降も考慮して解かないと,年度末に大変なことになる(バイトが誰も来てくれない!).よって,スタッフ自身が,自分で今月はこのくらい働こうという希望日数を入力し,それからの逸脱をペナルティとする.ここではそれを,5000円と設定する.
以上のパラメータをもとに最適化すると,以下の結果が得られる. 総費用は,116万程度でこれは現状より10%くらい低いようだ.スタッフの必要人数を超過した人数の合計は,30日間で264時間となった.ジョブは3種類あるので,ひとつのジョブあたり1日3人くらいの余裕が必要ということになる. 他の制約逸脱はジョブチェンジの回数があり,30日で69回となった.1日あたりにすると2回程度であり,作業場が近いため,問題はないと判断される.
例として,4日目のシフトのガントチャートと,各ジョブに割り当てられた人数と必要人数を図示してみる.
この最適化された結果では,余剰なスタッフが割り当てられているが,そこにジョブが入る可能性もあるので,このまま使うことにした.
このように月次のシフト最適化は比較的簡単に解くことができ,得られる結果も,様々なオペレーショナルな条件を満たしたものとなる.
より大規模な問題の場合には,さらに様々な工夫を追加する必要があるが,制約最適化ソルバーSCOP(OptShiftに使われている最適化ソルバー)を使えば,それも比較的容易である.