Google OR-Tools v9.11
a fast and portable software suite for combinatorial optimization
|
#include <cp_model_lns.h>
Public Member Functions | |
LocalBranchingLpBasedNeighborhoodGenerator (NeighborhoodGeneratorHelper const *helper, absl::string_view name, std::function< void(CpModelProto, Model *)> solve_callback, ModelSharedTimeLimit *const global_time_limit) | |
Neighborhood | Generate (const CpSolverResponse &initial_solution, double difficulty, absl::BitGenRef random) final |
Public Member Functions inherited from operations_research::sat::NeighborhoodGenerator | |
NeighborhoodGenerator (absl::string_view name, NeighborhoodGeneratorHelper const *helper) | |
virtual | ~NeighborhoodGenerator ()=default |
virtual bool | ReadyToGenerate () const |
Returns true if the neighborhood generator can generate a neighborhood. | |
double | GetUCBScore (int64_t total_num_calls) const |
void | AddSolveData (SolveData data) |
double | Synchronize () |
std::string | name () const |
Returns a short description of the generator. | |
int64_t | num_calls () const |
Number of times this generator was called. | |
int64_t | num_fully_solved_calls () const |
Number of time the neighborhood was fully solved (OPTIMAL/INFEASIBLE). | |
int64_t | num_improving_calls () const |
Out of num_calls(), how many improved the given solution. | |
int64_t | num_consecutive_non_improving_calls () const |
double | difficulty () const |
The current difficulty of this generator. | |
double | deterministic_limit () const |
The current time limit that the sub-solve should use on this generator. | |
Additional Inherited Members | |
Protected Attributes inherited from operations_research::sat::NeighborhoodGenerator | |
const std::string | name_ |
const NeighborhoodGeneratorHelper & | helper_ |
absl::Mutex | generator_mutex_ |
Solves a local branching LP and greedily picks a set of variables with the largest differences between the initial and local branching LP solutions, breaking ties uniformly at random.
This is based on Huang et al., "Local Branching Relaxation Heuristics for Integer Linear Programs", 2023.
Definition at line 594 of file cp_model_lns.h.
|
inlineexplicit |
Definition at line 599 of file cp_model_lns.h.
|
finalvirtual |
Generates a "local" subproblem for the given seed.
The difficulty will be in [0, 1] and is related to the asked neighborhood size (and thus local problem difficulty). A difficulty of 0.0 means empty neighborhood and a difficulty of 1.0 means the full problem. The algorithm should try to generate a neighborhood according to this difficulty which will be dynamically adjusted depending on whether or not we can solve the subproblem in a given time limit.
The given initial_solution should contain a feasible solution to the initial CpModelProto given to this class. Any solution to the returned CPModelProto should also be valid solution to the same initial model.
This function should be thread-safe.
Collect active binary variables and corresponding initial solution values.
Create and solve local branching LP.
Parameters to enable solving the LP only.
Parameters to attempt to speed up solve.
Parameters to limit time spent in the solve. The max number of iterations is relaxed from the default since we rely more on deterministic time.
Skip LNS if no (full) feasible solution was found for the LP.
Compute differences between LP solution and initial solution, with a small random noise for tie breaking.
Take the target_size variables with largest differences.
For now, we include all non-binary variables in the relaxation, since their values are likely tied to the binary values.
Implements operations_research::sat::NeighborhoodGenerator.
Definition at line 1756 of file cp_model_lns.cc.