【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 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相关推荐
- Python中按值来获取指定的键
转自: https://blog.csdn.net/Jerry_1126/article/details/87907162 Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可 ...
- pandas DataFrame(2)-行列索引及值的获取
pandas DataFrame是二维的,所以,它既有列索引,又有行索引 上一篇里只介绍了列索引: import pandas as pddf = pd.DataFrame({'A': [0, 1, ...
- html获取文本框的值,如何获取输入框的内容
js如何获取input输入框中输入的值 直接使用.value属性即可获取输入框的内容. 详细的步骤如下: 首先获取输入框对应的DOM元素,如: var bt=document.getElementBy ...
- JQuery EasyUi控件值的获取与设置
1. 值的设置 dateTimeBox $('#StartDate').val(startTime); dateBox $('#StartDate').datebox('setValue', s ...
- html取 输入框中的值,jquery获取input输入框中的值
如何用javascript获取input输入框中的值,js/jq通过name.id.class获取input输入框中的value 先准备一段 HTML 一.jquery获取input文本框中的值 通过 ...
- Python中按值来获取指定键的两种方法
Python字典中的键是唯一的,但不同的键可以对应同样的值,比如说uid,可以是1001.id同样可以是1001.这样的话通过值来获取指定的键,就不止一个!而且也并不太好处理.这里同样提供两种思路来处 ...
- 二值mask图像 + RGB原图 生成可视化分割结果; 从二值mask获取分割轮廓点
可视化分割结果: import cv2 import numpy as np from tqdm import tqdm from PIL import Image from pathlib impo ...
- php mysql获取新添加记录的id值_PHP获取MySql新增记录ID值的方法
今天发现用mysql_insert_id()获取到的新增记录的id不正确, 虽然发现源代码的事务写的有问题,但是最根本的原因是,我插入数据的id类型是bigint型 获取MySql新增记录ID值的方法 ...
- jmeter从mysql取值_Jmeter获取数据库值并作为参数请求(转载)
转载自:https://www.cnblogs.com/mawenqiangios/p/11088672.html 01Jmeter连接数据库 1.添加JDBC Connection Configur ...
最新文章
- php敏感字符串过滤_PHP实现的敏感词过滤方法示例
- Linq专题之提高编码效率—— 第一篇 Aggregate方法
- 不同编程语言的取模运算%
- 多租户的数据库方案分析
- oracle 打印值,oracle – 在SQL Developer中打印变量的值
- [转] 2018年最新桌面CPU性能排行天梯图(含至强处理器)
- ArcGIS中.shp矢量文件和.lyr图层文件的区别
- Python语音基础操作--4.3共振峰估计
- CAN总线和CANOpen协议栈总结
- [ML-03] Matplotlib-3
- loj10155 数字转换
- 一文读懂eBPF/XDP
- 大陆汽车:汽车电子电器架构的发展及其对车载以太网的影响
- C/C++二维数组顺时针翻转90度
- WPF Grid内控件布局方法
- centos 6.3下rarlinux 与wireshark的安装
- 读《一本小小的蓝色逻辑书》:识别常见的逻辑漏洞
- 区块链笔记:技术栈、对等网络、密码技术、账户模型、网络共识、脚本系统、扩展技术
- 国内外 做大数据的公司
- 计算机体系结构|MIT6.175和MIT6.375学习笔记