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

Python中OR-Tools如何设置变量幂次?优化含x²的目标函数

问题核心

原代码使用的GLOP是线性规划求解器,仅支持线性目标函数与约束,而3x²属于二次项,这类问题属于二次规划(QP)范畴,因此需要切换到支持二次规划的求解器,并使用OR-Tools提供的二次目标构造API来实现。

可行解决方案
  1. 替换为支持二次规划的求解器:比如SCIP(开源免费,可通过pip install ortools[scip]安装)、CPLEX等;
  2. 利用OR-Tools的二次目标设置方法,手动添加x²项的系数,线性项保持原有设置逻辑。
修改后的完整代码
from ortools.linear_solver import pywraplp

def QuadraticProgrammingExample():
    """Quadratic programming sample modified from linear example."""
    # 初始化支持二次规划的SCIP求解器
    solver = pywraplp.Solver.CreateSolver('SCIP')
    if not solver:
        print("无法创建二次规划求解器,请确认已安装ortools[scip]依赖")
        return

    # 变量定义与原示例一致
    x = solver.NumVar(0, solver.infinity(), 'x')
    y = solver.NumVar(0, solver.infinity(), 'y')

    print('Number of variables =', solver.NumVariables())

    # 保留原约束条件
    solver.Add(x + 2 * y <= 14.0)
    solver.Add(3 * x - y >= 0.0)
    solver.Add(x - y <= 2.0)

    print('Number of constraints =', solver.NumConstraints())

    # 构建目标函数:3x² + 4y
    objective = solver.Objective()
    # OR-Tools二次项内部计算为 0.5 * 系数 * 变量²,所以3x²需要设置系数为6(0.5*6x²=3x²)
    objective.SetQuadraticCoefficient(x, 6.0)
    # 线性项4y直接设置系数
    objective.SetCoefficient(y, 4.0)
    objective.SetMaximization()

    # 求解问题
    status = solver.Solve()

    if status == pywraplp.Solver.OPTIMAL:
        print('Solution:')
        print('Objective value =', solver.Objective().Value())
        print('x =', x.solution_value())
        print('y =', y.solution_value())
    else:
        print('The problem does not have an optimal solution.')

    print('\nAdvanced usage:')
    print('Problem solved in %f milliseconds' % solver.wall_time())
    print('Problem solved in %d iterations' % solver.iterations())

QuadraticProgrammingExample()
关键说明
  • 为什么不能直接用x*x?OR-Tools的NumVar对象仅重载了线性运算(加减、数乘),不支持变量间的乘法,否则会生成非合法表达式对象;
  • 求解器限制:GLOP仅支持线性规划,必须切换到SCIP、CPLEX等支持二次规划的求解器;
  • 二次项系数逻辑:OR-Tools的二次目标函数框架为0.5*Σ(Q[i][j]x[i]x[j]) + Σ(c[i]x[i]),因此要得到3x²,需将x的二次系数设为6,确保最终计算结果与预期一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 11:45:37