GurobiPersistent4MindtPy

(类来自 pyomo.contrib.mindtpy.util)

class pyomo.contrib.mindtpy.util.GurobiPersistent4MindtPy(**kwds)[source]

基础类: GurobiPersistent

Gurobi 的一个新的持久接口。

__init__(**kwds)

构造函数

方法

__init__(**kwds)

构造函数

add_block(block)

向求解器的模型添加一个单一的Pyomo块。

add_column(model, var, obj_coef, ...)

向求解器和Pyomo模型添加一列

add_constraint(con)

向求解器的模型添加单个约束。

add_sos_constraint(con)

向求解器的模型添加单个SOS约束(如果支持)。

add_var(var)

向求解器的模型添加单个变量。

available([exception_flag])

如果求解器可用,则返回 True。

cbCut(con)

在回调中添加一个剪切。

cbGet(what)

cbGetNodeRel(vars)

cbGetSolution(vars)

cbLazy(con)

cbSetSolution(vars, solution)

cbUseSolution()

close()

释放此求解器实例使用的本地Gurobi资源。

close_global()

释放此求解器使用的所有Gurobi模型,并释放全局默认的Gurobi环境。

config_block([init])

default_variable_value()

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变量上的属性值。

has_capability(cap)

返回一个布尔值,表示求解器是否支持特定功能。

has_instance()

如果已调用set_instance并且此求解器接口具有pyomo模型和求解器模型,则为True。

license_is_valid()

如果求解器存在并且具有有效的许可证(如果适用),则为True

load_duals([cons_to_load])

将双变量加载到 'dual' 后缀中。

load_rc(vars_to_load)

将减少的成本加载到 'rc' 后缀中。

load_slacks([cons_to_load])

将松弛变量的值加载到 'slack' 后缀中。

load_vars([vars_to_load])

将求解器变量的值加载到相应的pyomo变量中。

problem_format()

返回当前问题的格式。

remove_block(block)

从求解器的模型中移除单个块。

remove_constraint(con)

从求解器的模型中移除单个约束。

remove_sos_constraint(con)

从求解器的模型中移除单个SOS约束。

remove_var(var)

从求解器的模型中移除单个变量。

reset()

重置求解器的状态

results_format()

返回当前的结果格式。

set_callback([func])

为gurobi指定一个回调函数。

set_gurobi_param(param, val)

设置一个gurobi参数。

set_instance(model, **kwds)

此方法用于将提供的Pyomo模型转换为求解器的Python模型实例。

set_linear_constraint_attr(con, attr, val)

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

set_objective(obj)

设置求解器的目标。

set_options(istr)

set_problem_format(format)

设置当前问题的格式(如果它是有效的),并将结果格式更新为适合此问题格式的有效格式。

set_results_format(format)

设置当前结果格式(如果它对当前问题格式有效)。

set_var_attr(var, attr, val)

设置gurobi变量上的属性值。

solve(*args, **kwds)

解决模型。

update()

update_var(var)

更新求解器模型中的单个变量。

version()

返回一个描述求解器可执行文件版本的4元组。

warm_start_capable()

如果求解器可以接受热启动解决方案,则为True

write(filename)

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

属性

keepfiles

log_file

soln_file

suffixes

symbolic_solver_labels

tee

warm_start_file_name

warm_start_solve

results

从solve方法返回的结果对象。

成员文档

add_block(block)

向求解器的模型添加一个单一的Pyomo块。

这将保持任何现有模型组件的完整性。

Parameters:

block (Block (标量 Block单个 BlockData))

add_column(model, var, obj_coef, constraints, coefficients)

向求解器和Pyomo模型添加一列

这将把Pyomo变量var添加到求解器的模型中,并将相关约束的系数放入求解器模型中。如果obj_coef不为零,它将会把obj_coef*var添加到Pyomo和求解器模型的目标中。

