Ortools устанавливает ограничения при решении - PullRequest
1 голос
/ 12 марта 2019

Я использую решатель 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, то любой другой решатель, который предоставляет?

1 Ответ

1 голос
/ 12 марта 2019

Не напрямую.Решатель не имеет состояния и читает cp_model один раз в начале решения.

То, что вы описываете, кажется просто свойством минимизации.Почему бы вам просто не минимизировать объем_экспрессии?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...