TYPE: OPTIMIZATION ENGINE
STATUS: OPERATIONAL
SCALE: MULTI-SITE(想定)
シフト最適化エンジン
高速道路のSA/PAのように複数拠点にまたがって勤務するスタッフのシフト作成を想定し、Python(Google OR-Tools CP-SAT)による厳密な組合せ最適化計算と、AIによる自然言語での条件整理・トレードオフ説明を組み合わせたエージェント設計のシステムです。
「守るべき制約(ハード制約)」と「揺らせる希望(ソフト制約)」を数式に落とし込みながら、現場の言葉で調整できる仕組みを目指しました。
デモを試す ↗※体験用のデモ環境です。架空のダミーデータで動作します。入力内容は毎日リセットされます。
背景・課題
※本ページの内容は一般化した課題設定・架空のデータに基づく紹介であり、特定の企業・拠点・顧客の情報を示すものではありません。
希望シフトの個別調整
拠点・個人ごとに異なる勤務希望や休暇希望をヒアリングし、手作業で組み合わせる負担が大きい。
法定労働時間・休憩ルールの遵守
週の上限時間、勤務間インターバル、連続勤務日数などの法令順守を目視で確認する煩雑さ。
欠員発生時の即応
急な欠勤が出た際、条件を満たす代替要員をゼロから探し直す時間的コストが大きい。
技術構成
Python
制約条件の記述からバックエンド処理まで、システム全体の中核を担う言語。
OR-Tools CP-SAT
Google製の制約プログラミングソルバー。数千変数規模の組合せ最適化を実用的な時間で解く。
FastAPI
シフト生成リクエストや計算の進捗を扱う軽量なAPIサーバー。
React
制約条件の入力と、生成されたシフト結果を確認するフロントエンド。
SQLite
スタッフ情報・希望条件・生成履歴を保持する軽量データベース。
エージェント設計の考え方
自然言語での条件整理とトレードオフの説明
現場担当者が入力する「土曜は経験者を1人は入れたい」「Aさんは水曜が休み希望」といった自然文の要望を、AIが制約条件として解釈・整理します。すべての希望を満たせない場合には、その理由とトレードオフを現場の言葉で説明する役割も担います。
- 自然文の要望を構造化された制約に変換
- 充足できなかった希望とその理由を言語化
- 現場向けの調整案・代替案の提示
厳密な組合せ最適化計算
整理された制約条件を線形制約・論理制約として数式に変換し、Google OR-ToolsのCP-SATソルバーが厳密に解を探索します。人手では現実的な時間で見つけきれない、膨大な組み合わせの中から制約を満たす配置を計算します。
- ハード制約の厳密な充足
- ソフト制約のスコア最小化・最大化
- 大規模な組合せの高速探索
HARD CONSTRAINTS — 守るべき制約
- 週の法定労働時間の上限
- 勤務間インターバルの確保
- 必要資格・スキルを持つ人員の配置
- 連続勤務日数の上限
SOFT CONSTRAINTS — 揺らせる希望
- 個人の休み希望・シフト希望
- 特定シフトへの偏りの是正
- 経験者と新人のバランス配置
- 通勤負担など個別事情への配慮
想定規模・発展性
特定の拠点数に限らず、全38事業場規模への対応を想定した拡張性を意識して設計しています。 SCALE: MULTI-SITE / 想定規模であり特定顧客の情報ではありません
外部への提供も見据え、PyInstaller / Nuitka による単一実行ファイルへのパッケージ化を検討しています。 PACKAGING: PyInstaller / Nuitka(検討中)
デモ画面(イメージ)
制約設定パネル
週間シフト表(プレビュー・サンプル)
| スタッフ | 月 | 火 | 水 | 木 | 金 | 土 | 日 |
|---|---|---|---|---|---|---|---|
| スタッフA | 早 | 早 | 休 | 遅 | 早 | 遅 | 休 |
| スタッフB | 遅 | 休 | 早 | 早 | 休 | 早 | 遅 |
| スタッフC | 休 | 早 | 遅 | 休 | 早 | 早 | 休 |
| スタッフD | 早 | 遅 | 早 | 休 | 遅 | 休 | 早 |
| スタッフE | 休 | 休 | 早 | 遅 | 早 | 遅 | 休 |
※デモ画面のイメージです(開発中)。実データや実在の勤務先とは一切関係ありません。