はじめに
「Julia×JuMPで病棟シフト最適化①~④」シリーズでは、数理最適化を用いて複雑な病棟シフトを自動生成する手法をご紹介してきました。その一方で、昨今のAIの著しい進化に伴い「AIさえ使えばプログラマ不要でなんでもできる」という声も聞かれるようになりました。
果たして、病棟運用における多種多様かつ厳密な制約をAI単独で正確に満たしたシフト表を得ることは可能なのでしょうか。本稿では同一要件をChatGPT4o mini、Claude sonnet 4、chatGPT 5、geminiに投げて出力を比較し、AIだけでプログラマの手を完全に置き換えられるのかを検証します。
共通プロンプト
あなたは総合病院の1病棟の看護師長です。これから指示する内容に従ってコンテンツを作成してください。
#目的
・2025年8月1日~8月31日のシフト表を作成する
#制約
・看護師25人(女性23人・男性2人)
・看護師の名前は仮に看護師1~看護師25とする
・看護師12と看護師16は男性
・全勤務形態(休:休日, 日:日勤8:30~17:15, 夜:夜勤入り17:15~0:30, 明:夜勤明け0:30~8:30, 早:早番7:30~16:15)
・禁止する連続シフト("夜夜", "休明", "明明", "明夜", "夜休", "夜日", "日明", "明日", "夜早","早明","明早")
・夜勤入りの次の日の勤務は必ず夜勤明け
・全スタッフ10~12回の休日を設ける
・夜勤は必ず毎日2人必要
・早番は必ず毎日1人必要
・各スタッフの夜勤回数はできるだけ均等にする
・土日の日中の勤務者(日勤+早番)は7人とする
・平日の日中の勤務者(日勤+早番)はできるだけ平均化する
・男性スタッフのみの夜勤は禁止とする
・看護師5と看護師6の同時夜勤は禁止
・看護師2と看護師12の同時夜勤は禁止
・3連休以上の連休は極力減らす
・5連続勤務は極力減らす
・6連続以上の勤務は禁止
#出力形式
・markdown形式
・結果の一部のみではなく、全結果を出力する
・全員分の日付ごとの勤務形態を一枚の表に並べる
・各スタッフの夜勤回数と休み回数の集計列が必要
・各日の日勤者数と夜勤者数の集計行が必要
・横軸に日付
ChatGPT4o miniの出力例
| 看護師 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 合計夜勤 | 合計休日 |
|----------|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|---------|---------|
| 看護師1 | 日 | 日 | 日 | 日 | 休 | 休 | 休 | 日 | 早 | 日 | 日 | 夜 | 夜 | 明 | 休 | 休 | 休 | 日 | 日 | 日 | 日 | 日 | 休 | 2 | 11 |
| 看護師2 | 日 | 日 | 早 | 日 | 日 | 日 | 日 | 休 | 休 | 夜 | 明 | 夜 | 休 | 休 | 日 | 日 | 日 | 日 | 早 | 日 | 日 | 日 | 休 | 3 | 11 |
| 看護師3 | 休 | 休 | 日 | 日 | 日 | 日 | 日 | 早 | 早 | 日 | 日 | 夜 | 明 | 夜 | 休 | 休 | 休 | 休 | 日 | 日 | 日 | 日 | 日 | 2 | 11 |
…
(以下省略)
- 問題点
6連続以上勤務、禁止連続パターンなど多くの制約が守られておらず、実用不可。
Claude sonnet 4の出力例
| 看護師 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 夜勤回数 | 休み回数 |
|--------|---|---|---|---|---|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----|----------|----------|
| 看護師1 | 日 | 日 | 休 | 日 | 日 | 休 | 日 | 早 | 休 | 夜 | 明 | 日 | 日 | 休 | 夜 | 明 | 休 | 日 | 日 | 休 | 日 | 早 | 休 | 夜 | 明 | 日 | 日 | 休 | 日 | 日 | 休 | 3 | 10 |
| 看護師2 | 早 | 休 | 日 | 日 | 休 | 日 | 日 | 休 | 夜 | 明 | 日 | 日 | 休 | 日 | 休 | 日 | 早 | 休 | 日 | 日 | 休 | 夜 | 明 | 日 | 日 | 休 | 日 | 日 | 休 | 早 | 日 | 2 | 10 |
| 看護師3 | 日 | 日 | 休 | 早 | 日 | 休 | 日 | 日 | 日 | 休 | 夜 | 明 | 日 | 日 | 休 | 夜 | 明 | 休 | 日 | 日 | 休 | 日 | 日 | 休 | 早 | 日 | 休 | 夜 | 明 | 日 | 日 | 3 | 10 |
途中省略
| 看護師24 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 夜 | 明 | 休 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 1 | 10 |
| 看護師25 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 日 | 夜 | 明 | 休 | 日 | 日 | 日 | 日 | 日 | 日 | 1 | 10 |
-
良かった点
夜→明けのルールは反映 -
問題点
最長22連勤が発生するなど、連続勤務制約が無視されている。やはり実用不可。
chatGPT 5の出力例
看護師 8月1日 8月2日 8月3日 8月4日 8月5日 8月6日 8月7日 8月8日 8月9日 8月10日 8月11日 8月12日 8月13日 8月14日 8月15日 8月16日 8月17日 8月18日 8月19日 8月20日 8月21日 8月22日 8月23日 8月24日 8月25日 8月26日 8月27日 8月28日 8月29日 8月30日 8月31日 夜勤回数 休み回数
看護師1 日 休 休 日 休 休 日 日 休 夜 明 休 日 日 休 休 日 休 休 日 日 休 日 夜 明 休 休 日 日 休 3 13
看護師2 休 夜 明 休 日 日 休 休 日 日 休 日 夜 明 休 休 日 日 休 休 日 日 休 日 休 夜 明 休 休 日 2 13
看護師3 早 日 日 休 休 夜 明 休 日 休 日 日 休 休 日 早 日 日 夜 明 休 休 日 日 休 日 休 休 日 日 3 11
途中省略
看護師24 休 日 日 休 夜 明 休 日 日 休 日 日 休 休 日 日 休 休 日 日 休 日 日 休 夜 明 休 休 日 日 3 12
看護師25 日 休 休 日 日 休 休 日 日 休 日 日 休 休 日 早 日 日 休 休 日 日 休 日 日 休 休 夜 明 休 2 12
日勤者数(日+早) 13 7 7 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13 13
夜勤者数(夜) 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
- 問題点
夜勤回数と休日回数の集計が実シフトと大きくずれている
8月31日分の勤務が出力されず実用不可
Geminiの出力例
名前 8/1 (金) 8/2 (土) 8/3 (日) 8/4 (月) 8/5 (火) 8/6 (水) 8/7 (木) 8/8 (金) 8/9 (土) 8/10 (日) 8/11 (月) 8/12 (火) 8/13 (水) 8/14 (木) 8/15 (金) 8/16 (土) 8/17 (日) 8/18 (月) 8/19 (火) 8/20 (水) 8/21 (木) 8/22 (金) 8/23 (土) 8/24 (日) 8/25 (月) 8/26 (火) 8/27 (水) 8/28 (木) 8/29 (金) 8/30 (土) 8/31 (日) 夜勤回数 休日回数
看護師1 日 日 休 夜 明 休 日 日 早 休 夜 明 休 日 日 休 日 休 日 早 日 休 夜 明 日 休 日 日 休 早 日 4 11
看護師2 夜 明 休 日 日 休 日 夜 明 日 休 日 日 休 日 夜 明 休 日 日 休 夜 明 休 日 日 休 日 日 休 夜 4 11
看護師3 休 日 日 休 夜 明 日 休 日 日 休 日 早 休 夜 明 休 日 日 休 日 日 休 日 早 休 日 早 休 日 休 4 11
途中省略
看護師24 休 日 日 休 日 休 日 日 休 日 休 早 日 休 日 日 休 日 休 日 日 休 日 休 日 日 早 休 日 休 日 2 12
看護師25 日 休 日 日 早 休 日 休 日 日 休 日 休 日 日 休 日 休 日 早 日 休 日 休 日 休 日 日 休 日 休 2 12
日勤者数 19 16 17 18 17 17 18 17 17 18 18 18 18 18 17 17 18 18 17 18 17 17 17 17 17 18 18 18 17 18 18
早番者数 2 1 2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
夜勤者数 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
- 問題点
chatGPT5同様に夜勤回数と休日回数の集計が実シフトと大きくずれている
日付ごとの夜勤者数/日勤+早番数も実割当と一致せず頻繁に誤表示が多く実用不可
検証結果まとめ
- AI各モデルともに、複雑な連続勤務・相性・男女比など多数の制約をすべて満たすシフト表を直接出力するのは難しい。
- プロンプトをさらにブラッシュアップして改善を図れる可能性はあるものの、病棟師長に高度なプロンプト設計を期待するのは現実的ではない。結果として、「AIよりも、やはり自分でシフト表を作成するほうが安心」という結論に至るだろう。
- 現状では、専用に設計・チューニングされた数理最適化モデルが、実務レベルの細かな運用ルールを確実に反映する最善策と言える。