fix bug in rins
This commit is contained in:
@@ -459,13 +459,8 @@ Neighborhood RelaxationInducedNeighborhoodGenerator::Generate(
|
||||
neighborhood.cp_model = helper_.ModelProto();
|
||||
neighborhood.is_generated = false;
|
||||
|
||||
const int num_model_vars = helper_.ModelProto().variables_size();
|
||||
SharedRINSNeighborhoodManager* rins_manager =
|
||||
model_->Mutable<SharedRINSNeighborhoodManager>();
|
||||
std::vector<int> all_vars;
|
||||
for (int i = 0; i < num_model_vars; ++i) {
|
||||
all_vars.push_back(i);
|
||||
}
|
||||
if (rins_manager == nullptr) {
|
||||
return neighborhood;
|
||||
}
|
||||
@@ -481,6 +476,7 @@ Neighborhood RelaxationInducedNeighborhoodGenerator::Generate(
|
||||
rins_neighborhood_opt.value().fixed_vars) {
|
||||
int var = fixed_var.first.model_var;
|
||||
int64 value = fixed_var.second;
|
||||
if (var >= neighborhood.cp_model.variables_size()) continue;
|
||||
if (!helper_.IsActive(var)) continue;
|
||||
neighborhood.cp_model.mutable_variables(var)->clear_domain();
|
||||
neighborhood.cp_model.mutable_variables(var)->add_domain(value);
|
||||
@@ -493,6 +489,7 @@ Neighborhood RelaxationInducedNeighborhoodGenerator::Generate(
|
||||
int var = reduced_var.first.model_var;
|
||||
int64 lb = reduced_var.second.first;
|
||||
int64 ub = reduced_var.second.second;
|
||||
if (var >= neighborhood.cp_model.variables_size()) continue;
|
||||
if (!helper_.IsActive(var)) continue;
|
||||
Domain domain = ReadDomainFromProto(neighborhood.cp_model.variables(var));
|
||||
domain = domain.IntersectionWith(Domain(lb, ub));
|
||||
|
||||
@@ -1302,7 +1302,7 @@ void SolveLoadedCpModel(const CpModelProto& model_proto,
|
||||
mapping->GetProtoVariableFromIntegerVariable(positive_var);
|
||||
rins_var.lp = gtl::FindWithDefault(*lp_dispatcher, positive_var, nullptr);
|
||||
|
||||
if (rins_var.lp != nullptr) {
|
||||
if (rins_var.lp != nullptr && rins_var.model_var >= 0) {
|
||||
rins_vars->vars.push_back(rins_var);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,8 +48,9 @@ SharedRINSNeighborhoodManager::GetUnexploredNeighborhood() {
|
||||
// return the last added neighborhood and remove it.
|
||||
const RINSNeighborhood neighborhood = std::move(neighborhoods_.back());
|
||||
neighborhoods_.pop_back();
|
||||
total_stored_vars_ -=
|
||||
const int64 neighborhood_size =
|
||||
neighborhood.fixed_vars.size() + neighborhood.reduced_domain_vars.size();
|
||||
total_stored_vars_ -= neighborhood_size;
|
||||
VLOG(1) << "total stored vars: " << total_stored_vars_;
|
||||
return neighborhood;
|
||||
}
|
||||
@@ -113,8 +114,12 @@ void AddRINSNeighborhood(Model* model) {
|
||||
}
|
||||
}
|
||||
|
||||
model->Mutable<SharedRINSNeighborhoodManager>()->AddNeighborhood(
|
||||
rins_neighborhood);
|
||||
const int64 neighborhood_size = rins_neighborhood.fixed_vars.size() +
|
||||
rins_neighborhood.reduced_domain_vars.size();
|
||||
if (neighborhood_size > 0) {
|
||||
model->Mutable<SharedRINSNeighborhoodManager>()->AddNeighborhood(
|
||||
rins_neighborhood);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace sat
|
||||
|
||||
Reference in New Issue
Block a user