【问题标题】:Using NEOS as a Pyomo solver使用 NEOS 作为 Pyomo 求解器
【发布时间】:2021-09-23 18:56:45
【问题描述】:

我最近开始做一些 OR,并且一直在尝试使用 Pyomo 和 NEOS 来做一些优化问题。我一直在关注 UT Austin Pyomo 的一场讲座,当我的 GLPT 难以安装时,我转向了 NEOS。我现在很难从 NEOS 收到已解决的答案。

到目前为止,我所拥有的是:

from pyomo import environ as pe
import os

os.environ['NEOS_EMAIL'] = 'my registered email' 

model = pe.ConcreteModel()

model.x1 = pe.Var(domain=pe.Binary)
model.x2 = pe.Var(domain=pe.Binary)
model.x3 = pe.Var(domain=pe.Binary)
model.x4 = pe.Var(domain=pe.Binary)
model.x5 = pe.Var(domain=pe.Binary)

obj_expr = 3 * model.x1 + 4 * model.x2 + 5 * model.x3 + 8 * model.x4 + 9 * model.x5
model.obj = pe.Objective(sense=pe.maximize, expr=obj_expr)

con_expr = 2 * model.x1 + 3 * model.x2 + 4 * model.x3 + 5 * model.x4 + 9 * model.x5 <= 20
model.con = pe.Constraint(expr=con_expr)


solver_manager = pe.SolverManagerFactory('neos')

results = solver_manager.solve(model, solver = "minos")
print(results)

我收到的回报是解决方案的数量 = 0,而我知道一个事实是存在的。我也看到我没有设置任何界限,那么我该怎么做呢?再一次,我对此很陌生,并且无法在其他地方找到任何关于此的文档,或者我只是不知道如何查看。

感谢您的帮助!

【问题讨论】:

    标签: python pyomo neos-server


    【解决方案1】:

    这是当前结果对象设计的“问题”。由于历史原因,该字段报告结果对象中包含的解决方案的数量,而不是求解器生成的解决方案的数量。默认情况下,Pyomo 求解器直接将求解器返回的解加载到原始模型中(既方便又高效),而不在结果对象中返回。您可以通过向 solve() 调用提供 load_solutions=False 来更改该行为。

    至于界限,你指的是什么界限?使用Var() 声明的bounds= 参数或domain= 参数设置变量边界。对于您的示例,因为变量被声明为Binary,所以它们都具有[0..1] 的边界。通过解析求解器输出来收集目标的界限。这取决于您正在使用的求解器(许多不报告边界信息)以及用于解析求解器结果的接口。

    最后一点,您将 MIP 问题发送给 LP/NLP 求解器 (minos)。您从求解器返回二进制变量的分数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-29
      • 2021-06-03
      • 2018-09-07
      • 2019-06-13
      • 2019-09-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      相关资源
      最近更新 更多