Я использую решатель CP-SAT от ortools
https://developers.google.com/optimization/cp/cp_solver
Я выполняю решатель с объектом обратного вызова
solver = cp_model.CpSolver()
solution_agg = SolutionCollector(data, self.variables, self.products, self.vehicles)
status = solver.SearchForAllSolutions(self.model, callback=solution_agg)
Решение agg должно отфильтровывать все решения, которые имеют неправильные назначения, я не могу смоделировать их как линейные неравенства.
Что я знаю, так это то, что сгенерированные решения могут быть сходимы быстрее, а "попадания" в верификатор могут быть меньше. Если я могу добавить ограничения на ходу внутри обратного вызова.
Я пытался сделать это внутри обратного вызова, добавив ограничение для поиска решений меньшего объема, чем минимальный объем до сих пор.
self.__model.Add(volume_expression <= min_found_yet)
Это не приводит к ошибке, но число раз, когда верификатор отклонял решение, остается тем же.
Можно ли формировать ограничения при решении? Если не в Ortools, то любой другой решатель, который предоставляет?