使用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的subprocess模块总结
Nov 07 Python
Python类的多重继承问题深入分析
Nov 09 Python
Python中的MongoDB基本操作:连接、查询实例
Feb 13 Python
Python返回真假值(True or False)小技巧
Apr 10 Python
Python设计模式编程中Adapter适配器模式的使用实例
Mar 02 Python
浅谈对yield的初步理解
May 29 Python
Django中使用第三方登录的示例代码
Aug 20 Python
详解Python requests 超时和重试的方法
Dec 18 Python
Django框架首页和登录页分离操作示例
May 28 Python
Python何时应该使用Lambda函数
Jul 02 Python
python opencv通过4坐标剪裁图片
Jun 05 Python
Python实现为PDF去除水印的示例代码
Apr 03 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
PHP中去除换行解决办法小结(PHP_EOL)
2011/11/27 PHP
PHP htmlentities()函数用法讲解
2019/02/25 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
jquery 批量上传图片实现代码
2010/01/28 Javascript
JavaScript 空位补零实现代码
2010/02/26 Javascript
JavaScript 对象的属性和方法4种不同的类型
2010/03/19 Javascript
jquery动态增加text元素以及删除文本内容实例代码
2013/07/01 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
javascript计算用户打开网页的停留时间
2014/01/09 Javascript
JS给Textarea文本框添加行号的方法
2015/08/20 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
js获取腾讯视频ID的方法
2016/10/03 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
[01:33:59]真人秀《加油 DOTA》 第六期
2014/09/09 DOTA
Python中方法链的使用方法
2016/02/23 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
Djang的model创建的字段和参数详解
2019/07/27 Python
Python的对象传递与Copy函数使用详解
2019/12/26 Python
Django数据结果集序列化并展示实现过程
2020/04/22 Python
Pycharm连接远程服务器过程图解
2020/04/30 Python
基于Python模拟浏览器发送http请求
2020/11/06 Python
Python 中 sorted 如何自定义比较逻辑
2021/02/02 Python
Expedia马来西亚旅游网站:廉价酒店,度假村和航班预订
2016/07/26 全球购物
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
服装行业创业计划书范文
2014/02/05 职场文书
运动会广播稿20字
2014/02/18 职场文书
2014社区三八妇女节活动方案
2014/03/30 职场文书
会计学毕业生求职信
2014/06/25 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
环境卫生标语
2015/08/03 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
Python if else条件语句形式详解
2022/03/24 Python
python使用shell脚本创建kafka连接器
2022/04/29 Python
Django框架中表单的用法
2022/06/10 Python