为什么 CP-SAT 速度较慢?使用 OR-Tools 比较 CP-SAT 和 Python 中 N 皇后问题的原始求解器的性能

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

我目前正在使用 OR-Tools 解决 Python(版本 3.12)中的 N-Queens 问题。具体来说,我正在尝试使用 CP-SAT 求解器和 OR-Tools 提供的原始求解器。

对于 CP-SAT 求解器,我使用了 Google 官方文档中提供的代码,可在 here 获取。同样,对于原始求解器,我参考了同一文档中提供的代码here

但是,我发现这两个求解器之间的性能存在显着差异。例如,当解决棋盘上 12 个皇后时,以下是观察到的时间:

time python queens-original.py

Statistics
  failures: 116806
  branches: 262010
  wall time: 688 ms
  Solutions found: 14200
python queens-original.py  0.72s user 0.01s system 99% cpu 0.736 total
time python queens-cp-sat.py  

Statistics
  conflicts      : 133465
  branches       : 708019
  wall time      : 10.891582737 s
  solutions found: 14200
python queens-cp-sat.py  11.59s user 0.62s system 106% cpu 11.424 total

为了简化比较过程,我省略了负责在两个脚本中打印结果的部分。

我的问题有两个:

对于这个特定的问题实例,为什么原始求解器比 CP-SAT 求解器表现出明显更好的性能?

是否可以对 CP-SAT 实施进行任何优化或调整,以提高其性能并使其与原始求解器相比更具竞争力?

任何见解或建议将不胜感激。谢谢!

我尝试按照 Google 文档使用 CP-SAT 和原始 OR-Tools 求解器来解决 N-Queens 问题。有了 12 个皇后,原始求解器的性能明显快于 CP-SAT,这与我的预期相反。我正在寻求深入了解 CP-SAT 速度较慢的原因以及任何潜在的优化。

or-tools cp-sat constraint-satisfaction
1个回答
0
投票

这个问题之前有人问过。

简短的回答,我们不关心 nqueens。它没有反映任何有用的问题。

它不测试求解器找到硬解或证明最优性的能力。它只是测试求解器处理节点和读取变量域的速度。

在这些方面,CP-SAT 比原始 cp 求解器慢得多。但在实际问题上,分析时永远不会出现读取域或处理节点,因此没有动力去优化求解器的这方面。

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