使用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多线程http下载实现示例
Dec 30 Python
python paramiko模块学习分享
Aug 23 Python
机器学习10大经典算法详解
Dec 07 Python
OpenCV-Python实现轮廓检测实例分析
Jan 05 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
Python 互换字典的键值对实例
Feb 12 Python
Python 读取串口数据,动态绘图的示例
Jul 02 Python
Python利用PyExecJS库执行JS函数的案例分析
Dec 18 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
PyQt5 QThread倒计时功能的实现代码
Apr 02 Python
Python 阶乘详解
Oct 05 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
一个高ai的分页函数和一个url函数
2006/10/09 PHP
APMServ使用说明
2006/10/23 PHP
php获取根域名方法汇总
2014/10/28 PHP
thinkphp判断访客为手机端或PC端的方法
2014/11/24 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
浅析PHP数据导出知识点
2018/02/17 PHP
做网页的一些技巧(续)
2007/02/01 Javascript
$.each与$().each的区别示例介绍
2014/03/20 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jQuery对象和DOM对象之间相互转换的方法介绍
2015/02/28 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
JavaScript事件类型中焦点、鼠标和滚轮事件详解
2016/01/25 Javascript
js实现动态创建的元素绑定事件
2016/07/19 Javascript
通过网页查看JS源码中汉字显示乱码的解决方法
2016/10/26 Javascript
bootstrap实现图片自动轮播
2016/12/21 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
Vue.js实现按钮的动态绑定效果及实现代码
2017/08/21 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
JavaScript数组去重的方法总结【12种方法,号称史上最全】
2019/02/28 Javascript
微信公众号服务器验证Token步骤图解
2019/12/30 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
在VUE中使用lodash的debounce和throttle操作
2020/11/09 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
浅谈python字符串方法的简单使用
2016/07/18 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
QML使用Python的函数过程解析
2019/09/26 Python
Pytest参数化parametrize使用代码实例
2020/02/22 Python
opencv-python的RGB与BGR互转方式
2020/06/02 Python
python模块如何查看
2020/06/16 Python
python绘制分布折线图的示例
2020/09/24 Python
Cotton On美国网站:澳洲时装连锁品牌
2016/10/25 全球购物
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
《识字五》教学反思
2014/03/01 职场文书
出资证明书范本(标准版)
2014/09/24 职场文书
小学远程教育工作总结
2015/08/13 职场文书