Parameters:
  • model (将列添加到的pyomo ConcreteModel)

  • var (Var (标量 Var单个 VarData))

  • obj_coef (float, pyo.Param)

  • 约束 (列表标量约束单一约束数据)

  • coefficients (list要在相关约束中应用于 var 的系数)

add_constraint(con)

向求解器的模型添加单个约束。

这将保持任何现有模型组件的完整性。

Parameters:

con (Constraint (标量约束单一约束数据))

add_sos_constraint(con)

向求解器的模型添加单个SOS约束(如果支持)。

这将保持任何现有模型组件的完整性。

Parameters:

con (SOSConstraint)

add_var(var)

向求解器的模型添加单个变量。

这将保持任何现有模型组件的完整性。

Parameters:

var (Var)

available(exception_flag=True)

如果求解器可用,则返回 True。

Parameters:

exception_flag (bool) – 如果为True,当求解器不可用时抛出异常而不是返回False(默认为False)

通常,用户不需要调用available(),因为在求解模型时会自动运行检查。然而,在使用共享的Gurobi许可证时,它对于简单的重试循环非常有用:

with SolverFactory('gurobi', solver_io='python') as opt:
    while not available(exception_flag=False):
        time.sleep(1)
    opt.solve(model)
cbCut(con)

在回调中添加一个剪切。

Parameters:

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

cbGetNodeRel(vars)
Parameters:

vars (Var可迭代的 Var)

cbGetSolution(vars)
Parameters:

变量 (可迭代的变量)

cbLazy(con)
Parameters:

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

close()

释放此求解器实例使用的本地Gurobi资源。

由求解器创建的所有Gurobi模型都被释放。如果求解器是使用manage_env=True创建的,此方法还会关闭此求解器实例使用的Gurobi环境。调用.close()可以达到与退出求解器上下文相同的结果(尽管在可能的情况下,使用上下文管理器是首选):

opt = SolverFactory('gurobi', solver_io='python', manage_env=True)
try:
    opt.solve(model)
finally:
    opt.close()
# Gurobi models and environments created by `opt` are freed

与上下文管理器一样,如果使用了manage_env=False(默认值),则仅释放由此求解器创建的Gurobi模型。默认的全局Gurobi环境仍将处于活动状态:

opt = SolverFactory('gurobi', solver_io='python')
try:
    opt.solve(model)
finally:
    opt.close()
# Gurobi models created by `opt` are freed; however the
# default/global Gurobi environment is still active
close_global()

释放此求解器使用的所有Gurobi模型,并释放全局默认的Gurobi环境。

默认环境由所有使用manage_env=False(默认值)启动的GurobiDirect求解器使用。为了确保所有Gurobi资源都被释放,所有实例化的GurobiDirect求解器也必须正确关闭。

以下示例将释放所有Gurobi资源,假设用户没有创建任何其他模型(例如通过另一个GurobiDirect对象,且manage_env=False):

opt = SolverFactory('gurobi', solver_io='python')
try:
    opt.solve(model)
finally:
    opt.close_global()
# All Gurobi models created by `opt` are freed and the default
# Gurobi environment is closed
get_gurobi_param_info(param)

获取有关gurobi参数的信息。

Parameters:

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

Return type:

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

get_linear_constraint_attr(con, attr)

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

Parameters:
  • con (pyomo.core.base.constraint.ConstraintData) – 应该检索其对应的gurobi约束属性的pyomo约束。

  • attr (str) –

    要获取的属性。选项有:

    Sense RHS ConstrName Pi Slack CBasis DStart Lazy IISConstr SARHSLow SARHSUp FarkasDual

get_model_attr(attr)

获取Gurobi模型上属性的值。

Parameters:

attr (str) –

要获取的属性。请参阅Gurobi文档以了解属性的描述。

选项包括:

