python求解二次规划问题
Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:
pip install cvxopt
一、数学基础
- 二次型
二次型(quadratic form):n个变量的二次多项式称为二次型,即在一个多项式中,未知数的个数为任意多个,但每一项的次数都为2的多项式。其基本形式如下
亦可写作, ,称作二次型的矩阵表示,其中A是对称矩阵。仿照如下的定义,我们可以直接在其基本形式和矩阵表示之间相互转化。
2.正定矩阵
设A是n阶实对称矩阵, 如果对任意一非零实向量X,都使二次型 成立,则称f(X)为正定二次型,矩阵A称为正定矩阵(Positive Definite),A为正定矩阵。
相应的,如果对任意一非零实向量X,都使二次型 成立,则称f(X)为半正定二次型,A为半正定矩阵。
3.二次规划问题
二次规划是指,带有二次型目标函数和约束条件的最优化问题。其标准形式如下:
即在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'])
下面我们来看一个例子
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'])
运行结果:
注意事项:
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求解二次规划模型
在学习司守奎老师编写的Pyhon数学实验与建模.学到第6.6求解二次规划模型的时候,忽然觉得很多地方又看不懂了,之前学的一些都忘记了,所以又赶紧查资料弥补一下知识.放在这里,给后面学习的小伙伴提供一些 ...
- python求解二次规划_Python二次规划和线性规划使用实例
这篇文章主要介绍了Python二次规划和线性规划使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于二次规划(quadratic progr ...
- 数学建模:非线性规划的 Python 求解
目录 一般形式 Python 求解 1. scipy.optimize.minimize 函数 调用方式: 参数: 返回: 例 1 例 2 2. cvxopt.solvers 模块求解二次规划 标准型 ...
- 用Python求解数学规划问题
一.线性规划简介 线性规划(Linear Programming 简记为LP)是数学规划的一个重要分支. 规划问题分类 线性规划: 在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题: 整数 ...
- python 物理学中的应用_利用python求解物理学中的双弹簧质能系统详解
前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...
- python代码物理_利用python求解物理学中的双弹簧质能系统详解
前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...
- 最大公约数python语言算法_使用Python求解最大公约数的实现方法
这篇文章主要介绍了使用Python求解最大公约数的实现方法,包括用Python表示欧几里得算法和Stein算法的求解原理. 1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的 ...
- 利用python求解节点介数和边介数
利用python求解节点介数和边介数 利用networkx里面的函数betweenness_centrality(G)来求解节点介数和函数edge_betweenness_centrality(G)来 ...
- python最大公约数计算_使用Python求解最大公约数的实现方法
1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数.其计算原理依赖于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 证明: a可以表示 ...
- mysql求回购率_用户行为分析——回购率、复购率(SQL、Python求解)
有一个多月没有用Python了,有些生疏o(╥﹏╥)o.通过秦路老师的一道题目,分别使用sql和python求解,顺便复习下python点,重点关注[复购率].[回购率]的解法 ☞秦路老师视频讲解(使 ...
最新文章
- 刚刚,马斯克再次创造航天历史!SpaceX首次载人发射任务成功
- Step1帐户登录系统(6.使用OpenID登录网站)
- Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析
- 沈向洋谈做研究的那些事儿
- VirtualBox安装Fedora文件共享
- 慢动作输出Linux命令结果并用彩色显示
- java8 stream to map_Java 8 Stream Api 中的 map和 flatMap 操作
- 在Kubernetes上运行区块链服务(BaaS)
- 史海峰:构建产业互联网金融系统的正确姿势
- 美股周一暴跌触发熔断:苹果、特斯拉股价大跌
- Android恢复出厂设置流程分析【Android源码解析十】
- ffmpeg js转换音频_浏览器音频兼容和ffmpeg的音频转码使用
- 编程基础(一)——计算机中的数
- 【nodejs】waitFor is deprecated
- 地下城php补丁怎么用,dnf技能补丁怎么用到WeGame(附其使用教程)
- android矢量图
- 要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...
- 鸿蒙 3.0 来了!新版本就是强啊!!
- 杂学第八篇:最近成功实现用applescript检测手机号码是否注册imessage,有需要的带价联系
- 合计mysql php,php – mySQL中的条件求和?