使用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 multiprocessing模块中的Pipe管道使用实例
Apr 11 Python
python读取中文txt文本的方法
Apr 12 Python
selenium+python实现自动登录脚本
Apr 22 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
Python基于plotly模块实现的画图操作示例
Jan 23 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
基于Python安装pyecharts所遇的问题及解决方法
Aug 12 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
Nov 11 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
Python pickle模块常用方法代码实例
Oct 10 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
Dec 10 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邮件类
2007/01/03 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
php微信公众号开发之音乐信息
2018/10/20 PHP
js控制frameSet示例
2013/09/10 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
JavaScript中window.open用法实例详解
2015/04/15 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
jquery表单插件Autotab使用方法详解
2016/06/24 Javascript
Highcharts入门之基本属性
2016/08/02 Javascript
AngularJS表达式讲解及示例代码
2016/08/16 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
vue2.0 与 bootstrap datetimepicker的结合使用实例
2017/05/22 Javascript
Vuex实现计数器以及列表展示效果
2018/03/10 Javascript
React Native日期时间选择组件的示例代码
2018/04/27 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
小程序关于请求同步的总结
2019/05/05 Javascript
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
[01:18:21]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第一场 6.2
2018/06/03 DOTA
跟老齐学Python之有容乃大的list(3)
2014/09/15 Python
python中pycurl库的用法实例
2014/09/30 Python
一波神奇的Python语句、函数与方法的使用技巧总结
2015/12/08 Python
python 多线程中子线程和主线程相互通信方法
2018/11/09 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
pygame实现俄罗斯方块游戏(对战篇1)
2019/10/29 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python爬虫---requests库的用法详解
2020/09/28 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
加拿大廉价机票预订网站:CheapOair.ca
2018/03/04 全球购物
The North Face北面法国官网:美国著名户外品牌
2019/11/01 全球购物
英语商务邀请函范文
2014/01/16 职场文书
小学开学典礼主持词
2014/03/19 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
廉政承诺书
2015/01/19 职场文书
python实现三次密码验证的示例
2021/04/29 Python