Gurobi

(类来自 pyomo.contrib.solver.gurobi)

class pyomo.contrib.solver.gurobi.Gurobi(**kwds)[source]

基础类:PersistentSolverUtils, PersistentSolverBase

Gurobi接口

__init__(**kwds)[source]

方法

__init__(**kwds)

add_block(block)

向模型添加一个块

add_constraints(cons)

向模型添加约束

add_parameters(params)

向模型添加参数

add_sos_constraints(cons)

add_variables(variables)

向模型添加变量

available()

测试此系统上是否可用的求解器。

cbCut(con)

在回调中添加一个剪切。

cbGet(what)

cbGetNodeRel(vars)

cbGetSolution(vars)

cbLazy(con)

cbSetSolution(vars, solution)

cbUseSolution()

get_gurobi_param_info(param)

获取有关gurobi参数的信息。

get_linear_constraint_attr(con, attr)

获取gurobi线性约束上的属性值。

get_model_attr(attr)

获取Gurobi模型上属性的值。

get_quadratic_constraint_attr(con, attr)

获取gurobi二次约束上的属性值。

get_sos_attr(con, attr)

获取gurobi sos约束上的属性值。

get_var_attr(var, attr)

获取gurobi变量上的属性值。

is_persistent()

release_license()

remove_block(block)

从模型中移除一个块

remove_constraints(cons)

从模型中移除约束

remove_parameters(params)

从模型中移除参数

remove_sos_constraints(cons)

remove_variables(variables)

从模型中移除变量

reset()

set_callback([func])

为gurobi指定一个回调函数。

set_gurobi_param(param, val)

设置一个gurobi参数。

set_instance(model)

设置模型的实例

set_linear_constraint_attr(con, attr, val)

设置gurobi线性约束上的属性值。

set_objective(obj)

设置模型的当前目标

set_var_attr(var, attr, val)

设置gurobi变量上的属性值。

solve(model, **kwds)

update([timer])

update_parameters()

更新模型上的参数

update_variables(variables)

更新模型上的变量

version()

write(filename)

将模型写入文件(例如,一个lp文件)。

属性

CONFIG

name

symbol_map

成员文档

enum Availability(value)

基础:IntEnum

用于捕获求解器可能存在的不同状态的类,以记录其可用性。

as_integer_ratio()

返回整数比率。

返回一对整数,其比例完全等于原始整数,并且分母为正数。

>>> (10).as_integer_ratio()
(10, 1)
>>> (-10).as_integer_ratio()
(-10, 1)
>>> (0).as_integer_ratio()
(0, 1)
bit_count()

自身绝对值的二进制表示中1的数量。

也被称为人口计数。

>>> bin(13)
'0b1101'
>>> (13).bit_count()
3
bit_length()

表示自身所需的二进制位数。

>>> bin(37)
'0b100101'
>>> (37).bit_length()
6
conjugate()

返回自身,即任何整数的复共轭。

classmethod from_bytes(bytes, byteorder='big', *, signed=False)

返回由给定字节数组表示的整数。

bytes

保存要转换的字节数组。参数必须支持缓冲区协议或是一个生成字节的可迭代对象。Bytes 和 bytearray 是支持缓冲区协议的内置对象的示例。

byteorder

用于表示整数的字节顺序。如果字节顺序是‘big’,最高有效字节位于字节数组的开头。如果字节顺序是‘little’,最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。默认是使用‘big’。

signed

指示是否使用二进制补码来表示整数。

to_bytes(length=1, byteorder='big', *, signed=False)

返回表示整数的字节数组。

length

要使用的字节对象的长度。如果整数不能用给定的字节数表示,则会引发OverflowError。默认长度为1。

byteorder

用于表示整数的字节顺序。如果字节顺序是‘big’,最高有效字节位于字节数组的开头。如果字节顺序是‘little’,最高有效字节位于字节数组的末尾。要请求主机系统的本机字节顺序,请使用sys.byteorder作为字节顺序值。默认是使用‘big’。

signed

确定是否使用二进制补码来表示整数。 如果 signed 为 False 并且给出了负整数,则会引发 OverflowError。

denominator

最低项有理数的分母

imag

复数的虚部

numerator

最低项有理数的分子

real

复数的实部

add_block(block)

向模型添加一个块

add_constraints(cons: List[ConstraintData])

向模型添加约束

add_parameters(params: List[ParamData])

向模型添加参数

add_variables(variables: List[VarData])

向模型添加变量

available()[source]

测试此系统上是否可用的求解器。

名义上,如果求解器接口有效并可用于解决问题,则返回True;如果不能,则返回False。

请注意,对于有许可证的求解器,有多个“级别”的可用性:根据许可证的不同,求解器可能在问题大小或运行时间上有限制(例如,‘demo’ vs. ‘community’ vs. ‘full’)。在这些情况下,求解器可能会返回一个enum.IntEnum的子类,如果求解器可用(可能有限制),则其成员解析为True。该枚举也可能有多个成员,所有成员都解析为False,表示接口不可用的原因(未找到、许可证无效、版本不受支持等)。