NumVars NumConstrs NumSOS NumQConstrs NumgGenConstrs NumNZs DNumNZs NumQNZs NumQCNZs NumIntVars NumBinVars NumPWLObjVars ModelName ModelSense ObjCon ObjVal ObjBound ObjBoundC PoolObjBound PoolObjVal MIPGap Runtime Status SolCount IterCount BarIterCount NodeCount IsMIP IsQP IsQCP IsMultiObj IISMinimal MaxCoeff MinCoeff MaxBound MinBound MaxObjCoeff MinObjCoeff MaxRHS MinRHS MaxQCCoeff MinQCCoeff MaxQCLCoeff MinQCLCoeff MaxQCRHS MinQCRHS MaxQObjCoeff MinQObjCoeff Kappa KappaExact FarkasProof TuneResultCount LicenseExpiration BoundVio BoundSVio BoundVioIndex BoundSVioIndex BoundVioSum BoundSVioSum ConstrVio ConstrSVio ConstrVioIndex ConstrSVioIndex ConstrVioSum ConstrSVioSum ConstrResidual ConstrSResidual ConstrResidualIndex ConstrSResidualIndex ConstrResidualSum ConstrSResidualSum DualVio DualSVio DualVioIndex DualSVioIndex DualVioSum DualSVioSum DualResidual DualSResidual DualResidualIndex DualSResidualIndex DualResidualSum DualSResidualSum ComplVio ComplVioIndex ComplVioSum IntVio IntVioIndex IntVioSum

get_quadratic_constraint_attr(con, attr)

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

Parameters:
get_sos_attr(con, attr)

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

Parameters:
get_var_attr(var, attr)

获取gurobi变量上的属性值。

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

  • attr (str) –

    要获取的属性。选项有:

    LB UB Obj VType VarName X Xn RC BarX Start VarHintVal VarHintPri BranchPriority VBasis PStart IISLB IISUB PWLObjCvx SAObjLow SAObjUp SALBLow SALBUp SAUBLow SAUBUp UnbdRay

has_capability(cap)

返回一个布尔值,表示求解器是否支持特定功能。如果求解器不知道某个选项,则默认为‘False’。期望输入一个字符串。

示例: # 如果求解器支持sos1约束,则打印True,否则打印False print(solver.has_capability(‘sos1’)

# 如果求解器支持‘feature’,则打印True,否则打印False print(solver.has_capability(‘feature’)

Parameters:

cap (str) – 特征

Returns:

val – 求解器是否具有指定的能力。

Return type:

bool

has_instance()

如果已调用set_instance并且此求解器接口具有pyomo模型和求解器模型,则为True。

Returns:

tmp

Return type:

bool

license_is_valid()

如果求解器存在并且具有有效的许可证(如果适用),则为True

load_duals(cons_to_load=None)

将双变量加载到‘dual’后缀中。‘dual’后缀必须存在于父模型上。

Parameters:

cons_to_load (list of Constraint)

load_rc(vars_to_load)

将减少的成本加载到‘rc’后缀中。‘rc’后缀必须存在于父模型上。

Parameters:

vars_to_load (list of Var)

load_slacks(cons_to_load=None)

将松弛变量的值加载到‘slack’后缀中。‘slack’后缀必须存在于父模型中。

Parameters:

cons_to_load (list of Constraint)

load_vars(vars_to_load=None)

将求解器变量中的值加载到相应的pyomo变量中。

Parameters:

vars_to_load (list of Var)

problem_format()

返回当前问题的格式。

remove_block(block)

从求解器的模型中移除单个块。

这将保持其他模型组件的完整性。

警告:用户在修改块之前必须调用remove_block。

Parameters:

block (Block (标量 Block单个 BlockData))

remove_constraint(con)

从求解器的模型中移除单个约束。

这将保持其他模型组件的完整性。

Parameters:

con (Constraint (标量约束单一约束数据))

remove_sos_constraint(con)

从求解器的模型中移除单个SOS约束。

这将保持其他模型组件的完整性。

Parameters:

con (SOSConstraint)

remove_var(var)

从求解器的模型中移除单个变量。

这将保持其他模型组件的完整性。

Parameters:

var (Var (标量 Var单个 VarData))

