OptimEngine - Operations Scheduling Solver について
OptimEngineはOR-Tools CP-SATを使い、スケジューリング、経路計画、梱包の問題を解き、不確実性下のリスクを分析します。数理最適化をAIエージェントやアプリに組み込みたい運用・エンジニアリングチーム向けです。
主な機能
- 01フレキシブルジョブショップのスケジュール最適化
- 02車両経路と梱包の最適化
- 03感度とロバスト性の分析
- 04モンテカルロによる不確実性評価
- 05パレート解と推奨案の生成
活用シーン
- 01先行関係のある機械作業のスケジュール作成
- 02時間枠を考慮した車両経路の計画
- 03パラメーター変更による解への影響評価
MCP 対応
MCP サーバーとして、SSEおよびStreamable HTTP経由で11の最適化ツールをMCPクライアントに公開し、OAuth 2.1にも対応します。同じ機能はRESTからも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
⚡ OptimEngine
本番環境向け最適化プラットフォーム — 4 層アーキテクチャ、OR-Tools CP-SAT、MCP ネイティブ、OAuth 2.1、オブザーバビリティを最優先。
概要
OptimEngine は NP 困難な最適化問題(スケジューリング、ルーティング、パッキング)を解き、不確実性のもとでのリスク(感度、ロバスト、確率的、パレート)を定量化します。REST と MCP(SSE + Streamable HTTP、OAuth 2.1 対応)の両方で、4 つのインテリジェンスレベル(L1 決定論的 → L3 規範的)にわたる 11 個のツールを提供します。
このシステムは、3 つのエンジニアリング原則を中心に構築されています。数学的な正確性(LLM による近似ではなく、実際の CP-SAT ソルバーを使用)、本番環境での堅牢性(完全なオブザーバビリティスタック、ビジネスロジックのテストカバレッジ、負荷テスト済み)、エージェントフレンドリー(MCP デュアルスタック、OAuth、レート制限、JSON のみの契約)です。
アーキテクチャ
flowchart TB
Client[AI Agents / MCP Clients / REST] --> Edge[Edge Proxy<br/>Vercel]
Edge --> L2[L2 Core Gateway<br/>FastAPI · orchestration]
L2 --> L1[L1 Solver Layer<br/>OR-Tools 9.15 CP-SAT<br/>FJSP · CVRPTW · Packing · Sensitivity · Robust · Stochastic · Pareto · Prescriptive]
L2 --> L3[L3 Thin Proxies<br/>Payment rails · MCP discovery]
L1 --> Obs[Observability<br/>OpenTelemetry · Prometheus · Grafana Cloud]
L2 --> Obs
L3 --> Obs
エッジプロキシを含む 4 層構成で、Railway の 6 つのサービスと Vercel の 1 つの関数に分散してデプロイされます。すべてのレイヤーに OpenTelemetry トレーシング、Prometheus ミドルウェアを組み込み、支払いイベント時には Telegram でアラートを送信します。
技術スタック
| レイヤー | テクノロジー |
|---|---|
| ランタイム | Python 3.12、FastAPI、Uvicorn |
| ソルバー | OR-Tools 9.15 CP-SAT、NumPy、カスタム Monte Carlo |
| MCP | FastMCP(SSE + Streamable HTTP)、ScaleKit OAuth 2.1、PyJWT |
| バリデーション | Pydantic v2 |
| オブザーバビリティ | OpenTelemetry SDK、Prometheus クライアント、Grafana Cloud |
| 負荷テスト | Locust 2.43 |
| CI | GitHub Actions、pytest、pytest-cov |
| デプロイ | Railway(コンピューティング)、Vercel(エッジ)、GitHub Actions(CI) |
機能
L1 — 決定論的最適化
| ソルバー | 問題 | 主な機能 |
|---|---|---|
| スケジューリング | 柔軟なジョブショップ(FJSP) | 優先順位制約、時間枠、機械ごとの所要時間、稼働可能時間枠、品質ゲート、セットアップマトリクス |
| ルーティング | CVRPTW | 容量、時間枠、GPS 距離、ドロップ訪問、4 つの目的関数 |
| ビンパッキング | 多次元パッキング | 重量と体積の制約、アイテム数量、グループ、部分パッキング、4 つの目的関数 |
L2 — 不確実性下での最適化
| モジュール | 機能 | 出力 |
|---|---|---|
| 感度分析 | パラメーターを1つずつ摂動 | 脆弱性マップ、感度スコア、重要フラグ、リスク順位 |
| ロバスト最適化 | 不確実性の範囲 → 最悪ケースへの備え | ロバスト解、ロバスト性の価格、実行可能性率 |
| 確率的最適化 | 確率分布 → モンテカルロ法 | 期待値、VaR、CVaR(90/95/99 %)、分布の概要 |
L2.5 — 多目的最適化
| モジュール | 機能 | 出力 |
|---|---|---|
| パレートフロンティア | 競合する2〜4個の目的 | 非劣解、トレードオフ比率、相関分析 |
L3 — 処方的
| モジュール | 機能 | 出力 |
|---|---|---|
| 処方的アドバイス | 履歴データ → 予測 → 最適化 → リスク → 推奨 | アクション、リスク調整済みメイクスパン、実行可能性リスク評価 |
パフォーマンス
本番環境のベンチマーク概要(完全なレポート:BENCHMARKS.md):
- 757件のリクエストを処理し、失敗は0件。累計20分間の負荷テストによる結果です。
- インフラの最低遅延:約200 ms(FastAPI + エッジプロキシ + 認証 + 可観測性のオーバーヘッド)
- 現在のRailwayプランでは同時ユーザー数5人で飽和点に達し、それを超えるとシステムは段階的に性能が低下します
- ボトルネックはインフラではなくソルバーのCPUです。スケーリングには、ゲートウェイを垂直に拡張するのではなく、L1で水平に拡張する方法が適しています
Grafanaのライブダッシュボード:public-dashboards/optimengine
テストとCI
- 7つのソルバーモジュールにわたる121件のテストがすべて成功
- 全体カバレッジ77 %、ビジネスロジックエンジンの平均カバレッジ88 %
- GitHub Actionsにより、プッシュとプルリクエストのたびに実行
- カバレッジレポートはビルド成果物としてアップロード(HTML + XML)
テストスイートではモックではなく、実際のCP-SATソルブを実行します。単なるコードパスではなく、数学的性質(CVaRの順序、容量制約、摂動に対する単調性)をアサーションで検証します。
v9.0.0の主な変更点
学術的なFJSPと実際の工場の運用とのギャップを埋める、4つのスケジューリングエンジンのアップグレードです。すべてv8のリクエストとの後方互換性があります。
機械ごとの処理時間 — 同じタスクでも、機械によって処理時間が異なります:
{
"task_id": "milling",
"duration": 100,
"eligible_machines": ["CNC-1", "CNC-2"],
"duration_per_machine": {"CNC-1": 120, "CNC-2": 80}
}
稼働可能時間帯 — 機械ごとに複数のシフトとメンテナンス時間を設定できます:
{
"machine_id": "CNC-1",
"availability_windows": [
{"start": 0, "end": 480},
{"start": 510, "end": 960}
]
}
品質ゲート — ジョブには最低品質が求められ、機械には歩留まり率があります:
{ "job_id": "ORD-BOSCH", "quality_min": 0.97 }
{ "machine_id": "CNC-4", "yield_rate": 0.99 }
段取り時間マトリックス — 順序に依存する切り替えコストを設定できます:
{
"setup_times": [
{"machine_id": "M1", "from_job_id": "J1", "to_job_id": "J2", "setup_time": 15}
]
}
クイックスタート
claude.ai(リモートMCPコネクター)
Settings → Integrationsから、リモートMCPコネクターとして追加します:
https://optim-engine-production.up.railway.app/mcp
OAuthで保護されたエンドポイントの場合:
https://optim-engine-production.up.railway.app/mcp/v2
REST(curl)
curl -X POST https://optim-engine-production.up.railway.app/optimize_schedule \
-H "Content-Type: application/json" \
-H "X-Engine-Key: $ENGINE_API_KEY" \
-d '{
"jobs": [
{"job_id": "J1", "tasks": [
{"task_id": "cut", "duration": 30, "eligible_machines": ["M1", "M2"]},
{"task_id": "weld", "duration": 20, "eligible_machines": ["M2"]}
]}
],
"machines": [{"machine_id": "M1"}, {"machine_id": "M2"}],
"objective": "minimize_makespan"
}'
MCPクライアントの設定
{
"mcpServers": {
"optim-engine": {
"url": "https://optim-engine-production.up.railway.app/mcp"
}
}
}
検証ケーススタディ:MetalPrecision(合成データ)
イタリアの精密機械加工工場をモデルにした合成データセットです。CNC センター 4 台(2015~2023 年製)、実際の自動車・産業分野の顧客をモデルにした顧客注文 5 件、タスク 15 件を使用しています。7 つすべてのモジュールを対象に、ソルバーの動作をエンドツーエンドで検証するために使用しました。
| ツール | 結果 |
|---|---|
optimize_schedule | 最適メイクスパン 225 分、納期遵守 5/5、平均稼働率 83.3 %、0.04 秒 |
validate_schedule | 違反ゼロ、改善提案 2 件 |
analyze_sensitivity | 3.6 秒で 73 回のソルブを実行し、最も感度の高いパラメーターを特定(感度スコア 8.9) |
optimize_robust | 最悪ケース 210 分、ロバスト性の代償 7.7 %、実行可能性 100 % |
optimize_pareto | トレードオフのフロンティア:195/15 分 対 220/0 分、相関 -1.0 |
optimize_stochastic | モンテカルロシナリオ 30 件、CVaR95 = 188.5、CV 4.7 % |
prescriptive_advise | 予測 +1.3 %/期間、リスク調整後の範囲 167~183 |
データセット内の顧客名は説明用です。これは実際の顧客への導入ではなく、ソルバーの検証とデモを目的としたベンチマークシナリオです。
本番環境へのデプロイ
| エンドポイント | 役割 |
|---|---|
optim-engine-production.up.railway.app | L1 + L2 + L3 の計算(Railway、6 サービス) |
| エッジプロキシ(Vercel) | CORS 処理、ヘッダーの書き換え、エッジキャッシュ |
| claude.ai の MCP コネクター | Claude クライアント向けのツール提供 |
ディスカバリー
x402scan、Smithery、the402.ai でエージェントエコノミー向けに掲載されています。このシステムは、有料プランのエンドポイント向けに Base と Solana での x402 マイクロペイメントに対応しています。決済の統合については L3 のシンプロキシレイヤーに記載されていますが、プロジェクトの主な焦点ではありません。
ライセンス
MIT — LICENSE を参照してください。
ミケーレ・カンピ が開発しました。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。