【问题标题】:how to change gurobi to pyomo solver如何将 gurobi 更改为 pyomo 求解器
【发布时间】:2021-11-19 04:35:26
【问题描述】:

由于它是python中从grobi到pyomo的次要约束问题,我想改变它,所以我不知道该怎么做。

from gurobipy import *
import pandas as pd
import numpy as np
import csv
from pyomo.environ import SolverFactory
opt = SolverFactory("optimizer", solver_io="python")
opt.solve(model, tee=True)
opt.options['NonConvex'] = 2

之后,我使用 pandas 从 excel 中插入数据。

model=Model("optimizer")
model.params.NonConvex=2

并运行 gurobi 程序。 如果错误信息是

untimeError: Attempting to use an unavailable solver.

The SolverFactory was unable to create the solver "optimizer"
and returned an UnknownSolver object.  This error is raised at the point
where the UnknownSolver object was used as if it were valid (by calling
method "solve").

The original solver was created with the following parameters:
    executable: optimizer
    solver_io: python
    type: optimizer
    _args: ()
    options: {}

https://pyomo.readthedocs.io/en/stable/working_models.html?highlight=options#sending-options-to-the-solver

我以为我会参考这个网站进行各种更改,有很多我不明白的事情。 例如,

results = optimizer.solve(instance, options="threads=4", tee=True)

我是否需要将公式的常量和变量都更改为“optimizer.solve”? 改变的只是字典符号吗? 不需要更改int类型或列表? 另外,我应该将所有内容 () 更改为实例吗?

s={(1:2,2:3,3:5,4:5)}
d={(1,1):1(1,2):2(1:3):3(1:4):4
  (1,1):3(1,2):4(1:3):5(1:4):6}

如何用上面的 s,d 改变它? 有什么我需要补充的吗 到“选项=”=字典名称=字典编号”? 例如,如果有约束表达式或目标函数,请告诉我。 因为我是初学者,如果你能告诉我尽可能多的细节会很有帮助。

【问题讨论】:

  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: python optimization model pyomo gurobi


【解决方案1】:

您似乎在混淆不同的方法

  1. gurobipy 允许您使用Python API 建模和解决问题
  2. Pyomo 是一种建模语言,允许您对优化问题进行建模,然后使用 gurobi 或其他求解器(glpk、cbc、mosek 等)对其进行求解。

在您的代码中

from pyomo.environ import SolverFactory
opt = SolverFactory("optimizer", solver_io="python")

这是一个 Pyomo 语句,它告诉 Pyomo 你将使用 optimizer 求解器(正如 RuntimeError 告诉你的那样,它不存在)

你的代码在这里

model=Model("optimizer")
model.params.NonConvex=2

告诉我你在 python 中使用 Gurobi API 来为你的问题建模。

无论是使用 gurobipy 还是 pyomo,您都需要选择模型。您可以使用 gurobi 解决这两种方法,但不要混合使用两种方法。

由于在model=Model('optimizer') 中您是否已经拥有带有 gurobipy 的模型,如果您的 PC 上安装了许可证和 gurobi,您只需致电 model.optimize() 即可解决问题

PS: 以下代码刚刚告诉 Pyomo,您正在使用求解器 optimizer 求解器(之前在 SolverFactory 行中声明)来求解名为 instance 的程序,使用计算机 CPU 的 4 个线程,并且您想查看登录界面

results = optimizer.solve(instance, options="threads=4", tee=True)

【讨论】:

  • 非常感谢
猜你喜欢
  • 2019-06-13
  • 2019-12-16
  • 1970-01-01
  • 2018-09-07
  • 2020-08-02
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2016-05-26
相关资源
最近更新 更多