FLAGSHIP PROJECT / FIG.02 DRAWING NO. UCW-SP-002
TYPE: OPTIMIZATION ENGINE
STATUS: OPERATIONAL
SCALE: MULTI-SITE(想定)
多拠点勤務のシフト作成を、数理最適化とAIエージェントで。

シフト最適化エンジン

高速道路のSA/PAのように複数拠点にまたがって勤務するスタッフのシフト作成を想定し、Python(Google OR-Tools CP-SAT)による厳密な組合せ最適化計算と、AIによる自然言語での条件整理・トレードオフ説明を組み合わせたエージェント設計のシステムです。

「守るべき制約(ハード制約)」と「揺らせる希望(ソフト制約)」を数式に落とし込みながら、現場の言葉で調整できる仕組みを目指しました。

Python OR-Tools CP-SAT FastAPI React SQLite AIエージェント
デモを試す ↗

※体験用のデモ環境です。架空のダミーデータで動作します。入力内容は毎日リセットされます。

COST FUNCTION — CONVERGENCE t = ITER.N
01 / BACKGROUND

背景・課題

The Problem
高速道路のSA/PAをはじめ、複数の拠点にまたがって勤務するスタッフのシフト作成は、担当者ごとの勤務希望、法定労働時間や休憩・インターバルなどのルール、急な欠員が出た際の代替要員の手配など、数多くの制約を同時に満たしながら組み立てる必要がある業務です。多くの現場では、こうした調整をExcelや紙ベースの手作業で行っており、作成そのものに多くの時間がかかるうえ、限られた時間の中では「なんとか破綻していない」シフトしか作れず、本当に望ましい配置(最適解)にたどり着きにくいという課題があります。

※本ページの内容は一般化した課題設定・架空のデータに基づく紹介であり、特定の企業・拠点・顧客の情報を示すものではありません。

ISSUE-01B-1

希望シフトの個別調整

拠点・個人ごとに異なる勤務希望や休暇希望をヒアリングし、手作業で組み合わせる負担が大きい。

ISSUE-02B-2

法定労働時間・休憩ルールの遵守

週の上限時間、勤務間インターバル、連続勤務日数などの法令順守を目視で確認する煩雑さ。

ISSUE-03B-3

欠員発生時の即応

急な欠勤が出た際、条件を満たす代替要員をゼロから探し直す時間的コストが大きい。

02 / TECH STACK

技術構成

Architecture
CORE

Python

制約条件の記述からバックエンド処理まで、システム全体の中核を担う言語。

SOLVER

OR-Tools CP-SAT

Google製の制約プログラミングソルバー。数千変数規模の組合せ最適化を実用的な時間で解く。

API

FastAPI

シフト生成リクエストや計算の進捗を扱う軽量なAPIサーバー。

UI

React

制約条件の入力と、生成されたシフト結果を確認するフロントエンド。

DATA

SQLite

スタッフ情報・希望条件・生成履歴を保持する軽量データベース。

03 / AGENT DESIGN

エージェント設計の考え方

Roles & Constraints
AI(Claude)が自然言語での条件整理とトレードオフの説明を担当し、OR-Toolsのソルバーが厳密な組合せ最適化計算を担当する、役割分担型のエージェント設計です。「必ず守るべき制約(ハード制約)」と「できれば叶えたい希望(ソフト制約)」を明確に分けて数式に落とし込み、ソフト制約はスコア化した上で合計が最大になるように解を探索します。人と数式のあいだを、現場の言葉でつなぐ仕組みを目指しました。
ROLE / CLAUDE(AI)

自然言語での条件整理とトレードオフの説明

現場担当者が入力する「土曜は経験者を1人は入れたい」「Aさんは水曜が休み希望」といった自然文の要望を、AIが制約条件として解釈・整理します。すべての希望を満たせない場合には、その理由とトレードオフを現場の言葉で説明する役割も担います。

  • 自然文の要望を構造化された制約に変換
  • 充足できなかった希望とその理由を言語化
  • 現場向けの調整案・代替案の提示
ROLE / OR-TOOLS SOLVER

厳密な組合せ最適化計算

整理された制約条件を線形制約・論理制約として数式に変換し、Google OR-ToolsのCP-SATソルバーが厳密に解を探索します。人手では現実的な時間で見つけきれない、膨大な組み合わせの中から制約を満たす配置を計算します。

  • ハード制約の厳密な充足
  • ソフト制約のスコア最小化・最大化
  • 大規模な組合せの高速探索

HARD CONSTRAINTS — 守るべき制約

  • 週の法定労働時間の上限
  • 勤務間インターバルの確保
  • 必要資格・スキルを持つ人員の配置
  • 連続勤務日数の上限

SOFT CONSTRAINTS — 揺らせる希望

  • 個人の休み希望・シフト希望
  • 特定シフトへの偏りの是正
  • 経験者と新人のバランス配置
  • 通勤負担など個別事情への配慮
04 / SCALE & ROADMAP

想定規模・発展性

Toward Productization

特定の拠点数に限らず、全38事業場規模への対応を想定した拡張性を意識して設計しています。 SCALE: MULTI-SITE / 想定規模であり特定顧客の情報ではありません

外部への提供も見据え、PyInstaller / Nuitka による単一実行ファイルへのパッケージ化を検討しています。 PACKAGING: PyInstaller / Nuitka(検討中)

05 / DEMO

デモ画面(イメージ)

Visual Mockup
以下は本ページ用に作成したデモ画面のビジュアルイメージ(モックアップ)です。実際に操作できるツールではなく、開発中の構想を示すためのものです。表示されているスタッフ名・シフト・数値はすべて架空のサンプルデータです。
shift-optimizer.local(開発中プレビュー)

制約設定パネル

希望休を優先任意
週40時間上限必須
夜勤明け休養日必須
欠員時の自動再配分任意
土日は経験者優先任意

週間シフト表(プレビュー・サンプル)

スタッフ
スタッフA
スタッフB
スタッフC
スタッフD
スタッフE
早番 遅番 休み
AI
早番の人数を1名減らすと人件費を抑えられますが、土曜の欠員リスクがやや上がります。希望休と法定労働時間の上限は必ず満たす設定のままです。どちらを優先するか、現場の言葉で教えてください。

※デモ画面のイメージです(開発中)。実データや実在の勤務先とは一切関係ありません。