python - 将 CPLEX 参数传递给 CVXPY
问题描述
使用 CPLEX 求解器时,如何通过 CVXPY 传递公差和其他参数?
from cvxpy import Problem, Minimize
from cvxpy.settings import CPLEX
costs = ...
constraints = ...
prob = Problem(Minimize(costs), constraints)
prob.solve(solver=CPLEX, ...)
尽管不清楚哪些参数适用于我的二次问题,但我看到了一页CPLEX 参数。此外,CVXPY 文档通过了其他求解器的选项,但不包括 CPLEX。
解决方案
这将在未来发生变化(请参阅此拉取请求),但使用 cvxpy 1.0.6,您可以执行以下操作(注意:这是未记录的行为;有关更多信息,请参见下文):
prob.solve(solver=CPLEX, advance=0)
将advance=0
“关闭”高级启动开关参数。因此,如果参数名称parameters.advance
在 CPLEX Python API 中,您将传入parameters.
(即advance
) 之后的部分和值作为关键字参数。传递给solve方法的任何额外关键字参数都以这种方式解释。对于调试,您可能应该设置verbose=True
(标准关键字参数之一solve
)以打开引擎日志;参数设置将显示在日志顶部。
没有充分的理由记录此行为。它不允许您设置数据一致性检查和建模辅助等参数。CPLEX Python API 中的该参数名称是parameters.read.datacheck
但read.datacheck
不能用作 Python 中的关键字参数(这将导致语法错误)。
作为一种解决方法,请考虑使用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})
推荐阅读
- sql - 如何导出报告并用数据标记列?
- python-3.x - How to partial fill_between in matplotlib, as in different colors for different values
- angular - 数据如何从 html 文件传输到 component.ts 文件
- reactjs - 主题黑暗将文本字段变为白色
- javascript - Vue Routing Guard TypeError
- gnuplot - Gnuplot and banana curve
- bash - 如何使用 bash 脚本操作文件中的行?
- java - How to store the output of an aggregate operator as a string in java?
- python - 使用 Selenium 运行 ChromeDriver 和 FirefoxDriver 的问题
- excel - Using Range(Cell1 value, Cell2 value) - VBA