Source code for pyomo.contrib.mindtpy.tabu_list

#  ___________________________________________________________________________
#
#  Pyomo: Python Optimization Modeling Objects
#  Copyright (c) 2008-2024
#  National Technology and Engineering Solutions of Sandia, LLC
#  Under the terms of Contract DE-NA0003525 with National Technology and
#  Engineering Solutions of Sandia, LLC, the U.S. Government retains certain
#  rights in this software.
#  This software is distributed under the 3-clause BSD License.
#  ___________________________________________________________________________
#

from pyomo.common.dependencies import attempt_import, UnavailableClass

cplex, cplex_available = attempt_import('cplex')


[docs] class IncumbentCallback_cplex( cplex.callbacks.IncumbentCallback if cplex_available else UnavailableClass(cplex) ): """Inherent class in Cplex to call Incumbent callback.""" def __call__(self): """ This is an inherent function in LazyConstraintCallback in CPLEX. This callback will be used after each new potential incumbent is found. https://www.ibm.com/support/knowledgecenter/SSSA5P_12.10.0/ilog.odms.cplex.help/refpythoncplex/html/cplex.callbacks.IncumbentCallback-class.html IncumbentCallback will be activated after Lazyconstraint callback, when the potential incumbent solution is satisfies the lazyconstraints. TODO: need to handle GOA same integer combination check in lazyconstraint callback in single_tree.py """ mindtpy_solver = self.mindtpy_solver opt = self.opt config = self.config if config.single_tree: self.reject() else: temp = [] for var in mindtpy_solver.mip.MindtPy_utils.discrete_variable_list: value = self.get_values(opt._pyomo_var_to_solver_var_map[var]) temp.append(int(round(value))) mindtpy_solver.curr_int_sol = tuple(temp) if mindtpy_solver.curr_int_sol in set(mindtpy_solver.integer_list): self.reject()