1章. はじめに

  私は高校に入学してから今日まで幾つかのアルバイトを経験してきた。大抵のアルバイト先での勤務シフトは、自分の勤務希望を元に上司が調整をして作られていた。そして私自身 それに対して何の疑問を持つこともなく、それが当然のことだと思っていたが現在のアルバイト先では違った。
 現在私は、社員20名・パートナー約200名で運営されている会員制ディスカウントストアーの庶務で働いている。このアルバイト先ではアルバイト職員をパートナーと呼ぶ。庶務課はパートナー10名で構成されており主な仕事は電話交換で、ほかに出納室・採用教育・POSの担当に分かれている。この庶務の勤務シフトは毎月パートナーの提出する勤務希望表を調整することもなく、そのまま1ヶ月の勤務シフトとなる。
 この勤務シフト作成方法は一見 自分の都合で働くことができ良さそうに思えるが、実際働いてみると幾つかの問題があった。 そこで私はそれらの問題に対して“最適性の保証のある勤務シフト”作成を試みることにした。
 この今までの勤務シフトは どのアルバイト先でも言えることだが、通常上司の作成する勤務シフトには どのような過程を経て作られたものなのかが明確でなく、それと同時に、その勤務シフトが本当に最適であるという保証もない。そこで私は手作業で作成した勤務シフトと最適化ソフトLINDOで作成した勤務シフトと比較をし、最適性の保証のある勤務シフトを提案後、現場へのフィードバックを試みる。
 結果的には、手作業で作成した勤務シフトもLINDOを用いて作成した勤務シフトも同じような勤務シフトが得られた。 これらの原因には、今回利用したLINDOが非力であったこととパートナー要員の不足、そして勤務希望調査ミスが挙げられた。そこで最後に これらの欠点を克服する“新勤務シフト作成法”を提案し、その効果についても言及する。

 また この研究をおこなうにあたり、オペレーションズ・リサーチではアルバイトの勤務シフト問題を取り上げた前例がないことから、看護婦のスケジューリング問題を参考に研究を進めた[1]。 

 

2章. 勤務シフト作成の現状

 これから作成しようとしている勤務シフトとは、ある1日に誰がどの時間帯に勤務するかを示した勤務表である。このアルバイト先では10日までに各パートナーが勤務希望表をマネージャーに提出し、2〜3日中に翌月の1ヶ月分の勤務シフトが発表される。

  2.1 現状

 研究を始めた当初 庶務課では全く勤務シフトの調整が行われていなかった。
 他部署の勤務シフトは、毎月パートナーから提出される勤務希望表を各マネージャーもしくは リーダーがパートナー個人の能力を考慮しながら、今までの経験を元に手作業で作成される。
 しかし庶務では、パートナーの勤務希望表がそのまま1ヶ月の勤務シフトとなるため、会社側・パートナー側の双方から問題が生じていた。

  2.2 問題点

  勤務シフトの調整を行なっていない勤務シフトは極端に人の多い日と少ない日の偏りがあり、 会社側ではパートナーの多い日に必要以上に支払わなければならない人件費の問題、 少ない日には私たちパートナー側に生じる仕事量分担の負担問題が生じていた。

  2.3 手作業で勤務シフト作成

 そこでリーダーが勤務シフトの作成を任されるようになった。その際に必ず守るべき条件は以下の通りである。
   (T)毎日の各勤務シフトに支障を起こさないための条件:
        「各勤務シフトとも
上限人数厳守」
   (U)パートナー側の問題を解消するための条件:
        「各勤務シフトとも
下限人数確保」
   (V)仕事に支障を起こさないための条件:
        「各勤務シフトとも各
担当人員の確保」
 この条件を元に表計算ソフトを利用して以下の要領で
手作業で勤務シフトの作成をおこなった。
   @ 1日の勤務を9:00〜13:00・13:00〜17:00・17:00〜21:00の3つの時間帯に分ける。
   A 各1日の勤務シフトに上限人数・下限人数を入力。
   B パートナーから提出された勤務希望表を“調整前”として勤務シフトに入力。
   C 出勤(勤務可能)を”1”、公休(私用)を”0”で表示。
   D 縦計算で差を算出。
   E “調整後”の勤務シフト上で担当別に色分けする。
   F