reset()

重置求解器的状态

results_format()

返回当前的结果格式。

set_callback(func=None)

为gurobi指定一个回调函数。

Parameters:

func (function) –

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

\begin{array}{ll} \min & 2x + y \\ \mathrm{s.t.} & y \geq (x-2)^2 \\ & 0 \leq x \leq 4 \\ & y \geq 0 \\ & y \in \mathbb{Z} \end{array}

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

from gurobipy import GRB
import pyomo.environ as pe
from pyomo.core.expr.taylor_series import taylor_series_expansion

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))

_add_cut(0)  # 从x的边界开始,生成2个切割
_add_cut(4)  # 这是一个任意选择

opt = pe.SolverFactory('gurobi_persistent')
opt.set_instance(m)
opt.set_gurobi_param('PreCrush', 1)
opt.set_gurobi_param('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)
opt.solve()
>>> assert abs(m.x.value - 1) <= 1e-6
>>> assert abs(m.y.value - 1) <= 1e-6

set_gurobi_param(param, val)

设置一个gurobi参数。

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

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

set_instance(model, **kwds)

此方法用于将提供的Pyomo模型转换为求解器的Python模型实例。这将丢弃任何现有模型并从头开始。

Parameters:

model (ConcreteModel) – 用于求解器的pyomo模型。

Keyword Arguments:
  • symbolic_solver_labels (bool) – 如果为True,求解器的组件(例如,变量、约束)将被赋予与Pyomo组件名称相对应的名称。

  • skip_trivial_constraints (bool) – 如果为True,则任何具有常量主体的约束将不会被添加到求解器模型中。 使用此选项时要小心。如果跳过了平凡约束,则无法从持久求解器中移除该约束(如果用户尝试移除不存在的约束,则会引发错误)。

  • output_fixed_variable_bounds (bool) – 如果为False,则在求解器约束中使用固定变量时将引发错误。 这对于捕获错误非常有用。通常,固定变量应作为常量值出现在求解器约束中。如果为True,则不会引发错误。

set_linear_constraint_attr(con, attr, val)

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

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

  • attr (str) –

    要修改的属性。选项有:

    CBasis DStart Lazy

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

set_objective(obj)

设置求解器的目标。请注意,至少目前,任何现有的目标都将被丢弃。除此之外,任何现有的模型组件将保持不变。

Parameters:

obj (Objective)

set_problem_format(format)

设置当前问题的格式(如果它是有效的)并更新结果格式,使其适用于此问题格式。

set_results_format(format)

设置当前结果格式(如果它对当前问题格式有效)。

set_var_attr(var, attr, val)

设置gurobi变量上的属性值。

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

  • attr (str) –

    要修改的属性。选项有:

    Start VarHintVal VarHintPri BranchPriority VBasis PStart

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

solve(*args, **kwds)

解决模型。

Keyword Arguments:
  • suffixes (list of str) – 字符串应表示求解器支持的后缀。示例包括‘dual’、‘slack’和‘rc’。

  • options (dict) – 求解器选项的字典。请参阅求解器文档以了解可能的求解器选项。

  • warmstart (bool) – 如果为True,求解器将被热启动。

  • keepfiles (bool) – 如果为True,求解器的日志文件将被保存。

  • logfile (str) – 用于求解器日志文件的名称。

  • load_solutions (bool) – 如果为True且存在解决方案,解决方案将被加载到Pyomo模型中。

  • report_timing (bool) – 如果为True,则将打印时间信息。

  • tee (bool) – 如果为True,则求解器日志将被打印。

update_var(var)

更新求解器模型中的单个变量。

这将更新边界,根据需要固定/取消固定变量,并更新变量类型。

Parameters:

var (Var (标量 Var单个 VarData))

version()

返回一个描述求解器可执行文件版本的4元组。

warm_start_capable()

如果求解器可以接受热启动解决方案,则为True

write(filename)

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

Parameters:

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

results

从solve方法返回的结果对象。