You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Pyomo求解指定线性优化问题?附数据与约束模型

使用Pyomo求解线性规划问题

前置准备

首先确保安装Pyomo和线性求解器(比如GLPK或CBC),可以通过以下命令安装:

pip install pyomo
# 安装GLPK求解器(Windows环境示例,其他系统可参考Pyomo官方文档调整)
pip install glpk

完整代码实现

import pyomo.environ as pyo
import pandas as pd

# 加载用户提供的DataFrame
d = {'Doctors': [20, 19,25], 'Nurses': [151, 131,160],'Outpatients':[100,150,160],'Inpatients':[90,50,55]}
df = pd.DataFrame(data=d)

# 创建Pyomo模型实例
model = pyo.ConcreteModel()

# 定义决策变量:v1、v2、u1、u2,均满足非负约束
model.v1 = pyo.Var(within=pyo.NonNegativeReals)
model.v2 = pyo.Var(within=pyo.NonNegativeReals)
model.u1 = pyo.Var(within=pyo.NonNegativeReals)
model.u2 = pyo.Var(within=pyo.NonNegativeReals)

# 定义目标函数:最大化100u1 + 90u2
model.obj = pyo.Objective(expr=100*model.u1 + 90*model.u2, sense=pyo.maximize)

# 定义约束条件
# 第一个等式约束
model.const_eq = pyo.Constraint(expr=20*model.v1 + 151*model.v2 == 1)

# 批量生成三个不等式约束(基于DataFrame的行数据)
model.constraints = pyo.ConstraintList()
for _, row in df.iterrows():
    lhs = row['Outpatients']*model.u1 + row['Inpatients']*model.u2
    rhs = row['Doctors']*model.v1 + row['Nurses']*model.v2
    model.constraints.add(expr=lhs - rhs <= 0)

# 调用求解器求解
solver = pyo.SolverFactory('glpk')
result = solver.solve(model)

# 输出求解结果
print("求解状态:", result.solver.status)
print("最优目标函数值:", pyo.value(model.obj))
print("最优变量取值:")
print(f"v1 = {pyo.value(model.v1):.4f}")
print(f"v2 = {pyo.value(model.v2):.4f}")
print(f"u1 = {pyo.value(model.u1):.4f}")
print(f"u2 = {pyo.value(model.u2):.4f}")

关键说明

  • 变量约束:通过within=pyo.NonNegativeReals直接限定变量非负,贴合问题要求。
  • 约束批量生成:利用DataFrame循环遍历生成不等式约束,避免重复编写代码,适配数据行数变化。
  • 求解器替换:示例使用GLPK,也可替换为CBC、Gurobi等其他线性求解器(需提前安装对应工具)。

内容的提问来源于stack exchange,提问作者Reza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 06:15:36