tmegos blog

スクールアイドルがすきなフロントエンドエンジニアのブログ

遺伝的アルゴリズムを使ってスケジュールを組むサンプル

tegetege-schedule.netlify.com

使い方

  1. 従業員数を入力します
  2. 1日に出勤すべき人数を入力します
  3. スケジュールを作成したい期間を指定します
  4. スケジュール作成ボタンで自動でスケジュールが作成されます
  5. ▽をクリックして、スケジュールを個別に修正することができます

出勤が○、休みが×で表示されます
従業員数を7人、出勤人数を5人とした例では、5/1はクルー1が出勤、クルー5が休み、のようになります

f:id:tmegos:20190503114012p:plain

スケジュールは作成ごとに異なるものができます
5/3のように、指定した出勤人数と生成された出勤人数が異なる場合があります が、従業員数と出勤人数が近い場合に起きやすいです

ソースコード

github.com

仕組み

遺伝的アルゴリズム(Genetic Algorithm: GA)を利用してスケジュールを作成しています
GAとは生物の進化を模倣したアルゴリズムです
答えの候補(個体)を遺伝子として表現し、その遺伝子が環境に適応しているかを評価します
適応している答えの候補が生き残り、次の世代に遺伝子を残します
世代を繰り返すことで、よりよい答えを見つけます

今回のスケジュールの自動生成では、

  • 個体:スケジュール案(○○○××○○×... のような遺伝子配列を持つ)
  • 環境:出勤人数を満たしているかどうか、連勤が少ないかどうか

のように設定しました

さいごに

遺伝的アルゴリズムを使ってスケジュールを作成する方法は昔からありますが、まだ実用化が少ないように感じます
バイトのシフトを組むのはとても大変で時間を要します
このような技術で負担が減ればいいなと思います

参考