使用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解析XML的几种方式
Feb 16 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
Jul 20 Python
python利用OpenCV2实现人脸检测
Apr 16 Python
使用Django2快速开发Web项目的详细步骤
Jan 06 Python
Django框架实现分页显示内容的方法详解
May 10 Python
python实现手势识别的示例(入门)
Apr 15 Python
Python文件操作模拟用户登陆代码实例
Jun 09 Python
基于SQLAlchemy实现操作MySQL并执行原生sql语句
Jun 10 Python
Python中猜拳游戏与猜筛子游戏的实现方法
Sep 04 Python
记录一下scrapy中settings的一些配置小结
Sep 28 Python
详解Django的MVT设计模式
Apr 29 Python
python scrapy简单模拟登录的代码分析
Jul 21 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
Amazon Prime Video平台《无限住人 -IMMORTAL-》2020年开始TV放送!
2020/03/06 日漫
PHP的FTP学习(一)
2006/10/09 PHP
PHP中exec与system用法区别分析
2014/09/22 PHP
php对文件进行hash运算的方法
2015/04/03 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
DOM精简教程
2006/10/03 Javascript
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
js 鼠标拖动对象 可让任何div实现拖动效果
2009/11/09 Javascript
js下获取div中的数据的原理分析
2010/04/07 Javascript
jquery 操作表格实现代码(多种操作打包)
2011/03/20 Javascript
js将当前时间格式转换成时间搓(自写)
2013/09/26 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
Bootstrap栅格系统简单实现代码
2017/03/06 Javascript
Node.js实现文件上传的示例
2017/06/28 Javascript
详解@Vue/Cli 3 Invalid Host header 错误解决办法
2019/01/02 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
vue cli 3.0 搭建项目的图文教程
2019/05/17 Javascript
在Chrome DevTools中调试JavaScript的实现
2020/04/07 Javascript
Vue 监听元素前后变化值实例
2020/07/29 Javascript
[01:53]3.19 DOTA2发布会 现场精彩Coser表演
2014/03/25 DOTA
MAC中PyCharm设置python3解释器
2017/12/15 Python
python 2.7.14安装图文教程
2018/04/08 Python
linux下python使用sendmail发送邮件
2018/05/22 Python
tensorflow实现简单的卷积网络
2018/05/24 Python
python TKinter获取文本框内容的方法
2018/10/11 Python
Python3中列表list合并的四种方法
2019/04/19 Python
行政助理岗位职责范文
2013/12/03 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
优秀团员个人总结
2015/02/26 职场文书
2015年小学远程教育工作总结
2015/07/28 职场文书
餐厅如何利用“营销策略”扭转亏本局面
2019/10/15 职场文书
浅谈MySQL表空间回收的正确姿势
2021/10/05 MySQL