MindtPy_OA_Solver

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

class pyomo.contrib.mindtpy.outer_approximation.MindtPy_OA_Solver(**kwds)[source]

基础类:_MindtPyAlgorithm

混合整数非线性规划(MINLP)问题的分解求解器。

MindtPy(Pyomo中的混合整数非线性分解工具箱)求解器 应用多种基于分解的方法来解决混合整数 非线性规划(MINLP)问题。 此类包括:

  • 外部近似法 (OA)

  • 正则化外逼近 (ROA)

  • 基于LP/NLP的分支定界法 (LP/NLP)

  • 基于正则化LP/NLP的分支定界(RLP/NLP)

__init__(**kwds)

这是所有MindtPy算法的通用初始化方法,以便我们正确设置配置参数并初始化算法状态的通用部分。

方法

MindtPy_initialization()

初始化分解算法。

MindtPy_iteration_loop()

MindtPy算法的主循环。

__init__(**kwds)

这是所有MindtPy算法的通用初始化方法,以便我们正确设置配置参数并初始化算法状态的通用部分。

add_cuts(dual_values[, linearize_active, ...])

add_cuts_components(model)

add_regularization()

algorithm_should_terminate(check_cycling)

检查算法是否应在给定点终止。

available([exception_flag])

求解器始终可用。

bounds_converged()

build_ordered_component_lists(model)

定义用于未来数据传输的列表。

check_config()

检查配置选项是否有意义。

check_subsolver_validity()

检查子求解器是否可用并获得许可。

create_utility_block(model, name)

deactivate_no_good_cuts_when_fixing_bound(...)

fix_dual_bound(last_iter_cuts)

修复当无优切割或禁忌列表被激活时的双重边界。

fp_loop()

可行性泵循环。

get_dual_integral()

计算双重积分。

get_integral_info()

获取原始积分、对偶积分和原始对偶间隙积分。

get_primal_integral()

计算原始积分。

get_solution_name_obj(main_mip_results)

handle_feasibility_subproblem_tc(...)

处理解决可行性NLP子问题的最新迭代结果。

handle_fp_main_tc(fp_main_results)

处理可行性泵主问题的终止条件。

handle_fp_subproblem_optimal(fp_nlp)

将解决方案复制到工作模型中,更新边界,添加OA切割/不良切割/增加目标切割,计算对偶,并在解决方案得到改进时存储当前解决方案。

handle_main_infeasible()

此函数处理在给定不可行解的情况下解决MIP问题的最新迭代结果。

handle_main_max_timelimit(main_mip, ...)

此函数处理在解决MIP问题耗时过长的情况下,最新迭代的结果。

handle_main_mip_termination(main_mip, ...)

handle_main_optimal(main_mip[, update_bound])

此函数将结果从'solve_main'复制到工作模型,并更新上/下界。

handle_main_unbounded(main_mip)

此函数处理由于松弛导致的无界解的最新迭代求解MIP问题的结果。

handle_nlp_subproblem_tc(fixed_nlp, result)

此函数处理固定NLP子问题的不同终止条件。

handle_regularization_main_tc(main_mip, ...)

处理正则化主要问题的结果。

handle_subproblem_infeasible(fixed_nlp[, cb_opt])

解决可行性问题并根据指定策略添加切割。

handle_subproblem_optimal(fixed_nlp[, ...])

此函数将NLP求解器函数('solve_subproblem')的结果复制到工作模型中,更新边界,添加OA和no-good切割,然后如果它是新的最佳解决方案,则存储新解决方案。

handle_subproblem_other_termination(...[, ...])

处理在给定既不是最优也不可行的解的情况下,解决固定NLP子问题的最新迭代结果。

init_max_binaries()

通过最大化激活的二进制变量的数量来修改模型。

init_rNLP([add_oa_cuts])

通过求解松弛的NLP来初始化问题,然后存储从求解rNLP中获得的最优变量值。

initialize_mip_problem()

停用非线性约束以创建MIP问题。

initialize_subsolvers()

初始化并设置MIP和NLP子求解器的选项。

iteration_cycling()

license_is_valid()

load_solution()

model_is_valid()

确定模型是否可以通过MindtPy解决。

objective_reformulation()

process_objective([update_var_con_list])

过程模型目标函数。

reached_iteration_limit()

reached_stalling_limit()

reached_time_limit()

set_appsi_solver_update_config()

