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

Python中将Gurobi二次约束问题迁移至Pyomo及求解器调用报错咨询

首先你当前遇到两个核心错误:

  1. SolverFactory参数错误:你传入了自定义的模型名optimizer,需要传入求解器的官方标识gurobi
  2. 模型对象不兼容:你用Gurobi原生语法创建的model对象无法直接传入Pyomo的solve方法,你需要用Pyomo语法完成变量、约束、目标函数的全流程构建

修正后的基础框架代码如下:

import pyomo.environ as pyo
import pandas as pd
import numpy as np

# 初始化Gurobi求解器
opt = pyo.SolverFactory("gurobi", solver_io="python")
# 预配置求解器参数(NonConvex、线程数等都可以在这里设置)
opt.options["NonConvex"] = 2
opt.options["threads"] = 4

问题1 solve方法参数适配说明
  • optimizer.solve()仅需要传入构建完成的Pyomo模型对象即可,不需要额外调整模型内的常量、变量格式
  • options参数支持两种合法写法:
    • 键值对字典格式:options={"threads":4}
    • 空格分隔的字符串格式:options="threads=4"
  • 两种写法效果完全一致,int、list等类型参数直接按规则传入即可,不需要额外转换
问题2 instance命名说明
  • 不需要强制把所有模型相关调用替换为instance,instance只是Pyomo官方文档对实例化后模型对象的常用命名,你可以继续用model作为变量名,只要保证传入solve的是完成了全部定义的Pyomo模型对象即可
问题3 s、d参数适配Pyomo的方法

首先你给出的字典存在语法错误,修正后按以下步骤适配即可:

  1. 修正字典语法错误
# 修正后的单维索引参数s
s = {1:2, 2:3, 3:5, 4:5}
# 修正后的二维索引参数d(已删除原重复的(1,1)键,你可以根据实际需求调整)
d = {
    (1,1):1, (1,2):2, (1,3):3, (1,4):4,
    (2,1):3, (2,2):4, (2,3):5, (2,4):6
}
  1. 在Pyomo模型中定义参数
# 初始化Pyomo模型
model = pyo.ConcreteModel()
# 先定义索引集
model.I = pyo.Set(initialize=[1,2,3,4])
model.J = pyo.Set(initialize=[1,2,3,4])
# 绑定单维参数s
model.s = pyo.Param(model.I, initialize=s)
# 绑定二维参数d
model.d = pyo.Param(model.I, model.J, initialize=d)

后续写约束、目标函数时,直接用model.s[i]、model.d[i,j]调用即可。

问题4 options配置与约束目标定义说明
  • options部分仅需要传入Gurobi求解器支持的参数即可,不需要把约束、目标函数内容添加进去
  • 约束和目标函数直接定义在Pyomo模型对象中即可,不需要传入solve方法,示例如下:
# 定义决策变量示例
model.x = pyo.Var(model.I, domain=pyo.NonNegativeReals)
# 定义目标函数示例(二次目标)
def obj_rule(model):
    return sum(model.s[i] * model.x[i]**2 for i in model.I)
model.obj = pyo.Objective(rule=obj_rule, sense=pyo.minimize)
# 定义约束示例
def con_rule(model, i):
    return sum(model.d[i,j] * model.x[j] for j in model.J) >= 10
model.con = pyo.Constraint(model.I, rule=con_rule)

所有内容定义完成后调用求解方法即可:

result = opt.solve(model, tee=True)
# 求解完成后查看变量结果
model.x.display()

内容的提问来源于stack exchange,提问作者炎天下修羅

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 03:57:03