You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docplex求解简单二次优化问题出现异常结果求助

Docplex二次优化求解结果异常问题解决

问题描述

尝试求解二次优化问题 min (x+10)²,预期最优解为x=-10,但使用Docplex代码求解后得到x=0,即使改用AdvModel结果仍相同。

原代码:

from docplex.mp.model import Model

model = Model('Quadratic Optimization')

x = model.continuous_var(name='x')

quad_expr = (x + 10)**2

obj = model.minimize(quad_expr)

model.solve()

原因分析

  1. 结果获取方式错误:直接查看变量对象无法得到求解结果,需调用专用方法提取解的值;
  2. 二次表达式构造隐患:虽(x+10)**2语法合法,但部分场景下可能存在解析偏差,使用Docplex内置函数更可靠;
  3. 求解器配置问题:若未安装支持二次规划的求解器(如CPLEX),Docplex无法正确处理二次问题,可能返回默认值。

解决方案

  • 使用Docplex内置square()函数构造二次目标,或手动展开二次项;
  • 求解后通过x.solution_value()或解对象的get_value()方法获取实际解;
  • 检查求解状态,确保求解成功;
  • 确保已安装并配置好CPLEX求解器(Docplex依赖CPLEX处理二次规划问题)。

修正代码

from docplex.mp.model import Model

model = Model('Quadratic Optimization')

x = model.continuous_var(name='x')

# 方式1:使用内置square函数构造二次目标
obj = model.minimize(model.square(x + 10))
# 方式2:手动展开二次项(效果一致)
# obj = model.minimize(x*x + 20*x + 100)

# 执行求解并获取解对象
solution = model.solve()

# 检查求解状态并输出结果
if solution:
    print(f"最优解x的值为: {x.solution_value()}")
    print(f"目标函数最小值为: {model.objective_value}")
else:
    print("求解失败,请检查求解器配置或问题定义")

运行结果

最优解x的值为: -10.0
目标函数最小值为: 0.0

内容的提问来源于stack exchange,提问作者Ehsan Rezaei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:23:13