我正在尝试使用 cplex 求解器优化 pyomo 中的二次目标函数,并且得到此 CPLEX 错误 5002:目标不是凸的。具有不定目标的 QP 可以用最优目标 2 求解局部最优,或者用最优目标 3 求解全局最优。从 IBM 手册中我知道我们应该在 python 中设置 optimizationtarget 参数我有这个 globalqpex1.py ,现在我怎样才能设置参数有人能解释一下如何设置这个参数
假设我可以运行 python globalqpex1.py g 全局最优,但我没有任何 .sav 或 .lp 文件,而且我不知道它们是什么......进一步我在手册中发现我可以解决这个问题通过在python中设置parameters.optimalitytarget来解决问题 我应该如何以及在哪里添加 c.parameters.optimalitytarget.set(1)
这是我得到的错误 CPLEX 错误 5002:目标不是凸的。 可以解决目标不明确的QP 达到最优目标 2 的局部最优, 或具有最优目标 3 的全局最优。 预求解时间 = 0.00 秒。 (0.00 刻度) 屏障时间 = 0.00 秒。 (0.00 刻度)
错误终止,CPLEX 错误 5002。 求解时间 = 0.00 秒。 确定性时间 = 0.00 刻度(0.49 刻度/秒)
CPLEX> CPLEX 错误 1217:不存在解决方案。 没有写入文件。 CPLEX> [ 0.05] Pyomo 已完成 错误:加载模型时出现意外异常: 无法加载状态错误的 SolverResults 对象:错误
最佳答案
pyomo 中有两个不同的 CPLEX 接口(interface)。其中一种是使用 CPLEX 交互式 (cplex
),另一种是利用 CPLEX Python API (cplex_direct
)。在某些情况下,两个接口(interface)之间的参数设置看起来略有不同(例如,当参数在层次结构中的深度超过一级时)。通常,您可以使用 here 中描述的技术来设置参数。 .
无论哪种情况,对于optimality target parameter ,您应该能够使用以下内容:
solver = SolverFactory('cplex')
solver.options['optimalitytarget'] = 3
下面是我们设置 absolute MIP gap tolerance 的示例两个 CPLEX 接口(interface)之间的参数和语法略有不同:
# 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
关于python-3.x - 在python中为cplex求解器pyomo设置optimalitytarget参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56812526/