1

亲爱的,
我正在使用num_search_workers参数,我发现在 Windows 上使用 or-tool 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.suggested_decisions 是 BoolVars (决策变量)的字典问题如下:

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))
4

1 回答 1

1

欢迎来到并行世界。

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

超过 8 个线程,您很可能会受到内存限制。

话虽如此,这非常罕见。

你能把模型发给我吗?

于 2020-03-12T17:17:58.687 回答