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算法的主循环。
__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()定义用于未来数据传输的列表。
检查配置选项是否有意义。
检查子求解器是否可用并获得许可。
create_utility_block(model, name)deactivate_no_good_cuts_when_fixing_bound(...)fix_dual_bound(last_iter_cuts)修复当无优切割或禁忌列表被激活时的双重边界。
fp_loop()可行性泵循环。
计算双重积分。
获取原始积分、对偶积分和原始对偶间隙积分。
计算原始积分。
get_solution_name_obj(main_mip_results)处理解决可行性NLP子问题的最新迭代结果。
handle_fp_main_tc(fp_main_results)处理可行性泵主问题的终止条件。
handle_fp_subproblem_optimal(fp_nlp)将解决方案复制到工作模型中,更新边界,添加OA切割/不良切割/增加目标切割,计算对偶,并在解决方案得到改进时存储当前解决方案。
此函数处理在给定不可行解的情况下解决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_rNLP([add_oa_cuts])通过求解松弛的NLP来初始化问题,然后存储从求解rNLP中获得的最优变量值。
停用非线性约束以创建MIP问题。
初始化并设置MIP和NLP子求解器的选项。
iteration_cycling()license_is_valid()load_solution()确定模型是否可以通过MindtPy解决。
objective_reformulation()process_objective([update_var_con_list])过程模型目标函数。
reached_iteration_limit()reached_stalling_limit()reached_time_limit()为APPSI求解器设置更新配置。
使用LazyConstraintCallback设置懒OA。
设置日志记录器的格式化器和处理器。
设置MIP求解器。
set_up_solve_data(model)设置求解数据。
使用IncumbentCallback设置tabulist。
为可行性泵方法设置主要问题。
为OA、ECP、可行性泵和ROA方法设置主要问题/主要正则化问题。
为ROA方法设置主要正则化问题。
solve(model, **kwds)解决模型。
如果fixed_nlp问题不可行,则解决可行性NLP。
此函数解决了MIP主要问题。
解决可行性泵NLP子问题。
此函数解决了MIP主要问题。
此函数解决了MIP主要问题。
解决固定NLP(整数固定)问题。
update_dual_bound(bound_value)更新对偶边界。
更新相对差距和绝对差距。
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设置为适当条件,即最优、最大迭代次数、最大时间限制)。
- available(exception_flag=True)
求解器始终可用。虽然子求解器可能不可用,但它们会在适当的时候引发错误。
- build_ordered_component_lists(model)
定义用于未来数据传输的列表。
还将变量的有序列表、约束附加到模型中,以便它们可以用于前后映射。
- 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:
- get_integral_info()
获取原始积分、对偶积分和原始对偶间隙积分。
- get_primal_integral()
计算原始积分。 参考:受限原始积分。[http://www.optimization-online.org/DB_FILE/2020/07/7910.pdf]
- Returns:
原始积分。
- Return type:
- 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:
- 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:
- 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_subsolvers()
初始化并设置MIP和NLP子求解器的选项。
- 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:
- 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元组。