Python中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:

pip install  cvxopt

一、数学基础

  1. 二次型

二次型(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求解二次规划问题相关推荐

  1. Python求解二次规划模型

    在学习司守奎老师编写的Pyhon数学实验与建模.学到第6.6求解二次规划模型的时候,忽然觉得很多地方又看不懂了,之前学的一些都忘记了,所以又赶紧查资料弥补一下知识.放在这里,给后面学习的小伙伴提供一些 ...

  2. python求解二次规划_Python二次规划和线性规划使用实例

    这篇文章主要介绍了Python二次规划和线性规划使用实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 对于二次规划(quadratic progr ...

  3. 数学建模:非线性规划的 Python 求解

    目录 一般形式 Python 求解 1. scipy.optimize.minimize 函数 调用方式: 参数: 返回: 例 1 例 2 2. cvxopt.solvers 模块求解二次规划 标准型 ...

  4. 用Python求解数学规划问题

    一.线性规划简介 线性规划(Linear Programming 简记为LP)是数学规划的一个重要分支. 规划问题分类 线性规划: 在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题: 整数 ...

  5. python 物理学中的应用_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

  6. python代码物理_利用python求解物理学中的双弹簧质能系统详解

    前言 本文主要给大家介绍了关于利用python求解物理学中双弹簧质能系统的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 物理的模型如下: 在这个系统里有两个物体,它们的质 ...

  7. 最大公约数python语言算法_使用Python求解最大公约数的实现方法

    这篇文章主要介绍了使用Python求解最大公约数的实现方法,包括用Python表示欧几里得算法和Stein算法的求解原理. 1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的 ...

  8. 利用python求解节点介数和边介数

    利用python求解节点介数和边介数 利用networkx里面的函数betweenness_centrality(G)来求解节点介数和函数edge_betweenness_centrality(G)来 ...

  9. python最大公约数计算_使用Python求解最大公约数的实现方法

    1. 欧几里德算法 欧几里德算法又称辗转相除法, 用于计算两个整数a, b的最大公约数.其计算原理依赖于下面的定理: 定理: gcd(a, b) = gcd(b, a mod b) 证明: a可以表示 ...

  10. mysql求回购率_用户行为分析——回购率、复购率(SQL、Python求解)

    有一个多月没有用Python了,有些生疏o(╥﹏╥)o.通过秦路老师的一道题目,分别使用sql和python求解,顺便复习下python点,重点关注[复购率].[回购率]的解法 ☞秦路老师视频讲解(使 ...

最新文章

  1. 刚刚,马斯克再次创造航天历史!SpaceX首次载人发射任务成功
  2. Step1帐户登录系统(6.使用OpenID登录网站)
  3. Android系统Surface机制的SurfaceFlinger服务对帧缓冲区(Frame Buffer)的管理分析
  4. 沈向洋谈做研究的那些事儿
  5. VirtualBox安装Fedora文件共享
  6. 慢动作输出Linux命令结果并用彩色显示
  7. java8 stream to map_Java 8 Stream Api 中的 map和 flatMap 操作
  8. 在Kubernetes上运行区块链服务(BaaS)
  9. 史海峰:构建产业互联网金融系统的正确姿势
  10. 美股周一暴跌触发熔断:苹果、特斯拉股价大跌
  11. Android恢复出厂设置流程分析【Android源码解析十】
  12. ffmpeg js转换音频_浏览器音频兼容和ffmpeg的音频转码使用
  13. 编程基础(一)——计算机中的数
  14. 【nodejs】waitFor is deprecated
  15. 地下城php补丁怎么用,dnf技能补丁怎么用到WeGame(附其使用教程)
  16. android矢量图
  17. 要闻君说: 百度云喜提信息安全首证;紫光展锐携5G芯片进击2019MWC;OPPO首发5G手机惊艳亮相……...
  18. 鸿蒙 3.0 来了!新版本就是强啊!!
  19. 杂学第八篇:最近成功实现用applescript检测手机号码是否注册imessage,有需要的带价联系
  20. 合计mysql php,php – mySQL中的条件求和?

热门文章

  1. Spring3注解零配置【私塾在线原创】
  2. vue3.0 音频插件(vue-aplayer)
  3. 易编远航第七套大漠多线程多开入门高级篇
  4. 有备无患:避免文件丢失的可行方案
  5. cloudera-scm-agent 已死,但 pid 文件存在
  6. 传奇SF专用DBC2000数据库系统安装教程
  7. python实现一个QQ群聊天机器人
  8. nvidia控制面板点了没反应win7_win7 nvidia控制面板没反应打不开 解决办法
  9. Java笔记(韩顺平Java基础1-2章)
  10. 韩顺平java30天Utils包下的工具类