Python CP-SAT:较高的num_search_workers值会增加解析时间

Python CP-SAT:较高的num_search_workers值会增加解析时间,python,or-tools,operations-research,Python,Or Tools,Operations Research,亲爱的, 我正在玩num\u search\u workers参数,我发现windows上的或7.5工具有一个奇怪的行为。 我在32核机器上进行了以下测试,发现1个线程的性能最好。 你知道为什么吗 开始解决使用1线程。。。 在13.578秒内解决 开始解决使用2个线程。。。 在45.832秒内解决 开始解决使用4个线程。。。 在53.031秒内解决 开始解决使用8个线程。。。 在62.013秒内解决 开始解决使用16个线程。。。 在157.5秒内解决 开始解决使用32个线程。。。 在807.77

亲爱的,
我正在玩num\u search\u workers参数,我发现windows上的或7.5工具有一个奇怪的行为。
我在32核机器上进行了以下测试,发现1个线程的性能最好。
你知道为什么吗

开始解决使用1线程。。。 在13.578秒内解决

开始解决使用2个线程。。。 在45.832秒内解决

开始解决使用4个线程。。。 在53.031秒内解决

开始解决使用8个线程。。。 在62.013秒内解决

开始解决使用16个线程。。。 在157.5秒内解决

开始解决使用32个线程。。。 在807.778秒内解决

开始使用64个线程求解。。。 在386.252秒内解决

模型大致如下:
考虑到Self.SugGeStdIsAdvices是BooVARS(决策变量)的字典。 问题是:

model.Add(sum(self.scenario.constants['scaling_factor']*self.suggested_decisions[r][0] for r in self.all_records)>=sum(sum(self.suggested_decisions[r][d]*(int(0.60*self.scenario.constants['scaling_factor']))for r in self.all_records) for d in self.all_decisions))
model.Add(sum(int(self.scenario.dataset['AMOUNT_FINANCED'][r])*self.suggested_decisions[r][0] for r in self.all_records)>=2375361256)
model.Add(sum(self.scenario.constants['scaling_factor']*self.scenario.dataset['Bad'][r]*self.suggested_decisions[r][0] for r in self.all_records)<=sum(self.suggested_decisions[r][0]*int(self.scenario.constants['scaling_factor']*0.038) for r in self.all_records))
model.Maximize(sum(int(self.scenario.dataset[\'AMOUNT_FINANCED\'][r])*self.suggested_decisions[r][0] for r in self.all_records))
model.Add(sum(self.scenario.constants['scaling_factor']]*self.all_记录中r的sum(self.scenario.constants['scaling_factor']]*self.all_记录中r的sum(self.suggered_decisions[r][d]*(int(0.60*self.scenario.constants['scaling_factor']))sel
模型.Add(总和(int(self.scenario.dataset['AMOUNT\u financiated'][r])*self.all\u记录中r的self.suggered\u决策[r][0]>=2375361256)

model.Add(总和(self.scenario.constants['scaling_factor']*self.scenario.dataset['Bad'][r]*self.self中r的建议_决策[r][0])欢迎来到并行世界

1到8个线程,你就是不走运。工作人员之间的通信会改变搜索速度并减慢搜索速度

超过8个线程,您很可能是内存受限

尽管如此,这是非常罕见的


你能把模型发给我吗?

在我的问题中添加了一部分代码。这基本上是一个带有线性约束的二进制问题。是否有一个标准来选择何时使用一个或多个线程。谢谢!!!@stefanoguerrieri导出一个模型do:
用open(“model.proto”,“w”)作为f:f.write(str(model.proto())
您可以通过电子邮件(不确定)发送给他,也可以将其附加到问题上,谢谢!我创建了一个问题:明白了。非常有趣的模型。多个重叠事实。默认的searchin 1线程非常幸运。该模型是一个大型线性系统。您添加的第一个线程在线性部分(分支、MIP剪切…)的速度往往较慢。在8个线程以上,我不会遇到您的速度减慢(请确保您报告walltime而不是cputime),因此我的系统可能会更少内存限制。是的,当我运行solve方法时,时间被视为结束-开始