如何加速复杂的解决方案池?
How to speed up cplex solution pool?
我有一个 MIP 模型,我需要生成它的解池。生成这个池大约需要 5 分钟,但我需要为 100k 模型生成这个池,所以我需要这个池 运行 至少快 8 倍,但不幸的是我对加速 cplex 没有任何了解。我可以更改任何设置以使其 运行 更快吗?是否可以在不同的 CPU 上并行使其 运行 ?
我的池设置:
cpx = mdl.get_cplex()
cpx.parameters.mip.tolerances.integrality.set(0)
cpx.parameters.simplex.tolerances.markowitz.set(0.999)
cpx.parameters.simplex.tolerances.optimality.set(1e-9)
cpx.parameters.simplex.tolerances.feasibility.set(1e-9)
cpx.parameters.mip.pool.intensity.set(2)
cpx.parameters.mip.pool.absgap.set(1e75)
cpx.parameters.mip.pool.relgap.set(1e75)
cpx.parameters.mip.limits.populate.set(50)
想到两件事:
- 尝试使用 MIP 强调参数(参见 here)。特别是尝试值“4 Emphasize finding hidden feasible solutions”。您也可以尝试提高启发式算法。
- 如果您的机器上有多个核心,那么默认情况下 CPLEX 将使用所有可用的核心来求解模型。您可以尝试并行求解 多个 模型,而不是将所有计算能力都投入到 单个 模型中,每个模型的线程数都减少了。例如,如果您有 12 个核心,那么您可以用 12 个模型求解一个模型,或者您可以并行求解 4 个模型,每个模型使用 3 个线程。根据 CPLEX 为您的实例利用多线程的能力,后一种方法可能更快。
我有一个 MIP 模型,我需要生成它的解池。生成这个池大约需要 5 分钟,但我需要为 100k 模型生成这个池,所以我需要这个池 运行 至少快 8 倍,但不幸的是我对加速 cplex 没有任何了解。我可以更改任何设置以使其 运行 更快吗?是否可以在不同的 CPU 上并行使其 运行 ? 我的池设置:
cpx = mdl.get_cplex()
cpx.parameters.mip.tolerances.integrality.set(0)
cpx.parameters.simplex.tolerances.markowitz.set(0.999)
cpx.parameters.simplex.tolerances.optimality.set(1e-9)
cpx.parameters.simplex.tolerances.feasibility.set(1e-9)
cpx.parameters.mip.pool.intensity.set(2)
cpx.parameters.mip.pool.absgap.set(1e75)
cpx.parameters.mip.pool.relgap.set(1e75)
cpx.parameters.mip.limits.populate.set(50)
想到两件事:
- 尝试使用 MIP 强调参数(参见 here)。特别是尝试值“4 Emphasize finding hidden feasible solutions”。您也可以尝试提高启发式算法。
- 如果您的机器上有多个核心,那么默认情况下 CPLEX 将使用所有可用的核心来求解模型。您可以尝试并行求解 多个 模型,而不是将所有计算能力都投入到 单个 模型中,每个模型的线程数都减少了。例如,如果您有 12 个核心,那么您可以用 12 个模型求解一个模型,或者您可以并行求解 4 个模型,每个模型使用 3 个线程。根据 CPLEX 为您的实例利用多线程的能力,后一种方法可能更快。