二次规划

在MATLAB中,quadprog是具有线性约束的二次目标函数的求解器。
quadprog 求由下式指定的问题的最小值

H、A 和 Aeq 是矩阵,f、b、beq、lb、ub 和 x 是向量。
其具体用法为:

x = quadprog(H,f)
x = quadprog(H,f,A,b)
x = quadprog(H,f,A,b,Aeq,beq)
x = quadprog(H,f,A,b,Aeq,beq,lb,ub)
x =quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
x =quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options)
x = quadprog(problem)
[x,fval] = quadprog()
[x,fval,exitflag,output] = quadprog(
)
[x,fval,exitflag,output,lambda] = quadprog(___)

当解决一个具有线性约束的二次规划问题时:


要求解此问题,首先输入系数矩阵。


使用MATLAB语句为:

H = [1 -1; -1 2];
f = [-2; -6];
A = [1 1; -1 2; 2 1];
b = [2; 2; 3];
[x,fval,exitflag,output,lambda] = ...quadprog(H,f,A,b);
x,fval   %打印结果

当使用python进行二次型求解时,采用qpsolvers库中的solve_qp函数进行求解:

进行库文件的安装

pip install cvxopt==1.2.6 cvxpy==1.1.11 Cython==0.29.22 ecos==2.0.7.post1 numpy osqp==0.6.2.post0 qdldl==0.1.5.post0 qpsolvers==1.7.0 quadprog==0.1.8 scipy scs==2.1.4 -i https://pypi.tuna.tsinghua.edu.cn/simple
from numpy import array
from qpsolvers import solve_qpH=array([[1.,-1.],[-1.,2.]])
f=array([[-2.],[-6.]]).reshape((2,))
L=array([[1.,1.],[-1.,2.],[2.,1.]])
k=array([[2.],[2.],[3.]]).reshape((3,))x = solve_qp(H, f, L,k)
print("QP solution: x = {}".format(x))

输出

QP solution: x = [0.66666667 1.33333333]

也可参考这位大佬的博客

(https://blog.csdn.net/u013421629/article/details/108358409)

import numpy as np
import cvxoptdef quadprog(H, f, L=None, k=None, Aeq=None, beq=None, lb=None, ub=None):"""Input: Numpy arrays, the format follows MATLAB quadprog function: https://www.mathworks.com/help/optim/ug/quadprog.htmlOutput: Numpy array of the solution"""n_var = H.shape[1]P = cvxopt.matrix(H, tc='d')q = cvxopt.matrix(f, tc='d')if L is not None or k is not None:assert(k is not None and L is not None)if lb is not None:L = np.vstack([L, -np.eye(n_var)])k = np.vstack([k, -lb])if ub is not None:L = np.vstack([L, np.eye(n_var)])k = np.vstack([k, ub])L = cvxopt.matrix(L, tc='d')k = cvxopt.matrix(k, tc='d')if Aeq is not None or beq is not None:assert(Aeq is not None and beq is not None)Aeq = cvxopt.matrix(Aeq, tc='d')beq = cvxopt.matrix(beq, tc='d')sol = cvxopt.solvers.qp(P, q, L, k, Aeq, beq)return np.array(sol['x'])if __name__ == '__main__':H=np.array([[1,-1],[-1,2]])print(H)f=np.array([[-2],[-6]])print(f)L=np.array([[1,1],[-1,2],[2,1]])print(L)k=np.array([[2],[2],[3]])print(k)res=quadprog(H, f, L,k)print(res)

python 求解二次规划(quadprog)相关推荐

  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. Python单元测试去哪儿了?
  2. python编写测试系统_纯 python 编写的一套 dubbo 测试平台
  3. $.ajax data怎么处理_不会吧,不会吧,不愧是Ajax,jQuery Ajax啊
  4. “最害怕过周末”、“希望每天都干活”、“水电费又白交了”
  5. oracle表空间处理操作
  6. C++的简单文本IO
  7. JAVA NIO基础知识
  8. (2)css语法和使用方式
  9. C基础——fopen() 的 mode参数
  10. linux内核装载vfs过程
  11. 算法:Jump Game
  12. postgresql 数据库迁移
  13. manjaro主目录设置英文
  14. 树莓派安装opencv3.4.3时缺少boostdesc等文件及一些常见的报错
  15. date函数详细用法
  16. 苹果电脑和windows电脑怎么选择?开发应该用什么电脑?视频剪辑用什么电脑?电脑推荐
  17. 通过浏览器访问服务器
  18. python常用关键字意思_Python 关键字列表及示例
  19. Am335x 平台上GSM 3G/4G modem的一些硬件和软件的杂事
  20. 超级终端之手机连接篇

热门文章

  1. JAVA课程设计——拼图小游戏
  2. 数据结构课程设计(学生选课管理系统)链表实现
  3. 三级数据库技术思维导图
  4. 武大计算机考研 932教材,2018武汉大学考研官方指定参考书目
  5. android超级终端使用,android系统超级终端怎么用?
  6. bbsmax mysql_Mac命令行启动MySQL
  7. 一文了解 操作系统发展史
  8. 发票验证出现服务器证书出错,网上认证发票平台证书密码出现错误怎么办?
  9. Eclipse与SQL Server 2005 连接
  10. python 获取foobar2000官网全部插件