Returns:

available – 一个枚举,表示求解器的“可用性”。 请注意,该枚举可以转换为布尔值,如果求解器可以运行,则为 True,否则为 False。

Return type:

SolverBase.Availability

cbCut(con)[source]

在回调中添加一个剪切。

Parameters:

con (pyomo.core.base.constraint.ConstraintData) – 要添加的切割

cbGetNodeRel(vars)[source]
Parameters:

vars (Var可迭代的 Var)

cbGetSolution(vars)[source]
Parameters:

变量 (可迭代的变量)

cbLazy(con)[source]
Parameters:

con (pyomo.core.base.constraint.ConstraintData) – 要添加的惰性约束

get_gurobi_param_info(param)[source]

获取有关gurobi参数的信息。

Parameters:

param (str) – 要获取信息的gurobi参数。请参阅Gurobi文档以了解可能的选项。

Return type:

包含参数名称、类型、值、最小值、最大值和默认值的六元组。

get_linear_constraint_attr(con, attr)[source]

获取gurobi线性约束上的属性值。

Parameters:
get_model_attr(attr)[source]

获取Gurobi模型上属性的值。

Parameters:

attr (str) – 要获取的属性。有关属性的描述,请参阅Gurobi文档。

get_quadratic_constraint_attr(con, attr)[source]

获取gurobi二次约束上的属性值。

Parameters:
get_sos_attr(con, attr)[源代码]

获取gurobi sos约束上的属性值。

Parameters:
get_var_attr(var, attr)[source]

获取gurobi变量上的属性值。

Parameters:
  • var (pyomo.core.base.var.VarData) – 应该检索其对应gurobi var属性的pyomo var。

  • attr (str) – 要获取的属性。请参阅gurobi文档

is_persistent()
Returns:

is_persistent – 如果求解器是持久求解器,则为True。

Return type:

bool

remove_block(block)

从模型中移除一个块

remove_constraints(cons: List[ConstraintData])

从模型中移除约束

remove_parameters(params: List[ParamData])

从模型中移除参数

remove_variables(variables: List[VarData])

从模型中移除变量

set_callback(func=None)[source]

为gurobi指定一个回调函数。

Parameters:

func (function) –

要调用的函数。该函数应具有三个参数。第一个参数是正在求解的pyomo模型。第二个参数是GurobiPersistent实例。第三个参数是gurobipy.GRB.Callback的枚举成员。这将指示Gurobi在分支定界算法中的位置。例如,假设我们想要解决

\[ \begin{align}\begin{aligned}min 2*x + y\\s.t.\\ y >= (x-2)**2\\ 0 <= x <= 4\\ y >= 0\\ y integer\end{aligned}\end{align} \]

作为一个MILP,使用回调中的扩展切割平面。

>>> from gurobipy import GRB 
>>> import pyomo.environ as pe
>>> from pyomo.core.expr.taylor_series import taylor_series_expansion
>>> from pyomo.contrib import appsi
>>>
>>> m = pe.ConcreteModel()
>>> m.x = pe.Var(bounds=(0, 4))
>>> m.y = pe.Var(within=pe.Integers, bounds=(0, None))
>>> m.obj = pe.Objective(expr=2*m.x + m.y)
>>> m.cons = pe.ConstraintList()  # 用于切割平面
>>>
>>> def _add_cut(xval):
...     # 生成切割的函数
...     m.x.value = xval
...     return m.cons.add(m.y >= taylor_series_expansion((m.x - 2)**2))
...
>>> _c = _add_cut(0)  # 从x的边界开始,生成2个切割
>>> _c = _add_cut(4)  # 这是一个任意选择
>>>
>>> opt = appsi.solvers.Gurobi()
>>> opt.config.stream_solver = True
>>> opt.set_instance(m) 
>>> opt.gurobi_options['PreCrush'] = 1
>>> opt.gurobi_options['LazyConstraints'] = 1
>>>
>>> def my_callback(cb_m, cb_opt, cb_where):
...     if cb_where == GRB.Callback.MIPSOL:
...         cb_opt.cbGetSolution(vars=[m.x, m.y])
...         if m.y.value < (m.x.value - 2)**2 - 1e-6:
...             cb_opt.cbLazy(_add_cut(m.x.value))
...
>>> opt.set_callback(my_callback)
>>> res = opt.solve(m) 

set_gurobi_param(param, val)[source]

设置一个gurobi参数。

Parameters:
  • param (str) – 要设置的gurobi参数。选项包括任何gurobi参数。 请参阅Gurobi文档以获取选项。

  • val (any) – 设置参数的值。请参阅Gurobi文档以了解可能的值。

set_instance(model)[source]

设置模型的实例

set_linear_constraint_attr(con, attr, val)[source]

设置gurobi线性约束上的属性值。

Parameters:
  • con (pyomo.core.base.constraint.ConstraintData) – 应该修改相应gurobi约束属性的pyomo约束。

  • attr (str) –

    要修改的属性。选项有:

    CBasis DStart Lazy

  • val (任意) – 请参阅gurobi文档以获取可接受的值。

