概要:
10人×1週間 程度の制約条件付き勤務シフト表の場合、1秒未満で最適解算出可能。
必要なもの:
- ブラウザ+ネット環境
- 制約条件の表(下記のようなCSV)
入力データのCSV版はこちら
ブラウザ上で上記データをもとに最適解を計算したい方はこちら
実行結果:
CPU times: user 11.2 ms, sys: 3.04 ms, total: 14.2 ms
Wall time: 31.1 ms
目的関数 0.0
曜日 時間帯 結果
0 月 朝 従業員1従業員5
1 月 昼 従業員3従業員5従業員7
2 月 夜 従業員1従業員3従業員4
3 火 朝 従業員0従業員3
4 火 昼 従業員3従業員5従業員7
5 火 夜 従業員4従業員5従業員8
6 水 朝 従業員0従業員5
7 水 昼 従業員1従業員3従業員5
8 水 夜 従業員3従業員4従業員8
9 木 朝 従業員3
10 木 昼 従業員5従業員7
11 木 夜 従業員8従業員9
12 金 朝 従業員1従業員5
13 金 昼 従業員1従業員7従業員9
14 金 夜 従業員5従業員6従業員8
15 土 朝 従業員0従業員3
16 土 昼 従業員2従業員6従業員7従業員9
17 土 夜 従業員3従業員4従業員6従業員9
18 日 朝 従業員0従業員9
19 日 昼 従業員2従業員3従業員6従業員9
20 日 夜 従業員2従業員3従業員4従業員6
CSVデータ読み込み:
今回はGitHub上にアップロードしたCSVを読み込む形式
a = pd.read_csv('https://raw.githubusercontent.com/zaq9/test_nurse_scheduling/master/sc_sample_data.csv').T
コメント:
- 「スケジュール案にご不満ある方は、代替案をブラウザ上で作成し、関係者に調整の上、連絡くださいね♪ 」(というパターンも可能に)
- 検討課題:サイズが大きい問題&最適解がない場合への対応。多様な要望や状況を制約条件た目的関数に落とし込むための工夫。
参考:
-
遺伝的アルゴリズムでナーススケジューリング問題(シフト最適化)を解く
⇒ 今回の入力データはこちらから(約2分で計算可能とのこと) -
組合せ最適化でナーススケジューリング問題を解く ⇒ 今回はほぼこちらのソースコードを利用させていただきました
(エラーがでた表読込部分をCSV読込版に変更)