使用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使用paramiko模块实现ssh远程登陆上传文件并执行
Jan 27 Python
pycharm 使用心得(五)断点调试
Jun 06 Python
python进阶教程之循环相关函数range、enumerate、zip
Aug 30 Python
跟老齐学Python之使用Python操作数据库(1)
Nov 25 Python
Python新手实现2048小游戏
Mar 31 Python
python中set()函数简介及实例解析
Jan 09 Python
python数据分析数据标准化及离散化详解
Feb 26 Python
python解决pandas处理缺失值为空字符串的问题
Apr 08 Python
Python多图片合并PDF的方法
Jan 03 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
windows10下安装TensorFlow Object Detection API的步骤
Jun 13 Python
python 利用turtle模块画出没有角的方格
Nov 23 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自动生成月历代码
2006/10/09 PHP
使用PHP 5.0创建图形的巧妙方法
2010/10/12 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
一文看懂PHP进程管理器php-fpm
2020/06/01 PHP
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
js去除空格的12种实用方法
2013/11/08 Javascript
JS案例分享之金额小写转大写
2014/05/15 Javascript
javascript数据结构与算法之检索算法
2015/04/04 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
js+html5操作sqlite数据库的方法
2016/02/02 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
2016/04/07 Javascript
Javascript将数字转化成为货币格式字符串
2016/06/22 Javascript
Angular.Js中ng-include指令的使用与实现
2017/05/07 Javascript
angular过滤器实现排序功能
2017/06/27 Javascript
JavaScript解析任意形式的json树型结构展示
2017/07/23 Javascript
微信小程序自定义对话框弹出和隐藏动画
2018/07/19 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
vue-cli3使用mock数据的方法分析
2020/03/16 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
jQuery实现推拉门效果
2020/10/19 jQuery
python fabric使用笔记
2015/05/09 Python
Pycharm在创建py文件时,自动添加文件头注释的实例
2018/05/07 Python
css3实现顶部社会化分享按钮示例
2014/05/06 HTML / CSS
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
Vans澳大利亚官网:购买鞋子、服装及配件
2019/09/05 全球购物
Java软件工程师综合面试题笔试题
2013/09/08 面试题
教师研修随笔感言
2014/01/23 职场文书
实验室的标语
2014/06/20 职场文书
2014年单位法制宣传日活动总结
2014/11/01 职场文书
2014保险公司个人工作总结
2014/12/09 职场文书
教师聘用意向书
2015/05/11 职场文书
python实现三次密码验证的示例
2021/04/29 Python
JavaScript实现优先级队列
2021/12/06 Javascript
使用python绘制分组对比柱状图
2022/04/21 Python