禁止パターンを最優先に考え、個人能力・仕事などを考慮しながら差を0に近づける。
   G 勤務希望変更を行った場合、各個所を黒で色分けをする。
   H 絶対数の不足で勤務希望日以外に出勤となった場合、各個所に下線を引く。 

 2.4 問題点

 数ヶ月間 勤務シフトの作成を繰り返すうちに「毎回多くの時間を要する」「一つの勤務シフトを作成しても他の勤務シフトに応用が利かない」、 そして「勤務シフトの最適性の保証がない」という新たな問題に直面した。
 「毎月多くの時間を要する」「一つの勤務シフトを作成しても他の勤務シフトに応用が利かない」については、パートナーの勤務希望表提出からもわかるように、パートナー個人の制約はワンパターンであることがなく、常に私用などで毎月異なっている。そのため毎月多くの時間を費やして勤務シフト作成をおこなわなければならない。また「勤務シフトの最適性の保証がない」は、2章3節Fの「個人能力・仕事などを考慮・・・」という経験を元に調整をおこなうという行為が原因で、大抵の勤務シフトに言えることだか「完成までの過程を説明することができる」勤務シフトはない。つまり、手作業で作成した勤務シフトは「最良の勤務シフト」とは言い切れないのではないかと考えられる。

 

3章. 勤務シフト作成問題のモデル化

 前節では手作業で勤務シフトの作成をおこなったが、ここからは勤務シフト作成問題を数理計画問題として最適性の保証のある勤務シフトの提案を試みる。
    《条件》
      (T)「各勤務シフトとも上限・下限人数内に収める」
      (U)「各勤務シフトの担当人員確保」
      (V)「禁止パターン勤務シフトを入れない」

    《目的関数》
      「各勤務シフトのパートナーの合計数と上限・下限人数との差を最小にする」

 

4章. 勤務シフトの作成

 4.1 LINDOとは

 LINDO(Linear Interactive and Discrete Optimizer)は、線形計画法(LP)、整数計画法(IP)、二次計画法(QP)などといった 何かを計画する問題を解決する簡便で強力なソフトウェアである。 このような問題はビジネス・工業生産・研究開発・政府などの分野で起きるが LINDOが生かされ、その性能は製品の物流、原料の配分、生産管理や人員配置、 在庫管理等々...多くの分野で認められているものである。そして今回は、このLINDOを用いて前節で示した変数と制約式を入力し、最適性の保証のある勤務シフトを求める[2][3][4]。

 4.2 プログラムソース

 これから用いるLINDOのレベルは変数200個・制約式100本以内という制限があるため、今回は勤務シフト対象日数を半月に制限せざるおえなかった。 また半月に限定しても制限数を超えてしまうため、下限人員を割ってしまう勤務シフトに関しては、勤務希望表を元に勤務シフトを作成している以上コンピュータ上で人員補充することは不可能であると判断し、 実験対象を上限人員を超えている勤務シフトに限定しておこなった。
 禁止パターンである中抜け勤務シフトは、3つに分けた1日の勤務x,y,zのパートナーaの例を挙げて制約式にすると “ax+az<=ay+1”となる。 これは出勤を“1”公休を“0”で表示したときに、1日の勤務が“1・0・1”という非効率勤務を禁止するものであり、 axとazが“1”ならば必ずayも“1”でなくてはならないという制約を定式化した。LINDOの数式では変数は左辺という約束があるので“ax−ay+az<= 1”とする。このことにより会社側の交通費の負担とパートナー側の不満が多少解消される。
 実際 このデータを現場で生かすことは難しいと思うが、今回は手作業で作成した勤務シフトとの比較のためLINDOを用いて勤務シフトを作成する。

 4.3 結果

 結果的には手作業で作成した勤務シフトと同じようなデータが得られた。この原因には次の3つが挙げられる。
     @LINDOの利用制限
     Aパートナーの絶対数不足
     B勤務希望調査ミス

 まず@においては、今回用いたLINDOには変数200個・制約式100本以内という制限があったため、実験では半月分の変数540個・制約式270本でさえも変数97個・制約式98本まで削った。これは実験当初、毎回のプログラムの書き換えの手間を除くために出来る限り制約を固定しようと考えていたが、今回はパートナーからの勤務希望表を元に公休などの変数をなくしたため、制約式および変数を削減することができた。そのため次回 他の勤務シフトを作成する際には、制約式を立て直さなければならない。またLINDOの場合、目的関数に「延べ人数の最小化」を制約式数の関係で加えられなかったために、交通費が多くかかる効率の悪い勤務シフトとなってしまった。
 Aにおいては5日(土)の夜勤でもわかるように、制約を入れる以前の問題でこれは調整どころではなかった。そこでBの調整ミスに気付いた。
 これは5日(土)の例でも言えることだが、当日は1人のパートナーが出勤してマネージャーと共に働いた。これは以前まで勤務希望表が、そのまま1ヶ月の勤務シフトになっていたことから、パートナー自身が自ずと私用がなくとも休日を作ってしまい、調整以前に個人で休日という制約を作ってしまっていることが大きな原因といえる。実際、ほかの勤務シフトにおいても個人的に声をかけて出勤してもらうケースが多い。そのため今回の制約も完全なものとは言えず、声をかけて出勤してもらえる“手作業の勤務シフト”の方が目的関数を最小にするという面においては有利な結果となった。

 

