使用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 自动提交和抓取网页
Jul 13 Python
Python time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
编写Python小程序来统计测试脚本的关键字
Mar 12 Python
python实现扫描局域网指定网段ip的方法
Apr 16 Python
python turtle库画一个方格和圆实例
Jun 27 Python
详解解决Python memory error的问题(四种解决方案)
Aug 08 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
python3读取autocad图形文件.py实例
Jun 05 Python
使用tensorflow根据输入更改tensor shape
Jun 23 Python
PyCharm 2020.2 安装详细教程
Sep 25 Python
利用python为PostgreSQL的表自动添加分区
Jan 18 Python
Python学习之包与模块详解
Mar 19 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
再说下636单管机
2021/03/02 无线电
php读取mysql的简单实例
2014/01/15 PHP
PHP异常处理Exception类
2015/12/11 PHP
Laravel学习教程之路由模块
2017/08/18 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
laravel在中间件内生成参数并且传递到控制器中的2种姿势
2019/10/15 PHP
使用jquery插件实现图片延迟加载技术详细说明
2011/03/12 Javascript
基于jQuery实现左右div自适应高度完全相同的代码
2012/08/09 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
jQuery实现企业网站横幅焦点图切换功能实例
2015/04/30 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
AngularJS 表达式详细讲解及实例代码
2016/07/26 Javascript
Jquery Easyui菜单组件Menu使用详解(15)
2016/12/18 Javascript
二维码图片生成器QRCode.js简单介绍
2017/08/18 Javascript
Javascript格式化并高亮xml字符串的方法及注意事项
2018/08/13 Javascript
小程序实现五星点评效果
2018/11/03 Javascript
JavaScript设计模式之观察者模式与发布订阅模式详解
2020/05/07 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python用ConfigObj读写配置文件的实现代码
2013/03/04 Python
Python中encode()方法的使用简介
2015/05/18 Python
利用Python实现网络测试的脚本分享
2017/05/26 Python
python实现对指定字符串补足固定长度倍数截断输出的方法
2018/11/15 Python
python opencv实现图像边缘检测
2019/04/29 Python
Python QQBot库的QQ聊天机器人
2019/06/19 Python
Python csv文件记录流程代码解析
2020/07/16 Python
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
函数指针的定义是什么
2016/08/14 面试题
学生励志演讲稿
2014/01/06 职场文书
学生周末回家住宿长期请假条
2014/02/15 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
新郎新娘答谢词
2015/01/04 职场文书
英语教师个人总结
2015/02/09 职场文书
全国助残日活动总结
2015/05/11 职场文书
2015年度残疾人工作总结
2015/05/14 职场文书
MySQL利用UNION连接2个查询排序失效详解
2021/11/20 MySQL