为APPSI求解器设置更新配置。

set_up_lazy_OA_callback()

使用LazyConstraintCallback设置懒OA。

set_up_logger()

设置日志记录器的格式化器和处理器。

set_up_mip_solver()

设置MIP求解器。

set_up_solve_data(model)

设置求解数据。

set_up_tabulist_callback()

使用IncumbentCallback设置tabulist。

setup_fp_main()

为可行性泵方法设置主要问题。

setup_main()

为OA、ECP、可行性泵和ROA方法设置主要问题/主要正则化问题。

setup_regularization_main()

为ROA方法设置主要正则化问题。

solve(model, **kwds)

解决模型。

solve_feasibility_subproblem()

如果fixed_nlp问题不可行,则解决可行性NLP。

solve_fp_main()

此函数解决了MIP主要问题。

solve_fp_subproblem()

解决可行性泵NLP子问题。

solve_main()

此函数解决了MIP主要问题。

solve_regularization_main()

此函数解决了MIP主要问题。

solve_subproblem()

解决固定NLP(整数固定)问题。

update_dual_bound(bound_value)

更新对偶边界。

update_gap()

更新相对差距和绝对差距。

update_primal_bound(bound_value)

更新原始边界。

update_result()

update_suboptimal_dual_bound(results)

如果松弛问题未达到最优解,则根据松弛问题的对偶边界更新对偶边界。

version()

返回一个描述求解器版本的3元组。

属性

CONFIG

成员文档

MindtPy_initialization()

初始化分解算法。

此函数初始化分解算法,其中包括生成构建主MIP所需的初始切割。

MindtPy_iteration_loop()

MindtPy算法的主循环。

这是本包中外逼近算法的最外层函数;此函数控制模型求解的进度。

Raises:

ValueError – 策略值不正确或未包含。

algorithm_should_terminate(check_cycling)

检查算法是否应在给定点终止。

此函数根据求解器选项和进度确定算法是否应终止。 (将self.results.solver.termination_condition设置为适当条件,即最优、最大迭代次数、最大时间限制)。

Parameters:

check_cycling (bool) – 是否检查导致离散变量循环通过相同值的特殊情况。

Returns:

如果算法应该终止,则为True,否则为False。

Return type:

bool

available(exception_flag=True)

求解器始终可用。虽然子求解器可能不可用,但它们会在适当的时候引发错误。

build_ordered_component_lists(model)

定义用于未来数据传输的列表。

还将变量的有序列表、约束附加到模型中,以便它们可以用于前后映射。

check_config()[source]

检查配置选项是否有意义。

check_subsolver_validity()

检查子求解器是否可用并获得许可。

fix_dual_bound(last_iter_cuts)

修复当无优切割或禁忌列表被激活时的双重边界。

Parameters:

last_iter_cuts (bool) – 最后一次迭代中的切割是否已添加。

fp_loop()

可行性泵循环。

这是本包中可行性泵算法的最外层函数;此函数控制模型求解的进度。

Raises:

ValueError – MindtPy 无法处理 FP-NLP 子问题的终止条件。

get_dual_integral()

