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

Pyomo求解报错:模型未定义且未提供pyomo_create_model函数

解决Pyomo "模型未定义且未提供pyomo_create_model" 错误

嗨,我刚踩过这个坑,太懂你现在的困惑了!这个错误的核心原因很明确:当你用pyomo solve命令直接调用脚本时,Pyomo默认会在你的代码里找一个特定的pyomo_create_model()函数,用来获取你定义好的模型对象。你的代码虽然正确创建了AbstractModel,但没有导出这个约定好的函数,所以Pyomo找不到要求解的模型。

解决方案1:添加pyomo_create_model函数(推荐适配pyomo solve命令)

直接修改你的test.py,在代码末尾补上这个函数,把你定义的model返回出去就行。修改后的完整代码示例如下:

from pyomo.environ import *

infinity = float('inf')
model = AbstractModel()

# Foods
model.F = Set()
# Nutrients
model.N = Set()
# Cost of each food
model.c = Param(model.F, within=PositiveReals)
# (这里把你未写完的参数、变量、约束、目标函数定义补全)

# 新增这个Pyomo要求的函数
def pyomo_create_model(options=None, model_options=None):
    return model

修改完成后,重新运行你的求解命令:

pyomo solve test.py diet.dat --solver=glpk

Pyomo就能通过这个函数找到你的模型,顺利启动求解流程了。

解决方案2:直接用Python脚本运行(不依赖pyomo solve命令)

如果你不想遵循pyomo solve的函数约定,也可以在脚本里直接写完整的求解逻辑,然后用普通Python命令运行。示例代码如下:

from pyomo.environ import *

infinity = float('inf')
model = AbstractModel()

# (这里保留你原有的所有模型定义:Set、Param、Var、Constraint、Objective)

# 加载数据文件并创建模型实例
instance = model.create_instance('diet.dat')
# 初始化求解器
opt = SolverFactory('glpk')
# 执行求解
results = opt.solve(instance)

# 输出求解结果
instance.display()

然后直接运行脚本即可:

python test.py

这种方式更灵活,适合需要自定义求解流程、结果输出的场景。

小提醒

不管用哪种方式,记得确保你的diet.dat数据文件格式和模型里的Set、Param完全匹配,不然可能会出现数据加载失败的新问题哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:24:54