set_objective(obj: ObjectiveData)

设置模型的当前目标

set_var_attr(var, attr, val)[source]

设置gurobi变量上的属性值。

Parameters:
  • var (pyomo.core.base.var.VarData) – 应该修改其对应的gurobi var属性的pyomo变量。

  • attr (str) –

    要修改的属性。选项有:

    Start VarHintVal VarHintPri BranchPriority VBasis PStart

  • val (任意) – 请参阅gurobi文档以获取可接受的值。

solve(model, **kwds) Results[source]
Keyword Arguments:
  • tee (TextIO_or_Logger, default=False) – tee 接受 bool, io.TextIOBase, 或 logging.Logger(或这些类型的列表)。True 被映射到 sys.stdout。求解器日志将被打印到每个 这些流/目的地。

  • working_dir (Path, optional) – 生成文件应保存的目录。这将替换keepfiles选项。

  • load_solutions (Bool, default=True) – 如果为True,原始变量的值将被加载到模型中。

  • raise_exception_on_nonoptimal_result (Bool, default=True) – 如果为False,solve方法将继续处理,即使返回的结果是非最优的。

  • symbolic_solver_labels (Bool, default=False) – 如果为True,求解器的名称将反映Pyomo组件的名称。在调用set_instance后无法更改。

  • timer (可选) – 用于记录相关过程计时数据的计时器对象。

  • threads (NonNegativeInt, optional) – 求解器使用的线程数。

  • time_limit (NonNegativeFloat, optional) – 应用于求解器的时间限制(以秒为单位)。

  • solver_options (dict, optional) – 传递给求解器的选项。

  • auto_updates (dict, optional) –

    用于检测模型在求解之间变化的配置选项

    check_for_new_or_removed_constraints: bool, 默认=True

    如果为False,新的/旧的约束将不会在后续求解中自动检测到。仅在手动使用opt.add_constraints()和opt.remove_constraints()更新求解器时,或确定模型中没有添加/删除约束时使用False。

    check_for_new_or_removed_vars: bool, 默认=True

    如果为False,新的/旧的变量将不会在后续求解中自动检测到。仅在手动使用opt.add_variables()和opt.remove_variables()更新求解器时,或确定模型中没有添加/删除变量时使用False。

    check_for_new_or_removed_params: bool, 默认=True

    如果为False,新的/旧的参数将不会在后续求解中自动检测到。仅在手动使用opt.add_parameters()和opt.remove_parameters()更新求解器时,或确定模型中没有添加/删除参数时使用False。

    check_for_new_objective: bool, 默认=True

    如果为False,新的/旧的目标将不会在后续求解中自动检测到。仅在手动使用opt.set_objective()更新求解器时,或确定模型中没有添加/删除目标时使用False。

    update_constraints: bool, 默认=True

    如果为False,现有约束的更改将不会在后续求解中自动检测到。这包括约束的lower、body和upper属性的更改。仅在手动使用opt.remove_constraints()和opt.add_constraints()更新求解器时,或确定约束未被修改时使用False。

    update_vars: bool, 默认=True

    如果为False,现有变量的更改将不会在后续求解中自动检测到。这包括变量的lb、ub、domain和fixed属性的更改。仅在手动使用opt.update_variables()更新求解器时,或确定变量未被修改时使用False。

    update_parameters: bool, 默认=True

    如果为False,参数值的更改将不会在后续求解中自动检测到。仅在手动使用opt.update_parameters()更新求解器时,或确定参数未被修改时使用False。

    update_named_expressions: bool, 默认=True

    如果为False,表达式的更改将不会在后续求解中自动检测到。仅在手动使用opt.remove_constraints()和opt.add_constraints()更新求解器时,或确定表达式未被修改时使用False。

    update_objective: bool, 默认=True

    如果为False,目标的更改将不会在后续求解中自动检测到。这包括目标的expr和sense属性。仅在手动使用opt.set_objective()更新求解器时,或确定目标未被修改时使用False。

    treat_fixed_vars_as_params: bool, 默认=True

    [高级选项]

    这是一个高级选项,仅在特殊情况下使用。默认设置为True时,固定变量将被视为参数。这意味着如果x或y是固定的,z == x*y将是线性的,并且约束可以写入LP文件。如果固定变量的值发生变化,我们必须完全重新处理所有使用该变量的约束。如果treat_fixed_vars_as_params为False,则约束将被处理为固定变量未固定,并且求解器将被告知变量是固定的。这意味着即使x和/或y是固定的,z == x*y也不能写入LP文件。然而,这种方式更新固定变量的值要快得多。

update_parameters()[source]

更新模型上的参数

update_variables(variables: List[VarData])

更新模型上的变量

version()[source]
Returns:

version – 表示版本的元组

Return type:

tuple

write(filename)[source]

将模型写入文件(例如,一个lp文件)。

Parameters:

filename (str) – 模型应写入的文件名称。

CONFIG = <pyomo.contrib.solver.gurobi.GurobiConfig object>