【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 1Prev: 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.00sBarrier statistics:AA' NZ     : 2.100e+01Factor NZ  : 3.600e+01Factor Ops : 2.040e+02 (less than 1 second per iteration)Threads    : 1Objective                Residual
Iter       Primal          Dual         Primal    Dual     Compl     Time0  -1.49326539e+01 -4.35523979e+00  1.76e+00 3.70e+00  4.65e+00     0s1  -6.12239820e+00 -1.12395144e+01  1.94e-06 1.22e-01  5.19e-01     0s2  -8.53301014e+00 -8.99477729e+00  1.54e-07 1.02e-03  4.24e-02     0s3  -8.82682363e+00 -8.85269793e+00  3.11e-13 5.50e-06  2.35e-03     0s4  -8.83955816e+00 -8.84007974e+00  1.03e-13 4.22e-09  4.74e-05     0s5  -8.83999672e+00 -8.84000230e+00  3.74e-12 5.43e-11  5.08e-07     0sBarrier solved model in 5 iterations and 0.02 seconds
Optimal objective -8.83999672e+00Solving 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。

公众号往期推文如下



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

  1. Python中按值来获取指定的键

    转自: https://blog.csdn.net/Jerry_1126/article/details/87907162 Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可 ...

  2. pandas DataFrame(2)-行列索引及值的获取

    pandas DataFrame是二维的,所以,它既有列索引,又有行索引 上一篇里只介绍了列索引: import pandas as pddf = pd.DataFrame({'A': [0, 1, ...

  3. html获取文本框的值,如何获取输入框的内容

    js如何获取input输入框中输入的值 直接使用.value属性即可获取输入框的内容. 详细的步骤如下: 首先获取输入框对应的DOM元素,如: var bt=document.getElementBy ...

  4. JQuery EasyUi控件值的获取与设置

     1. 值的设置 dateTimeBox $('#StartDate').val(startTime); dateBox $('#StartDate').datebox('setValue', s ...

  5. html取 输入框中的值,jquery获取input输入框中的值

    如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML 一.jquery获取input文本框中的值 通过 ...

  6. Python中按值来获取指定键的两种方法

    Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...

  7. 二值mask图像 + RGB原图 生成可视化分割结果; 从二值mask获取分割轮廓点

    可视化分割结果: import cv2 import numpy as np from tqdm import tqdm from PIL import Image from pathlib impo ...

  8. php mysql获取新添加记录的id值_PHP获取MySql新增记录ID值的方法

    今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法 ...

  9. jmeter从mysql取值_Jmeter获取数据库值并作为参数请求(转载)

    转载自:https://www.cnblogs.com/mawenqiangios/p/11088672.html 01Jmeter连接数据库 1.添加JDBC Connection Configur ...

最新文章

  1. php敏感字符串过滤_PHP实现的敏感词过滤方法示例
  2. Linq专题之提高编码效率—— 第一篇 Aggregate方法
  3. 不同编程语言的取模运算%
  4. 多租户的数据库方案分析
  5. oracle 打印值,oracle – 在SQL Developer中打印变量的值
  6. [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
  7. ArcGIS中.shp矢量文件和.lyr图层文件的区别
  8. Python语音基础操作--4.3共振峰估计
  9. CAN总线和CANOpen协议栈总结
  10. [ML-03] Matplotlib-3
  11. loj10155 数字转换
  12. 一文读懂eBPF/XDP
  13. 大陆汽车:汽车电子电器架构的发展及其对车载以太网的影响
  14. C/C++二维数组顺时针翻转90度
  15. WPF Grid内控件布局方法
  16. centos 6.3下rarlinux 与wireshark的安装
  17. 读《一本小小的蓝色逻辑书》:识别常见的逻辑漏洞
  18. 区块链笔记:技术栈、对等网络、密码技术、账户模型、网络共识、脚本系统、扩展技术
  19. 国内外 做大数据的公司
  20. 计算机体系结构|MIT6.175和MIT6.375学习笔记

热门文章

  1. 图神经网络(CS224w)学习笔记2Traditional Methods for ML on Graphs
  2. Polycom被收购,视频会议市场好玩了
  3. windows安装nodejs【详细教程】
  4. ubuntu的recovery重置密码
  5. 用相对定位进行布局。
  6. Diablo 3 Web API
  7. android 调音源代码,android控制系统音量
  8. 产品经理培训班大概多少钱
  9. CentOS7 安装/使用 OneDrive
  10. 安卓学习:自定义图像