【Gurobi】| Gurobi中非线性约束的对偶值的获取:QCP、QCQP、SOCP

【Gurobi】| Gurobi中非线性约束的对偶值的获取:QCP、QCQP、SOCP

作者:刘兴禄,清华大学,清华-伯克利深圳学院

欢迎关注我们的微信公众号 运小筹

在这里插入图片描述

Gurobi中非线性约束的对偶值是可以成功获取的,但是在求解模型之前,需要将参数QCPDual设置为1.

在这里插入图片描述

注意:如果打开参数QCPDual的话,求解器一般会来求解KKT 方程组来获得QCP的对偶变量。

下面是一个具体的例子。

from gurobipy import * 

# Create a new model
m = Model("QCQP")

# Create variables
x = m.addVar(lb = 0, vtype=GRB.CONTINUOUS , name="x")
y = m.addVar(lb = 0, vtype=GRB.CONTINUOUS , name="y")

# Set objective
m.setObjective (1/2 * x * x + y * y - x * y - 2 * x - 6 * y, GRB.MINIMIZE)

m.setParam('QCPDual', 1)

# Add constraints
m.addConstr(-x + 2 * y <= 2, "c0")
m.addConstr(x * x + 1/2 * y <= 2, "c1")
m.addConstr (2 * x + y <= 3, "c2")

 # Write model to file
m.write("QCQP.lp")

# Solve the model
m.optimize ()

for con in m.getConstrs():
    print(con.ConstrName, '----', con.Pi)

for con in m.getQConstrs():
    print(con.QCName, '----', con.QCPi) 

求解日志如下

Changed value of parameter QCPDual to 1
   Prev: 0  Min: 0  Max: 1  Default: 0
Gurobi Optimizer version 9.0.1 build v9.0.1rc0 (win64)
Optimize a model with 2 rows, 2 columns and 4 nonzeros
Model fingerprint: 0xb070fdc1
Model has 3 quadratic objective terms
Model has 1 quadratic constraint
Coefficient statistics:
  Matrix range     [1e+00, 2e+00]
  QMatrix range    [1e+00, 1e+00]
  QLMatrix range   [5e-01, 5e-01]
  Objective range  [2e+00, 6e+00]
  QObjective range [1e+00, 2e+00]
  Bounds range     [0e+00, 0e+00]
  RHS range        [2e+00, 3e+00]
  QRHS range       [2e+00, 2e+00]
Presolve time: 0.01s
Presolved: 8 rows, 8 columns, 16 nonzeros
Presolved model has 2 second-order cone constraints
Ordering time: 0.00s

Barrier statistics:
 AA' NZ     : 2.100e+01
 Factor NZ  : 3.600e+01
 Factor Ops : 2.040e+02 (less than 1 second per iteration)
 Threads    : 1

                  Objective                Residual
Iter       Primal          Dual         Primal    Dual     Compl     Time
   0  -1.49326539e+01 -4.35523979e+00  1.76e+00 3.70e+00  4.65e+00     0s
   1  -6.12239820e+00 -1.12395144e+01  1.94e-06 1.22e-01  5.19e-01     0s
   2  -8.53301014e+00 -8.99477729e+00  1.54e-07 1.02e-03  4.24e-02     0s
   3  -8.82682363e+00 -8.85269793e+00  3.11e-13 5.50e-06  2.35e-03     0s
   4  -8.83955816e+00 -8.84007974e+00  1.03e-13 4.22e-09  4.74e-05     0s
   5  -8.83999672e+00 -8.84000230e+00  3.74e-12 5.43e-11  5.08e-07     0s

Barrier solved model in 5 iterations and 0.02 seconds
Optimal objective -8.83999672e+00

Solving KKT system to obtain QCP duals...


c0 ---- -1.0799994965216462
c2 ---- -1.8399999978917783
c1 ---- -1.1253017667406413e-10

可以看到,日志中说

Solving KKT system to obtain QCP duals...

可见确实是通过求解KKT方程组获得的dual。

公众号往期推文如下
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值