交通費自動取得して応援先割振最適化

 わたしのところにはたまに深刻そうな顔をした人がやってくる。
「若手を支店研修に出したいんですが、誰をどこに割り振るかでいつも時間がかかるんで、いい方法ありませんか?」
 とりあえず各参加者と協力してくれる支店との経路を見ないことには話にならん。これはそんなに難しくない。RPAとやらで乗換案内のサイトを検索し、運賃と所要時間を出せば良い。ただしこれだけのことでも作る人によって差が出ることは覚えといてね。
 NTTがRPAのデモとして同じようなことをやっていたんだわ。私はちょっと意地悪を言った「ここに大手町、って入れたら動くんですか?」詰まりましたね。知ってますよ。止まるんでしょ。そのやり方では愛媛の大手町と東京の大手町を区別できないからね。いかにもデモ用です。(なんで大手町駅が別にあるんだ!とぼやく人多いでしょうが日本の城郭の構造上「大手門」は普通にありますから、逆に「大手町」駅が全国で2つしかないことに感謝すべきです。)

 私の場合どうしたかと言うと、まず「乗換案内が使っている駅コード表を取得」した。そんなものどこにあるかって?HTMLソース直接見ればわかるよ。つまりそれ専用にRPAツールを自作したってことだ。
 続いてそれをMicrosoft Excelシートに一覧表にして挟み込む。
 別のシートに研修を受ける社員の最寄り駅を入れて、協力してくれる支店の最寄り駅を入れる。実際に検索するのに先立ってボタンを押すと、同名の駅がある場合「どっちだ」と選択できるようにしておく。選択した方の駅コードをセットする。
 こうやって駅コードで経路検索できるようにするとちょっといいことがある。検索のCGIをURLから直接起動できるのだ。つまり手で経路検索する操作を真似るのではなく、いきなりURLに駅コード、時刻、結果表示の優先順位その他の条件を打ち込んで結果画面を一発で出せる。結果的にさきほどのNTTのデモの倍以上の速度が出せるということだ。

 こうして、各人が各支店に出向いた場合の運賃と所要時間が総当りで出せる。しかも駅名の衝突は最初の段階で回避できるから、検索中は他の仕事ができる。昼休みに実行してもいい。昼ごはんから戻ってきたところで「ああ、できてるできてる。」

 ところが問題はここからだ。どうやって割り当てる?ここで、使ったこともない「AIを利用しよう」と思う人が多そうだが、AIには正当性がテストできないという致命的問題がある。とうわけで素直にロジックで考える。たまたま高校野球の名門校のそばを通ったときに気がついた「ドラフトだ」。
 総当りで最も運賃が少なかった組み合わせについて支店側が指名権を持つ。これで組み合わせ確定。次に運賃が少なかった組み合わせについて、と順次決まってゆく。ドラフトと違うのは各支店が1名ずつ指名してゆくのではなく、他より安い運賃で研修生を受け入れることができる限り、支店は何人でも連続して指名できることだ。
 当然これだけでは決まらないこともある。運賃が同額の研修生が2人以上いた場合だ。このときは指名権が研修生側に移る。所要時間が短いほうが優先されるということだ。
(この指名が重複した場合は、選手に選部権利を与える、というの、プロ野球のドラフトでもやってくれないかなあ。反発は少ないと思うのだが。どうせ重複しそうな選手なんて事前にわかるんだから。)

 かくしてお昼休みから帰ってきたあと、ボタンを押してマクロを実行すると、あっという間に割当が終わってしまう、というああコンピュータを導入してよかったなあ、と思えそうな瞬間が待っていることになる。
 ただしこの方法、弱点がある。途中まで通勤定期を利用する場合を考えていないのだ。しかしそこはいい方に捉えてほしい。運賃が安いということは研修参加者の家から近いということでもある。経費を最小にすると言いながら実は個人が楽になるように作っているというヒューマニズム精神の顕れとして。

 ちなみに、言うまでもないがこのプログラム、実際には諸般の事情で使われていません。
 その中には新型コロナというのも含まれますが。

フリーソフト開発秘話、目次
ホーム