natural API for Cp_SAT C++

This commit is contained in:
Laurent Perron
2021-12-09 15:29:49 +01:00
parent 0bf387c3bc
commit 6ae332569b
40 changed files with 2423 additions and 2235 deletions

View File

@@ -110,8 +110,7 @@ void CostasHard(const int dim) {
for (int j = 0; j < dim - i; ++j) {
IntVar diff = cp_model.NewIntVar(difference_domain);
subset.push_back(diff);
cp_model.AddEquality(
diff, LinearExpr::ScalProd({vars[j + i], vars[j]}, {1, -1}));
cp_model.AddEquality(diff, vars[j + i] - vars[j]);
}
cp_model.AddAllDifferent(subset);
@@ -255,10 +254,8 @@ void CostasBoolSoft(const int dim) {
cp_model.NewIntVar(Domain(0, positive_diffs.size()));
const IntVar neg_var =
cp_model.NewIntVar(Domain(0, negative_diffs.size()));
cp_model.AddGreaterOrEqual(
pos_var, LinearExpr::Sum(positive_diffs).AddConstant(-1));
cp_model.AddGreaterOrEqual(
neg_var, LinearExpr::Sum(negative_diffs).AddConstant(-1));
cp_model.AddGreaterOrEqual(pos_var, LinearExpr::Sum(positive_diffs) - 1);
cp_model.AddGreaterOrEqual(neg_var, LinearExpr::Sum(negative_diffs) - 1);
all_violations.push_back(pos_var);
all_violations.push_back(neg_var);
}