二次型(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中支持Convex Optimization(凸规划)的模块为CVXOPT,其安装方式为:pip install cvxopt一、数学基础二次型 二次型(quadratic form):n个变量的二次多项式称为二次型,即在一个多项式中,未知数的个数为任意多个,但每一项的次数都为2的多项式。其基本形式如下 亦可写作, ,...
这段时间搜索了一下网上能找到的例子,大致可以解决常规的整数规划、0/1规划问题,适合像我这样的小白练手。下面就总结归纳一下,顺便再写写自己的笔记,有不对的地方还望大家批评指正。
1、CP与MP
cplex有两种模块,一个是cp,另一个是mp。cp用于解决约束规划问题(主要是工程实际优化问题,可用任意约束建模,可能没有目标函数),比较少用。mp用于解决数学规划问题(如线性规划、整数规划等),我们一般用mp就行了。
2、cplex与docplex
直观来说,docplex更简洁,更容易理解,以下内容
各种基于SEIR模型的改进算法代码、Python代码,还包含Si,sir,sis的代码,是做数学建模比赛整理的资料,具全,带论文。研究COVID-19的传播过程和受感染人数的变化规律,是探索如何制止COVID-19蔓延的重要环节。本文针对COVID-19的防控问题,通过对各个国家疫情状况数据的分析,采用……方法,建立……模型,获得……,同时以……为优化目标,获得……最优模型。
针对问题一,为了确定COVID-19的传播系数。通过对国家卫健委公布的1月21日~2月5日的疫情数据分析,考虑易感人群(S)、潜伏人群(E)、感染人群(I)、治愈人群(R)建立SEIR模型,基于SEIR模型计算的COVID-19的传播系数(R0)在3.096~3.613之间。
针对问题二,针对不同地区采取的不同防控策略建立模型分析、预测未来的疫情数据。通过分析COVID-19存在潜伏期且康复后二次感染的概率低的传播特性,结合国内公开的疫情防控数据,考虑隔离/未隔离情况、疫苗接种情况、医疗卫生条件等因素提出了改进的SEIR模型,与logistic模型和传统的SEIR模型比较,预测率有较大提升。由于国外的数据不包含疑似病例数据,采用SIR模型进行分析预测未来疫情数据。