使用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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
介绍Python中的文档测试模块
Apr 28 Python
Python 的描述符 descriptor详解
Feb 27 Python
Python协程的用法和例子详解
Sep 09 Python
Django框架使用mysql视图操作示例
May 15 Python
使用python制作一个为hex文件增加版本号的脚本实例
Jun 12 Python
python 实现视频 图像帧提取
Dec 10 Python
Python多进程编程常用方法解析
Mar 26 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
python爬取网易云音乐热歌榜实例代码
Aug 07 Python
scrapy利用selenium爬取豆瓣阅读的全步骤
Sep 20 Python
python 使用OpenCV进行简单的人像分割与合成
Feb 02 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
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
php miniBB中文乱码问题解决方法
2008/11/25 PHP
PHP similar_text 字符串的相似性比较函数
2010/05/26 PHP
php strnatcmp()函数的用法总结
2013/11/27 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
2015/02/02 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
thinkphp诸多限制条件下如何getshell详解
2020/12/09 PHP
使用javascipt---实现二分查找法
2013/04/10 Javascript
node.js中的console.info方法使用说明
2014/12/09 Javascript
使用jQuery实现返回顶部
2015/01/26 Javascript
javascript禁止访客复制网页内容的实现代码
2015/08/05 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
JS+CSS实现自动切换的网页滑动门菜单效果代码
2015/09/14 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
js判断节假日实例代码
2017/12/27 Javascript
vue实现吸顶、锚点和滚动高亮按钮效果
2019/10/21 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
Python列表(list)、字典(dict)、字符串(string)基本操作小结
2014/11/28 Python
浅谈python中的__init__、__new__和__call__方法
2017/07/18 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
python实现ip地址的包含关系判断
2020/02/07 Python
Python实现ATM系统
2020/02/17 Python
CSS3的resize属性使用初探
2015/09/27 HTML / CSS
详解如何通过H5(浏览器/WebView/其他)唤起本地app
2017/12/11 HTML / CSS
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
如何用Python输出一个Fibonacci数列
2016/08/28 面试题
大学生求职自我评价
2014/01/16 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2015年大学班级工作总结
2015/04/28 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
SQL语句中EXISTS的详细用法大全
2022/06/25 MySQL