Java Choco CSP оптимизировать с помощью суммы переменных
Я использую Choco для решения CSP. Я хочу сделать что-то вроде этого:
BoolVar[] badRow = getBadRow();
solver.findOptimalSolution(ResolutionPolicy.MINIMIZE, sum(badRow));
Другими словами, Я хочу, чтобы система нашла решение, в котором бадроу имеет наименьшее количество истинных значений. Я не хочу, чтобы это было "ограничением", потому что тогда система просто выйдет из строя, и я хочу избежать сбоев. Но я не могу найти никакого способа создать IntVar как сумму других переменных.
Как мне это сделать?
1 ответ:
Я взял это с совершенно неправильного угла зрения. Вместо того чтобы пытаться построить переменную как сумму других переменных, я создаю простую переменную, а затем ограничиваю ее суммой других переменных, например:
IntVar overflows = VariableFactory.integer("overflows", 0, maxOverflows, solver); Constraint tracker = IntConstraintFactory.sum(badRow, overflows); solver.post(tracker); solver.findAllOptimalSolutions(ResolutionPolicy.MINIMIZE, overflows, true);
И это решило проблему. Теперь я чувствую себя глупо из-за того, что не вижу этого.