prob.solve(solver=CPLEX, advance=0)
advance=0
将关闭 高级启动开关 参数。因此,如果在 CPLEX Python API 中参数名称为 parameters.advance
,则应将其传递为关键字参数的一部分(即 advance
),并将值作为关键字参数传递。传递给 solve 方法的任何额外关键字参数都会以这种方式进行解释。为了调试,您应该将 verbose=True
(solve
的标准关键字参数之一)设置为打开引擎日志;参数设置将显示在日志顶部。
这种行为没有记录是有原因的。它不允许您设置参数,例如 数据一致性检查和建模辅助。在 CPLEX Python API 中,该参数名称为 parameters.read.datacheck
,但是在 Python 中不能将 read.datacheck
用作关键字参数(否则会导致语法错误)。
作为解决方法,请考虑使用环境变量 ILOG_CPLEX_PARAMETER_FILE
,其文档在 这里。
编辑:上述解决方法在cvxpy 1.0.8中已不再需要。也就是说,您现在应该能够设置所有参数,而无论它们在参数层次结构中的位置如何。但是,您需要使用可选的cplex_params
参数。最好将其与verbose=True
组合使用,以便您可以在引擎日志中查看参数设置。例如:
prob.solve(solver=cvxpy.CPLEX,
verbose=True,
cplex_params={"mip.tolerances.absmipgap": 1e-07,
"benders.strategy": 3})