关于 OptimEngine - Operations Scheduling Solver
OptimEngine 使用 OR-Tools CP-SAT 求解排程、路径规划和装箱问题,并分析不确定性下的风险。它面向需要将数学优化能力接入 AI Agent 或应用的运营与工程团队。
主要功能
- 01求解柔性作业车间排程
- 02优化车辆路径和装箱
- 03分析敏感性与稳健性
- 04通过蒙特卡洛评估不确定性
- 05生成多目标帕累托解和建议
适用场景
- 01安排有工序约束的机器任务
- 02规划带时间窗的车辆路线
- 03评估参数变化对方案的影响
MCP 相关
作为 MCP 服务,它通过 SSE 和 Streamable HTTP 向 MCP 客户端公开 11 个优化工具,并支持 OAuth 2.1。相同能力也可通过 REST 使用。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
⚡ OptimEngine
生产级优化平台——4 层架构、OR-Tools CP-SAT、原生支持 MCP、OAuth 2.1、以可观测性为先。
概览
OptimEngine 可解决 NP-hard 优化问题(调度、路径规划、装箱),并量化不确定性下的风险(敏感性分析、鲁棒优化、随机优化、Pareto 分析)。它通过 REST 和 MCP(SSE + Streamable HTTP,使用 OAuth 2.1)提供 4 个智能级别(L1 确定性 → L3 处方性)的 11 种工具。
系统围绕三项工程原则构建:数学正确性(使用真正的 CP-SAT 求解器,而非 LLM 近似方案)、生产级规范(完整的可观测性技术栈、覆盖业务逻辑的测试、经过负载测试)以及Agent 友好性(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
四层架构加边缘代理,部署于 6 个 Railway 服务和 1 个 Vercel 函数。所有层均采用 OpenTelemetry 链路追踪、Prometheus 中间件,并在付款事件发生时通过 Telegram 发送告警。
技术栈
| 层 | 技术 |
|---|---|
| 运行时 | Python 3.12、FastAPI、Uvicorn |
| 求解器 | OR-Tools 9.15 CP-SAT、NumPy、自定义蒙特卡洛 |
| MCP | FastMCP(SSE + Streamable HTTP)、ScaleKit OAuth 2.1、PyJWT |
| 验证 | Pydantic v2 |
| 可观测性 | OpenTelemetry SDK、Prometheus client、Grafana Cloud |
| 负载测试 | Locust 2.43 |
| CI | GitHub Actions、pytest、pytest-cov |
| 部署 | Railway(计算)、Vercel(边缘)、GitHub Actions(CI) |
功能
L1 — 确定性优化
| 求解器 | 问题 | 主要功能 |
|---|---|---|
| 调度 | 柔性作业车间(FJSP) | 优先约束、时间窗、按机器设定的工时、可用时间窗、质量门槛、准备时间矩阵 |
| 路径规划 | CVRPTW | 容量、时间窗、GPS 距离、跳过访问点、4 种优化目标 |
| 装箱 | 多维装箱 | 重量 + 体积约束、物品数量、分组、部分装箱、4 种优化目标 |
L2 — 不确定性下的优化
| 模块 | 能力 | 输出 |
|---|---|---|
| 敏感性分析 | 每次扰动一个参数 | 脆弱性图、敏感性得分、关键标记、风险排名 |
| 鲁棒优化 | 不确定性范围 → 最坏情况保护 | 鲁棒解、鲁棒性成本、可行率 |
| 随机优化 | 概率分布 → 蒙特卡洛 | 期望值、VaR、CVaR(90/95/99 %)、分布摘要 |
L2.5 — 多目标优化
| 模块 | 能力 | 输出 |
|---|---|---|
| 帕累托前沿 | 2-4 个相互竞争的目标 | 非支配解、权衡比、相关性分析 |
L3 — 处方式优化
| 模块 | 能力 | 输出 |
|---|---|---|
| 处方建议 | 历史数据 → 预测 → 优化 → 风险 → 建议 | 行动、经风险调整的完工时间、可行性风险评估 |
性能
生产环境基准测试摘要(完整报告:BENCHMARKS.md):
- 累计负载 20 分钟内处理 757 个请求,失败 0 次
- 基础设施耗时下限:约 200 ms(FastAPI + 边缘代理 + 身份验证 + 可观测性开销)
- 当前 Railway 层级下,并发用户达到 5 人时出现饱和拐点;此后系统会逐步降级
- 瓶颈:求解器 CPU,而非基础设施——L1 的扩展路径是水平扩展,而非在网关处垂直扩展
Grafana 实时仪表板:public-dashboards/optimengine
测试与 CI
- 121 项测试,覆盖 7 个求解器模块,全部通过
- 总体覆盖率 77 %,业务逻辑引擎平均覆盖率 88 %
- 每次推送和拉取请求都会通过 GitHub Actions 运行
- 覆盖率报告作为构建产物上传(HTML + XML)
测试套件运行真实的 CP-SAT 求解,而非模拟:断言会验证数学属性(CVaR 排序、容量约束、扰动下的单调性),而不只是代码路径。
v9.0.0 亮点
四项调度引擎升级,弥合了学术界 FJSP 与真实车间运作方式之间的差距。与 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 连接器)
在“设置” → “集成”下添加远程 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(合成数据)
模拟意大利精密加工车间的合成数据集——4 台 CNC 加工中心(2015-2023 年款)、5 个参考真实汽车/工业客户建模的客户订单、15 项任务。用于端到端验证全部 7 个模块的求解器行为。
| 工具 | 结果 |
|---|---|
optimize_schedule | 最优完工时间 225 min,5/5 按时完成,平均利用率 83.3 %,耗时 0.04 s |
validate_schedule | 零违规,2 条改进建议 |
analyze_sensitivity | 3.6 s 内完成 73 次求解,识别出最敏感参数(敏感度评分 8.9) |
optimize_robust | 最坏情况 210 min,稳健性代价 7.7 %,可行率 100 % |
optimize_pareto | 权衡前沿:195/15 min 对比 220/0 min,相关性 -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 个服务) |
| Edge 代理(Vercel) | 处理 CORS、改写标头、边缘缓存 |
| claude.ai 上的 MCP 连接器 | 为 Claude 客户端提供工具接口 |
发现
已列入 x402scan、Smithery 和 the402.ai,以便在 Agent 经济中被发现。系统支持在 Base 和 Solana 上使用 x402 微支付访问付费层端点;支付集成的说明记录在 L3 轻量代理层中,但这并非项目的主要重点。
许可证
MIT——参见 LICENSE。
由 Michele Campi 构建。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。