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
相关产品推荐
相关产品推荐

