使用python求解二次规划的问题


Posted in Python onFebruary 29, 2020

Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:

pip install cvxopt

一、数学基础

二次型

二次型(quadratic form):n个变量的二次多项式称为二次型,即在一个多项式中,未知数的个数为任意多个,但每一项的次数都为2的多项式。其基本形式如下

使用python求解二次规划的问题

亦可写作,使用python求解二次规划的问题 ,称作二次型的矩阵表示,其中A是对称矩阵。仿照如下的定义,我们可以直接在其基本形式和矩阵表示之间相互转化。

使用python求解二次规划的问题

2.正定矩阵

设A是n阶实对称矩阵, 如果对任意一非零实向量X,都使二次型使用python求解二次规划的问题 成立,则称f(X)为正定二次型,矩阵A称为正定矩阵(Positive Definite),A为正定矩阵。

相应的,如果对任意一非零实向量X,都使二次型使用python求解二次规划的问题成立,则称f(X)为半正定二次型,A为半正定矩阵。

3.二次规划问题

二次规划是指,带有二次型目标函数和约束条件的最优化问题。其标准形式如下:

使用python求解二次规划的问题

即在Gx<h 和Ax=b的约束下,最小化目标函数。其中,当P是正定矩阵时,目标函数存在全局唯一最优解;P是半正定矩阵时,目标函数是凸函数,存在全局最优解(不唯一);P是不定矩阵时,目标函数非凸,存在多个局部最小值和稳定点,为np难问题。(本篇博客中我们不考虑非正定情况)。

二、python程序求解

工具包:Cvxopt python 凸优化包

函数原型:Cvxopt.solvers.qp(P,q,G,h,A,b)

P,q,G,h,A,b的含义参见上面的二次规划问题标准形式。

编程求解思路:

1.对于一个给定的二次规划问题,先转换为标准形式(参见数学基础中所讲的二次型二中形式转换)

2.对照标准形势,构建出矩阵P,q,G,h,A,b

3.调用result=Cvxopt.solvers.qp(P,q,G,h,A,b)求解

4.print(result)查看结果,其中result是一个字典,我们可直接获得其某个属性,e.g. print(result['x'])

下面我们来看一个例子

使用python求解二次规划的问题

import pprint
from cvxopt import matrix, solvers
P = matrix([[4.0,1.0],[1.0,2.0]])
q = matrix([1.0,1.0])
G = matrix([[-1.0,0.0],[0.0,-1.0]])
h = matrix([0.0,0.0])
A = matrix([1.0,1.0],(1,2))#原型为cvxopt.matrix(array,dims),等价于A = matrix([[1.0],[1.0]])
b = matrix([1.0])
result = solvers.qp(P,q,G,h,A,b)
 
print('x\n',result['x'])

运行结果:

使用python求解二次规划的问题

注意事项:

cvxopt.matrix与numpy.matrix的排列顺序不同,其中cvxopt.matrix是列优先,numpy.matrix是行优先。具体可见下面实例

import numpy as np
from cvxopt import matrix
a = np.matrix([[1,2],[3,4]])
b = matrix([[1,2],[3,4]])
print('numpy.matrix',a)
print('cvxopt.matrix',b)

运行结果:

使用python求解二次规划的问题

以上这篇使用python求解二次规划的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用pygame模块编写俄罗斯方块游戏的代码实例
Dec 08 Python
利用python获取Ping结果示例代码
Jul 06 Python
Python机器学习算法之k均值聚类(k-means)
Feb 23 Python
Python+selenium 获取浏览器窗口坐标、句柄的方法
Oct 14 Python
Python中logging.NullHandler 的使用教程
Nov 29 Python
Python获取时间戳代码实例
Sep 24 Python
python单元测试框架pytest的使用示例
Oct 07 Python
python中编写函数并调用的知识点总结
Jan 13 Python
python中pyqtgraph知识点总结
Jan 26 Python
Python爬虫:从m3u8文件里提取小视频的正确操作
May 14 Python
使用qt quick-ListView仿微信好友列表和聊天列表的示例代码
Jun 13 Python
总结几个非常实用的Python库
Jun 26 Python
Python龙贝格法求积分实例
Feb 29 #Python
python计算导数并绘图的实例
Feb 29 #Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 #Python
Pytorch对Himmelblau函数的优化详解
Feb 29 #Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 #Python
在pytorch中实现只让指定变量向后传播梯度
Feb 29 #Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 #Python
You might like
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
IE不出现Flash激活框的小发现的js实现方法
2007/09/07 Javascript
javascript 火狐(firefox)不显示本地图片问题解决
2008/07/05 Javascript
超越Jquery_01_isPlainObject分析与重构
2010/10/20 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS+CSS实现的竖向简洁折叠菜单效果代码
2015/10/22 Javascript
JavaScript SHA-256加密算法详细代码
2016/10/06 Javascript
JS正则获取HTML元素的方法
2017/03/31 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
vue实现codemirror代码编辑器中的SQL代码格式化功能
2019/08/27 Javascript
node.js处理前端提交的GET请求
2019/08/30 Javascript
js贪心算法 钱币找零问题代码实例
2019/09/11 Javascript
Vue中父子组件的值传递与方法传递
2020/09/28 Javascript
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
Python urllib、urllib2、httplib抓取网页代码实例
2015/05/09 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python实现的正则表达式功能入门教程【经典】
2017/06/05 Python
使用Python画股票的K线图的方法步骤
2019/06/28 Python
简单了解Python matplotlib线的属性
2019/06/29 Python
利用pyecharts实现地图可视化的例子
2019/08/12 Python
python 计算积分图和haar特征的实例代码
2019/11/20 Python
HTML5 Canvas画线技巧——实现绘制一个像素宽的细线
2013/08/02 HTML / CSS
Urban Outfitters德国官网:美国跨国生活方式零售公司
2018/05/21 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
作为网站管理者应当如何防范XSS
2014/08/16 面试题
优秀的毕业生的自我评价
2013/12/12 职场文书
党小组评议意见
2015/06/02 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
2016会计专业自荐信范文
2016/01/28 职场文书
详解Python小数据池和代码块缓存机制
2021/04/07 Python
分享提高 Python 代码的可读性的技巧
2022/03/03 Python