计算对偶积分。 参考:受限的原积分。[http://www.optimization-online.org/DB_FILE/2020/07/7910.pdf]

Returns:

双重积分。

Return type:

float

get_integral_info()

获取原始积分、对偶积分和原始对偶间隙积分。

get_primal_integral()

计算原始积分。 参考:受限原始积分。[http://www.optimization-online.org/DB_FILE/2020/07/7910.pdf]

Returns:

原始积分。

Return type:

float

handle_feasibility_subproblem_tc(subprob_terminate_cond, MindtPy)

处理解决可行性NLP子问题的最新迭代结果。

Parameters:
  • subprob_terminate_cond (Pyomo TerminationCondition) – 可行性NLP子问题的终止条件。

  • MindtPy (Pyomo 块) – MindtPy_utils 块。

handle_fp_main_tc(fp_main_results)

处理可行性泵主问题的终止条件。

Parameters:

fp_main_results (SolverResults) – 解决FP主问题的结果。

Returns:

如果FP循环应终止,则为True,否则为False。

Return type:

bool

handle_fp_subproblem_optimal(fp_nlp)

将解决方案复制到工作模型中,更新边界,添加OA切割/不良切割/增加目标切割,计算对偶,并在解决方案得到改进时存储当前解决方案。

Parameters:

fp_nlp (Pyomo 模型) – 可行性泵 NLP 子问题。

handle_main_infeasible()

此函数处理在给定不可行解的情况下解决MIP问题的最新迭代结果。

handle_main_max_timelimit(main_mip, main_mip_results)

此函数处理在解决MIP问题耗时过长的情况下,最新迭代的结果。

Parameters:
  • main_mip (Pyomo 模型) – MIP 主问题。

  • main_mip_results ([type]) – 解决MIP主子问题的结果。

handle_main_optimal(main_mip, update_bound=True)

此函数将结果从‘solve_main’复制到工作模型并更新上下界。在主问题找到最优解后调用此函数。

Parameters:
  • main_mip (Pyomo 模型) – MIP 主问题。

  • update_bound (bool, optional) – 是否更新边界,默认为 True。 在处理正则化问题时,边界将不会更新。

handle_main_unbounded(main_mip)

此函数处理由于松弛导致的MIP问题最新迭代求解结果的无界解。

Parameters:

main_mip (Pyomo 模型) – MIP 主问题。

Returns:

main_mip_results – 有界主问题的结果。

Return type:

SolverResults

handle_nlp_subproblem_tc(fixed_nlp, result, cb_opt=None)

此函数处理固定NLP子问题的不同终止条件。

Parameters:
  • fixed_nlp (Pyomo 模型) – 整数变量固定的 NLP 模型。

  • 结果 (SolverResults) – 解决NLP子问题的结果。

  • cb_opt (SolverFactory, optional) – Gurobi持久化求解器,默认为None。

handle_regularization_main_tc(main_mip, main_mip_results)

处理正则化主要问题的结果。

Parameters:
  • main_mip (Pyomo 模型) – MIP 主问题。

  • main_mip_results (SolverResults) – 解决正则化主子问题的结果。

Raises:

ValueError – MindtPy 无法处理正则化问题的终止条件。

handle_subproblem_infeasible(fixed_nlp, cb_opt=None)

解决可行性问题并根据指定策略添加切割。

此函数处理给定不可行解时解决NLP子问题的最新迭代结果,并将可行性问题的解复制到工作模型中。

Parameters:
  • fixed_nlp (Pyomo 模型) – 整数变量固定的 NLP 模型。

  • cb_opt (SolverFactory, optional) – Gurobi持久化求解器,默认为None。

handle_subproblem_optimal(fixed_nlp, cb_opt=None, fp=False)

此函数将NLP求解器函数('solve_subproblem')的结果复制到工作模型中,更新边界,添加OA和不良切割,然后如果这是新的最佳解决方案,则存储新解决方案。此函数处理给定最优解后解决NLP子问题的最新迭代结果。

Parameters:
  • fixed_nlp (Pyomo 模型) – 整数变量固定的 NLP 模型。

  • cb_opt (SolverFactory, optional) – Gurobi持久化求解器,默认为None。

  • fp (bool, optional) – 是否在可行性泵的循环中,默认为 False。

handle_subproblem_other_termination(fixed_nlp, termination_condition, cb_opt=None)

处理在解决固定NLP子问题的最新迭代结果,该结果既不是最优的也不是不可行的。

Parameters:
  • fixed_nlp (Pyomo 模型) – 整数变量固定的 NLP 模型。

  • termination_condition (Pyomo TerminationCondition) – 固定NLP子问题的终止条件。

  • cb_opt (SolverFactory, optional) – Gurobi持久化求解器,默认为None。

Raises:

ValueError – MindtPy 无法处理 NLP 子问题的终止条件。

init_max_binaries()

通过最大化激活的二进制变量的数量来修改模型。

注意 - 用户通常希望在调用此函数后调用 solve_subproblem。

Raises:
  • ValueError – MILP 主问题不可行。

  • ValueError – MindtPy 无法处理 MILP 主问题的终止条件。

init_rNLP(add_oa_cuts=True)

通过求解松弛的NLP来初始化问题,然后存储从求解rNLP中获得的最优变量值。

Parameters:

add_oa_cuts (Bool) – 是否在解决松弛的NLP问题后添加OA切割。

Raises:

ValueError – MindtPy 无法处理松弛 NLP 的终止条件。

initialize_mip_problem()[source]

停用非线性约束以创建MIP问题。

initialize_subsolvers()

初始化并设置MIP和NLP子求解器的选项。

model_is_valid()

确定模型是否可以通过MindtPy解决。

Returns:

如果模型在MindtPy中可解,则为True,否则为False。

Return type:

bool

process_objective(update_var_con_list=True)

过程模型目标函数。

检查模型是否只有一个有效的目标。 如果目标是非线性的,将其移至约束中。 如果不存在目标函数,发出警告并创建一个虚拟目标。

Parameters:

update_var_con_list (bool, optional) – 是否更新变量/约束/目标列表,默认为 True。 目前,update_var_con_list 仅在 MindtPy 中的 add_regularization 不为 None 时设置为 False。

set_appsi_solver_update_config()

为APPSI求解器设置更新配置。

set_up_lazy_OA_callback()

使用LazyConstraintCallback设置懒OA。 目前仅支持CPLEX和Gurobi。

set_up_logger()

设置日志记录器的格式化器和处理器。

set_up_mip_solver()

设置MIP求解器。

Returns:

mainopt – 定制的MIP求解器。

Return type:

SolverFactory

set_up_solve_data(model)

设置求解数据。

Parameters:

model (Pyomo model) – 要在MindtPy中求解的原始模型。

set_up_tabulist_callback()

使用IncumbentCallback设置tabulist。 目前仅支持CPLEX。

setup_fp_main()

为可行性泵方法设置主要问题。

setup_main()

为OA、ECP、可行性泵和ROA方法设置主要问题/主要正则化问题。

setup_regularization_main()

为ROA方法设置主要正则化问题。

solve(model, **kwds)

解决模型。

Parameters:

model (Pyomo model) – 需要解决的MINLP模型。

Returns:

results – 通过MindtPy解决MINLP问题的结果。

Return type:

SolverResults

solve_feasibility_subproblem()

如果fixed_nlp问题不可行,则解决可行性NLP。

Returns:

  • feas_subproblem (Pyomo 模型) – 来自模型的可行性非线性规划问题。

  • feas_soln (SolverResults) – 解决可行性非线性规划问题的结果。

solve_fp_main()

此函数解决了MIP主要问题。

Returns:

  • self.mip (Pyomo 模型) – 存储在 self 中的 MIP。

  • main_mip_results (SolverResults) – 解决主 MIP 的结果。

solve_fp_subproblem()

解决可行性泵NLP子问题。

此函数通过松弛整数变量来设置‘fp_nlp’。 预先计算对偶值,停用无关紧要的约束,然后解决NLP模型。

Returns:

  • fp_nlp (Pyomo model) – 模型中的固定非线性规划。

  • results (SolverResults) – 解决固定非线性规划子问题的结果。

solve_main()

此函数解决了MIP主要问题。

Returns:

  • self.mip (Pyomo 模型) – 存储在 self 中的 MIP。

  • main_mip_results (SolverResults) – 解决主 MIP 的结果。

solve_regularization_main()

此函数解决了MIP主要问题。

Returns:

  • self.mip (Pyomo 模型) – 存储在 self 中的 MIP。

  • main_mip_results (SolverResults) – 解决主 MIP 的结果。

solve_subproblem()

解决固定NLP(整数固定)问题。

此函数通过固定二进制变量、将连续变量设置为其初始变量值、预计算对偶值、停用无关约束,然后求解NLP模型来设置‘fixed_nlp’。

Returns:

  • fixed_nlp (Pyomo 模型) – 整数变量固定的 NLP 模型。

  • results (SolverResults) – 解决 Fixed-NLP 的结果。

update_dual_bound(bound_value)

更新对偶边界。

在解决松弛问题后调用,包括松弛的NLP和MIP主问题。 使用松弛问题的最优原始边界来更新对偶边界。

Parameters:

bound_value (float) – 用于更新对偶边界的输入值。

update_gap()

更新相对差距和绝对差距。

update_primal_bound(bound_value)

更新原始边界。

在解决固定的NLP子问题后调用。 使用松弛问题的最优原始边界来更新对偶边界。

Parameters:

bound_value (float) – 用于更新原始边界的输入值。

update_suboptimal_dual_bound(results)

如果松弛问题未达到最优解,则根据松弛问题的对偶边界更新对偶边界。

Parameters:

结果 (SolverResults) – 解决松弛问题的结果。 松弛问题的对偶界只能从结果对象中获得。

version()

返回一个描述求解器版本的3元组。