ツール
python3
wxpython

日程調整の多重割り当て支援ツール

スケジュールがそれぞれ違う学生に対して,スケジュールがそれぞれ違う学生から実験協力を依頼する・・・という多対多の日程調整を効率化するために作った.
こんなの本来はbotの仕事であって人間の仕事じゃない(半ギレ)

GitHub→https://github.com/sh141/Multiple-Schedule-Adjuster
※MITライセンス.Windows用にexeも置いたが,詳細な動作確認はしてない

こんなときに使える

使うとこんな感じ.
msa01.jpg

北海道さん~神奈川さんまでの14人に,Aさん~Jさんまでの10人が実験協力依頼をする,という構図.

  • A~Jは実験内容が様々で,「3人同時にやりたい」とか「1週間空けて2度やりたい」とか条件がある
  • 一方の北海道~神奈川も全日出られるわけではなく,日によって講義やバイトがある
  • 「何日の何限に誰が空いてるか」は整理できた.が,依頼する側とされる側の条件を満たしつつ実験協力を割り当てるのはつらい

例えば依頼する側のA~Jが全員「4人欲しい!」と要求したら,必要な回数は40回.

北海道~神奈川に理想的な割当ができても,1人平均3回以上の協力をしなければいけない.

楽になること

以下の恩恵を受けながら,アプリ上で割当表を編集・試行錯誤できる.

★被割当者(北海道~神奈川)の負担数計算

アプリの「負担表」には,被割当者ごとの負担数が計算される.

上図では北海道の負担数が4, つまり割当者A~Jのうち4人分の実験に協力するということ.

「できる人が何人分でもやればいいじゃん」の環境なら不要だが,
「できるだけ負担を平等にしたい」とか「低負担にすることで確実に協力させたい」という場合は役立つ.

★重複割当の回避

上図の割当日程表(割り当て日程の一覧)には,「何日の何限に誰が協力するのか」がまとめられている.

同日程に割当が重複しないように頑張らねばならないが,人間なので手動ではどうしてもミスる.

そこで,もうアプリ側で重複者を出させている.上図なら,11/28の5限にある東京がA,F両方から割り当てられており,ダブルブッキング状態なのがすぐわかる.

欠点

  • 割当表で名前を書き間違えると,負担表にカウントされない(別人扱い)
  • 割当表では「時間帯」を考慮できない:例えば9:00~11:00の中で30分はA, 1時間はBに割当・・・は無理
  • CSVで「何か書いてある列」までしか使えない:何日程も使いたい場合は,上図の「割当1」みたいに,1行目に何か書いておく必要あり
  • 一時保存・上書き保存は無い:逐一CSV出力しとかないと,頑張ってる途中で落ちたらパー

使い方

上図のような形式で「割当表」,「負担表」それぞれのCSVを用意して読み込む(文字コードはShift-JIS?)

例えばこんなの↓

【割当表】

割当者 割当1 割当2 割当3
A
B
C
D

【負担表】

被割当者 負担数
北海道
青森
岩手
宮城

割当表の準備ができているなら「割当実行」ボタンを押す.負担表には負担数の計算結果が追記され,割当日程表が表示される.必要ならこの割当日程表を保存できる

割当表をこれから編集する場合は,割当表に直接書き込める.上図のように「日付,時間,名前,名前,...」と書いていく

割当表を編集→割当実行→負担数や日程重複を確認しながら,完成するまで試行錯誤

実際に試行錯誤してみるとこんな感じ.
msa.gif

おまけ(仕事にも使える?)

やったことはないが,割当パターンを「人×人」でなく「仕事×人」にすることもできそう.
(日程を順番通りにしてほしいな・・・)
msa02.png

感想

ICT利用の目的は自動化,という基礎概念をいい感じに使えたと思う.
恐らく「全員の日程や希望人数をもとに総当たりで最適な割当案を出す」ツールも実現できそうだが,作るのがつらすぎて無理.