[CP-SAT] improve diffn clustering; more work on hints

This commit is contained in:
Laurent Perron
2024-12-04 15:29:31 +01:00
parent a30311c49a
commit 873e0b47f8
28 changed files with 518 additions and 231 deletions

View File

@@ -167,15 +167,17 @@ IntegerLiteral SplitUsingBestSolutionValueInRepository(
// not executed often, but otherwise it is done for each search decision,
// which seems expensive. Improve.
std::function<BooleanOrIntegerLiteral()> FirstUnassignedVarAtItsMinHeuristic(
const std::vector<IntegerVariable>& vars, Model* model) {
absl::Span<const IntegerVariable> vars, Model* model) {
auto* integer_trail = model->GetOrCreate<IntegerTrail>();
return [/*copy*/ vars, integer_trail]() {
for (const IntegerVariable var : vars) {
const IntegerLiteral decision = AtMinValue(var, integer_trail);
if (decision.IsValid()) return BooleanOrIntegerLiteral(decision);
}
return BooleanOrIntegerLiteral();
};
return
[/*copy*/ vars = std::vector<IntegerVariable>(vars.begin(), vars.end()),
integer_trail]() {
for (const IntegerVariable var : vars) {
const IntegerLiteral decision = AtMinValue(var, integer_trail);
if (decision.IsValid()) return BooleanOrIntegerLiteral(decision);
}
return BooleanOrIntegerLiteral();
};
}
std::function<BooleanOrIntegerLiteral()> MostFractionalHeuristic(Model* model) {