Ortools在解决时设置约束

问题描述 投票:1回答:1

我正在使用ortools https://developers.google.com/optimization/cp/cp_solver的CP-SAT求解器

我正在使用回调对象执行求解器

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,那么提供的任何其他解算器?

modeling integer-programming or-tools operations-research
1个回答
1
投票

不是直接的。求解器是无状态的,并在求解开始时读取cp_model一次。

你所描述的只是一个最小化属性。你为什么不尽量减少volume_expression?

© www.soinside.com 2019 - 2024. All rights reserved.