使用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过滤字符串中不属于指定集合中字符的类实例
Jun 30 Python
Python中音频处理库pydub的使用教程
Jun 07 Python
详解Python中的Numpy、SciPy、MatPlotLib安装与配置
Nov 17 Python
Python读写及备份oracle数据库操作示例
May 17 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python中正则表达式 re.findall 用法
Oct 23 Python
Python matplotlib的使用并自定义colormap的方法
Dec 13 Python
基于python if 判断选择结构的实例详解
May 06 Python
Python发展简史 Python来历
May 14 Python
在tensorflow中设置使用某一块GPU、多GPU、CPU的操作
Feb 07 Python
python对 MySQL 数据库进行增删改查的脚本
Oct 22 Python
如何利用python生成MD5并去重
Dec 07 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脚本引擎内置函数
2007/03/06 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
PHP模拟http请求的方法详解
2016/11/09 PHP
jQuery关于导航条背景切换效果实现示例
2013/09/04 Javascript
jQuery控制元素显示、隐藏、切换、滑动的方法总结
2015/04/16 Javascript
bootstrap multiselect 多选功能实现方法
2017/06/05 Javascript
详解JS数组Reduce()方法详解及高级技巧
2017/08/18 Javascript
JavaScript+Canvas实现彩色图片转换成黑白图片的方法分析
2018/07/31 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
Vue源码解析之数据响应系统的使用
2019/04/24 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
VUE+elementui面包屑实现动态路由详解
2019/11/04 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
[02:44]DOTA2英雄基础教程 克林克兹
2014/01/15 DOTA
Python的Flask开发框架简单上手笔记
2015/11/16 Python
基于anaconda下强大的conda命令介绍
2018/06/11 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
django+echart绘制曲线图的方法示例
2018/11/26 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
python3 深浅copy对比详解
2019/08/12 Python
Python将主机名转换为IP地址的方法
2019/08/14 Python
利用css3 translate完美实现表头固定效果
2017/02/28 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
一家专门做特卖的网站:唯品会
2016/10/09 全球购物
罗技美国官网:Logitech美国
2020/01/22 全球购物
煤矿班组长岗位职责
2013/12/29 职场文书
咖啡书吧创业计划书
2014/01/13 职场文书
企业出纳岗位职责
2014/03/12 职场文书
教师敬业奉献模范事迹材料
2014/05/18 职场文书
组织生活会表态发言材料
2014/10/17 职场文书
主持人开幕词
2015/01/29 职场文书
2015年创先争优工作总结
2015/05/23 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python
详细聊聊Oracle表碎片对性能有多大的影响
2022/03/19 Oracle
教你win10系统中APPCRASH事件问题解决方法
2022/07/15 数码科技
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python