5章. 新勤務シフト作成法の提案

 5.1 提案

 4章の結果の中から、私はBの勤務希望調査ミスの問題に対して“勤務可能時間表”という形で新たに勤務シフト作成全体の仕組みを変更して勤務シフト作成を提案したい。
 以前までの“勤務希望表”との大きな違いは公休の記入方法で、特定の私用日以外は「週に何日公休を取りたいか」という形で公休を固定しないで提出してもらうものである。

 5.2 モデルの変更

 今回も手作業とLINDOで実験をおこなうわけだが、LINDOの場合 変数および制約式を制限内におさめるため、1日の勤務を3つから さらに9:00〜17:00・17:00〜21:00の2つに分け、それぞれ昼勤務シフトと夜勤務シフトで実験を試みた。これは今回の勤務シフトのように9時からのパートナーが皆17時まで勤務可能であったことから可能になった実験である。また、このことにより禁止パターン勤務シフトは無くなる。

 5.3 プログラムソース

 4章の実験に比べ今回の実験は、パートナーの変数および制約式の数が増えるため1週間分の勤務シフト作りとなってしまった。
 今回の場合 変数79個・制約式90本で収めることができたが、今後のために1週間分の最大の変数と制約式数を考慮した上でプログラムを昼勤務シフトと夜勤務シフトの2パターンに分けて作成した。

 5.4 結果

 今回は“勤務可能時間表”という形で提出してもらったが、一箇所だけ下限人数に満たない勤務シフトがあった。そのため 調整をおこなうことができず、4章3節でも述べたように実際当日はマネージャーを加え2人で勤務した。 しかし、それ以外においては同じ期間で比較するとわかるように、目的関数である差を6→1と5ポイントも減らすことができ最小になったといえよう。
 さらに今回の1ポイントの差を0にするには勤務可能時間表に加え、やはり前節でも述べた「新パートナーの導入」および「LINDOの利用制限を外す」ことが必要であるといえる。

 

6章. おわりに

 この研究を始めた当初の目標は「最適な勤務シフトの提案をし現場へフィードバックさせる」であったが、98年9月27日をもって このアルバイト先が閉店してしまったため実現不能となってしまった。そのためアルバイト先の方から評価を頂くことが出来なかったわけだが、新勤務シフト作成法の結果 目的関数である差を6→1と5ポイント減らすことにより、問題原因の一つである「勤務希望調査ミス」が実験不足ながらも解消することができたといえよう。
 今回の研究では実験以前の問題が幾つかあり、LINDOの性能を上手く生かすことができなかった。しかし 今後 実験をおこなう場合、勤務可能時間表に加え4章3節で述べた「新パートナーの導入」と「LINDOの利用制限を外す」という条件を満たしたうえで、この研究に取り組んでもらえると また違った勤務シフトを得られると同時に、実際の現場で利用可能な“最適性の保証のある勤務シフト”の提案が可能となるだろう。

 謝 辞

 お忙しい中 貴重な時間と御助言を頂いた根本俊男先生、 ナース・スケジューリング問題の講演およびお話を頂いた成蹊大学池上敦子先生、 またパートナー勤務についてお話しを頂いた会田孝幸次長、 いろいろと相談に乗ってくださった松沢雅子さん、勝田敏正さん、研究室の皆さん、そして家族に心から感謝いたします。 本当にありがとうございました。

 参考文献

[1] 池上敦子, 丹羽明, 大倉元宏: 我が国におけるナース・スケジューリング問題, オペレーションズ・リサーチ, (1996) 41-8, 436〜442.
[2]
根本俊男 著: 数理計画ソフトウェア LINDO の使い方 最初の一歩, 文教大学, (1998).
[3] L.Schrage 著: 実践数理計画法 --LINDOを用いて-- , 朝倉書店, (1992).
[4] SCS住商情報システム株式会社 編: LINDO users manual.

98年12月11日完成