使用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 基础学习教程
Feb 08 Python
Python 文件操作技巧(File operation) 实例代码分析
Aug 11 Python
Python入门篇之列表和元组
Oct 17 Python
Python字符串拼接、截取及替换方法总结分析
Apr 13 Python
[原创]python爬虫(入门教程、视频教程)
Jan 08 Python
Django model 中设置联合约束和联合索引的方法
Aug 06 Python
python创建学生管理系统
Nov 22 Python
python实现数据清洗(缺失值与异常值处理)
Dec 02 Python
opencv python如何实现图像二值化
Feb 03 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
Jun 11 Python
python中reload重载实例用法
Dec 15 Python
利用Python网络爬虫爬取各大音乐评论的代码
Apr 13 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启发和小结
2010/11/01 PHP
PHP编程风格规范分享
2014/01/15 PHP
php5.2以下版本无json_decode函数的解决方法
2014/05/25 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
国外Lightbox v2.03.3 最新版 下载
2007/10/17 Javascript
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
显示js对象所有属性和方法的函数
2009/10/16 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
把Node.js程序加入服务实现随机启动
2015/06/25 Javascript
QQ登录背景闪动效果附效果演示源码下载
2015/09/22 Javascript
jQuery与Ajax以及序列化
2016/02/01 Javascript
js 声明数组和向数组中添加对象变量的简单实例
2016/07/28 Javascript
Vue 项目部署到服务器的问题解决方法
2017/12/05 Javascript
解决layui轮播图有数据不显示的情况
2019/09/16 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
[01:28]国服启动器接入蒸汽平台操作流程视频
2021/03/11 DOTA
python3.5仿微软计算器程序
2020/03/30 Python
Python 详解基本语法_函数_返回值
2017/01/22 Python
回调函数的意义以及python实现实例
2017/06/20 Python
Pandas GroupBy对象 索引与迭代方法
2018/11/16 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
使用Python绘制台风轨迹图的示例代码
2020/09/21 Python
澳大利亚最受欢迎的美发用品目的地:AMR
2019/08/28 全球购物
高校辅导员推荐信范文
2013/12/25 职场文书
函授大学生自我鉴定
2014/02/05 职场文书
道路建设实施方案
2014/03/18 职场文书
大学新学期计划书
2014/04/28 职场文书
物联网工程专业推荐信
2014/09/08 职场文书
租房协议书范例
2014/10/14 职场文书
自我检讨报告
2015/01/28 职场文书
支教个人总结
2015/03/04 职场文书
2015年五一劳动节演讲稿
2015/03/18 职场文书
2015年小学中秋节活动总结
2015/03/23 职场文书
电视新闻稿
2015/07/17 职场文书
基于Redis位图实现用户签到功能
2021/05/08 Redis
PostgreSQL事务回卷实战案例详析
2022/03/25 PostgreSQL