一个通用的模型上下文协议(MCP)服务器,用于解决具有逻辑和数值约束的组合优化问题。该服务器提供了一个统一的接口,连接多个优化求解器,使AI助手能够跨各种领域解决复杂的优化问题。
# 安装包
pip install constrained-opt-mcp
# 或从源代码安装
git clone https://github.com/your-org/constrained-opt-mcp
cd constrained-opt-mcp
pip install -e .
约束优化MCP服务器实现了各种类型的优化问题解决方案:
$$\min_{x} c^T x \quad \text{受限于} \quad Ax \leq b, \quad x \geq 0$$
$$\min_{x} \frac{1}{2}x^T Q x + c^T x \quad \text{受限于} \quad Ax \leq b, \quad x \geq 0$$
$$\min_{x} f(x) \quad \text{受限于} \quad g_i(x) \leq 0, \quad h_j(x) = 0$$
其中$f$和$g_i$是凸函数。
找到$x \in \mathcal{D}$使得$C_1(x) \land C_2(x) \land \ldots \land C_k(x)$
$$\max_{w} \mu^T w - \frac{\lambda}{2} w^T \Sigma w \quad \text{受限于} \quad \sum_{i=1}^{n} w_i = 1, \quad w_i \geq 0$$
其中:
| 问题类型 | 求解器 | 复杂度 | 数学形式 |
|---|---|---|---|
| 约束满足 | Z3 | NP-完全 | 逻辑约束 |
| 凸优化 | CVXPY | 多项式 | 凸函数 |
| 线性规划 | HiGHS | 多项式 | 线性约束 |
| 约束编程 | OR-Tools | NP-完全 | 离散域 |
# 运行单个示例
python examples/nqueens.py
python examples/knapsack.py
python examples/portfolio_optimization.py
python examples/job_shop_scheduling.py
python examples/nurse_scheduling.py
python examples/economic_production_planning.py
# 运行交互式笔记本
jupyter notebook examples/constrained_optimization_demo.ipynb
constrained-opt-mcp
在您的MCP配置中添加服务器:
{
"mcpServers": {
"constrained-opt-mcp": {
"command": "constrained-opt-mcp",
"args": []
}
}
}
服务器提供了以下工具:
solve_constraint_satisfaction - 解决逻辑约束问题solve_convex_optimization - 解决凸优化问题solve_linear_programming - 解决线性规划问题solve_constraint_programming - 解决约束编程问题solve_portfolio_optimization - 解决投资组合优化问题# 解决简单的算术约束问题
变量 = [
{"名称": "x", "类型": "整数"},
{"名称": "y", "类型": "整数"},
]
约束 = [
"x + y == 10",
"x - y == 2",
]
# 结果:x=6, y=4
# 优化投资组合分配
资产 = ["股票", "债券", "房地产", "商品"]
预期收益 = [0.10, 0.03, 0.07, 0.06]
风险因素 = [0.15, 0.03, 0.12, 0.20]
相关矩阵 = [
[1.0, 0.2, 0.6, 0.3],
[0.2, 1.0, 0.1, 0.05],
[0.6, 0.1, 1.0, 0.25],
[0.3, 0.05, 0.25, 1.0],
]
# 结果:最优的投资组合权重和绩效指标
# 生产计划问题
目标 = "最大化"
目标系数 = [3.0, 2.0] # 单位利润
变量 = [
{"名称": "产品_a", "下限": 0, "上限": None, "类型": "连续"},
{"名称": "产品_b", "下限": 0, "上限": None, "类型": "连续"},
]
约束矩阵 = [
[2, 1], # 劳动力:2*A + 1*B <= 100
[1, 2], # 材料:1*A + 2*B <= 80
]
约束符号 = ["<=", "<="]
右侧值 = [100.0, 80.0]
# 结果:最优生产数量
权益投资组合优化:
多资产投资组合优化:
高级风险指标:
运行全面的测试套件:
# 运行所有测试
pytest
# 运行特定测试类别
pytest tests/test_z3_solver.py
pytest tests/test_cvxpy_solver.py
pytest tests/test_highs_solver.py
pytest tests/test_ortools_solver.py
pytest tests/test_mcp_server.py
# 运行并生成覆盖率报告
pytest --cov=constrained_opt_mcp
constrained_opt_mcp/core/) - 基础类和问题类型constrained_opt_mcp/models/) - 问题特定模型定义constrained_opt_mcp/solvers/) - 求解器实现constrained_opt_mcp/server/) - MCP服务器实现constrained_opt_mcp/examples/) - 使用示例和演示| 问题类型 | 求解器 | 应用场景 |
|---|---|---|
| 约束满足 | Z3 | 逻辑谜题、验证、规划 |
| 凸优化 | CVXPY | 投资组合优化、机器学习 |
| 线性规划 | HiGHS | 生产计划、资源分配 |
| 约束编程 | OR-Tools | 排程、分配、路由 |
| 投资组合优化 | 多种 | 风险管理、投资组合构建 |
本项目采用Apache许可证2.0。详情见LICENSE文件。
对于问题、问题或贡献,请: