在 python 中为 cplex 求解器 pyomo 设置 optimalitytarget 参数

Setting optimalitytarget parameter in python for cplex solver pyomo

我正在尝试使用 cplex 求解器优化 pyomo 中的二次 objective 函数,但我收到此 CPLEX 错误 5002:objective 不是凸函数。具有不确定 objective 的 QP 可以通过最优目标 2 求解到局部最优,或者通过最优目标 3 求解到全局最优。从 IBM 手册中我知道我们应该在 python 中设置 optimalitytarget 参数我有这个 globalqpex1.py 现在我该如何设置参数 谁能解释一下如何设置这个参数

据说我可以 运行 python globalqpex1.py g 全局最优,但我没有任何 .sav 或 .lp 文件,我也不知道它们是什么...我在手册中进一步发现,我可以通过在 python 中设置 parameters.optimalitytarget 来解决这个问题 我应该如何以及在哪里添加 c.parameters.optimalitytarget.set(1)

这是我得到的错误 CPLEX 错误 5002:objective 不是凸的。 QP不定objective可以解 到最优目标为 2 的局部最优, 或具有最优目标 3 的全局最优。 预求解时间 = 0.00 秒。 (0.00 刻度) 屏障时间 = 0.00 秒。 (0.00 个刻度)

错误终止,CPLEX 错误 5002。 求解时间 = 0.00 秒。 确定性时间 = 0.00 个刻度 (0.49 ticks/sec)

CPLEX> CPLEX 错误 1217:不存在解决方案。 没有写入文件。 CPLEX> [ 0.05] Pyomo 完成 错误:加载模型时发生意外异常: 无法加载状态错误的 SolverResults 对象:错误

pyomo 中有两个不同的 CPLEX 界面。有一种是针对 CPLEX 交互式的 (cplex),还有一种是利用 CPLEX Python API (cplex_direct)。在某些情况下,两个接口之间的设置参数看起来略有不同(例如,当参数在层次结构中超过一层时)。通常,您使用 here.

中描述的技术设置参数

无论哪种情况,对于 optimality target parameter,您应该能够使用以下内容:

solver = SolverFactory('cplex')
solver.options['optimalitytarget'] = 3

这是我们设置 absolute MIP gap tolerance 参数的示例,两个 CPLEX 接口之间的语法略有不同:

# Using the CPLEX interactive interface
solver = SolverFactory('cplex')
solver.options['mip tolerances absmipgap'] = 3

# Using the CPLEX Python API interface (i.e., use underscores)
solver = SolverFactory('cplex_direct')
solver.options['mip_tolerances_absmipgap'] = 3