0%

数学建模笔记

优化模型

优化模型就是给定一个目标函数,然后在约束条件下求出该目标函数的最优值。

形如:

min(max) z=f(x),x=(x1,...)s.t.gi(x)0,i=1,2,...\min(或\max)\ z=f(x), x=(x_1,...)\\ s.t. g_i(x)\leq0,i=1,2,...

决策变量: x

目标函数: f(x)

约束条件: $ s.t. g_i(x)\leq0 $

优化问题三要素:

  • 决策变量
  • 目标函数
  • 约束条件

数学规划:

  • 线性规划(Linear Programming,简称LP)
  • 非线性规划(Nonlinear Programming,简称NLP)
  • 整数规划

LINGO软件求解优化模型

例题:

max S{aixi=S,i=1,2,...i=16xi=5000,a5x6=5000.\begin{array}{lcl} \max \ S\\ \begin{cases} a_i x_i=S,i=1,2,... \\ \sum^6_{i=1}x_i=5000, \\ a_5x_6=5000. \end{cases} \end{array}

存期年限 1年 2年 3年 4年 5年
最有收益 1.018 1.0432 1.0776 1.09715968 1.144

LINGO代码:

!求解规划问题;
model:
min = S;
1.018 * x1 = S;
1.0432 * x2 = S;
1.07776 * x3 = S;
1.09715968 * x4 = S;
1.144 * x5 = S;
x1 + x2 + x3 + x4 + x5 + x6 = 5000;
1.144 * x6 = 5000;
end

运行结果:

Global optimal solution found.
Objective value: 135.2227
Infeasibilities: 0.000000
Total solver iterations: 0


Variable Value Reduced Cost
S 135.2227 0.000000
X1 132.8317 0.000000
X2 129.6230 0.000000
X3 125.4664 0.000000
X4 123.2479 0.000000
X5 118.2016 0.000000
X6 4370.629 0.000000

Row Slack or Surplus Dual Price
1 135.2227 -1.000000
2 0.000000 0.2110548
3 0.000000 0.2059565
4 0.000000 0.1993522
5 0.000000 0.1958273
6 0.000000 0.1878093
7 0.000000 -0.2148538
8 0.000000 0.1878093

其中Objective value项即为所求目标值,下面的Variable即为在最优状态下各变量值。

关于LINGO教程网上有很多,在这里不再赘述。读者可以前往 这里查看。

MATLAB软件求解优化模型

常用的优化功能函数:

  • 求解线性规划问题的主要函数是linprog。
  • 求解二次规划问题的主要函数是quadprog。
  • 求解无约束非线性规划问题的主要函数是fminbnd、fminunc和fminsearch。
  • 求解约束非线性规划问题的主要函数是fgoalattain和fminimax。

一般步骤:

  1. 针对具体工程问题建立优化设计的数学模型
  2. 建立目标函数文件
  3. 建立约束函数文件
  4. 建立调用优化工具函数的命令文件
  5. 将优化设计的命令文件复制到MATLAB命令窗口中进行运算求解。

线性规划问题

数学模型形式:

minfTXs.t.AXb    (线性不等式约束条件)AeqX=beq    (线性等式约束条件lbXub    (边界约束条件)\begin{array}{lcl} \min f^TX \\ s.t. AX\leq b~~~~(线性不等式约束条件) \\ AeqX=beq~~~~(线性等式约束条件 \\ lb \leq X \leq ub~~~~(边界约束条件) \end{array}

MATLAB中函数调用格式:

[xopt, fopt]=linprog(f,  A,  b,  Aeq,  beq,  lb,  ub,  x0,  options)

参数及返回值释义:

xopt: 最优解

fopt: 最优值

f: 目标函数各维变量系数向量

x0:初始点

options: 可选项

注: A, b, Aeq, beq, lb, ub均和上述数学模型对应。

二次规划问题

数学模型形式:

minf(X)=12XTHX+CTXs.t.AXbAeqX=beqlbXub\begin{array}{lcl} \min f(X)=\frac{1}{2}X^THX+C^TX \\ s.t. AX\leq b AeqX=beq \\ lb \leq X \leq ub \end{array}

[xopt, fopt]=quadprog(H,C, A, b, Aeq, beq, lb, ub, x0, options)

参数及返回值释义:

xopt: 最优解

fopt: 最优值

H: 目标函数的海塞矩阵

C: 目标函数的一次项系数向量

其余同上。

示例:

求解约束优化问题

f(X)=2X12+2x22+x322x1x2+x3s.t.g(X)=x1+3x2+2x36h(X)=2x1x2+x3=4x1,x2,x30\begin{array}{lcl} f(X)=2X^2_1+2x^2_2+x^2_3-2x_1x_2+x_3\\ s.t. g(X)=x_1+3x_2+2x_3\leq 6\\ h(X)=2x_1-x_2+x_3=4\\ x_1,x_2,x_3\geq 0 \end{array}

解:(1)将目标函数写成二次函数的形式f(X)=12XTHX+CTXf(X)=\frac{1}{2}X^THX+C^TX,其中:

X=[x1x2x3]H=[420240002]C=[001]\begin{array}{lcl} X=\begin{bmatrix} x_1\\ x_2\\ x_3 \end{bmatrix} H=\begin{bmatrix} 4 & -2 & 0\\ -2 & 4 & 0\\ 0 & 0 & 2 \end{bmatrix} C=\begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix} \end{array}

(2)编写求解二次规划的M文件:

H=[4,-2,0;-2,4,0;0,0,2];
C=[0,0,1];
A=[1,3,2];
b=[6];
Aeq=[2,-1,1];
beq=[4];
lb=zeros(3,1);
[xopt,fopt]=quadprig(H,C,A,b,Aeq,beq,lb)

其他规划问题

其他规划问题的MATLAB函数使用方法和前面两个类似,这里不再赘述,具体使用方法读者可以查阅相关资料。

微分方程及数值解

数学建模中的微分方程模型,其实就是高等数学中的微积分知识在建模中的应用。常见的微分方程模型有人口模型和种群数量模型。

实例 温度冷却

由物理学知道,物体冷却的速度与当时的物体温度和周围环境温度之差成正比.今 100℃的沸水注入杯里,放在室温为 20℃的环境冷却,5min 后测得水温为 60℃.求水温 u 与时间 t 的函数关系.

  1. 问题分析及模型的建立
    设比例系数为k(k>0),根据题意可得微分方程

dudt=k(u20)ut=0=100,ut=5=60\begin{array}{lcl} \frac{du}{dt}=-k(u-20)\\ u|_{t=0}=100,u|_{t=5}=60 \end{array}

  1. 模型的求解

    此为简单的一阶可分离变量微分方程,可得解析解u=20+80(0.5)t5u=20+80(0.5)^{\frac{t}{5}}.

使用MATLAB求解微分方程解析解(通解或特解):

dsolve('Du+k*(u-20)=0','u(0)=100','t')
%dsolve 为求常微分方程的符号解函数

运算结果为:

u =20+80*exp(-k*t)

使用MATLAB求解微分方程数值解

由给定条件ut=5=60u|_{t=5}=60,可得k=ln25k=\frac{\ln 2}{5},即u=20+80(0.5)t5u=20+80(0.5)^\frac{t}{5}.

MATLAB代码:

f=inline('-0.2*log(2)*(u-20)','t','u');
[t,u]=ode45(f,[0,100],100);
%ode45 为龙格库塔法求微分方程的数值解
plot(t,u)
%绘制 0 到 100 分钟的温度随时间变化的图形

MATLAB求解的函数微分方程(组)

那些不可以用积分方法求解的微分方程初值问题,可以用 MATLAB 的函数,如二三阶龙格-库塔法ode23四五阶龙格-库塔法 ode45 命令来求其数值解.
对于微分方程(组)的初值问题

x(t)=f(t,x),x=(x1,...,xn)T,f=(f1,...,fn)Tx(t0)=x0,x0(x01,...,x0n)T\begin{array}{lcl} x(t)=f(t,x),x=(x_1,...,x_n)^T,f=(f_1,...,f_n)^T\\ x(t_0)=x_0, x_0(x_{01},...,x_{0n})^T \end{array}

可用下面的 MATLAB 命令实现计算:

[t,x]= =ode23(odefun ,ts ,x0 ,options)
[t,x]= =ode45(odefun ,ts ,x0 ,options)

这里 ode23 用的是 3 级 2 阶的龙格-库塔法公式,ode45 用的是 5 级 4 阶的龙格-库塔公式.输入参数 odefun 是待解方程写成的函数 M 文件或inline 格式的函数f(t,x)f(t,x)

ts=[t0,t1,…,tf],则输出为在指定时刻 t0,t1,…,tf 的函数值.如果输入 t0∶k∶tf,则输出为在[t0,tf]内以 k 为间隔的等分点处的函数值。

x0 为函数初值( n 维向量)。

options 可用于设定误差限(options 默认时设定相对误差103{10}^{-3}绝对误差106{10}^{-6}),命令为:
options=odeset(‘reltol’,rt,‘abstol’,at)
这里 rt,at 分别为设定的相对误差和绝对误差。
命令的输出 t 为由输入指定的 ts,x 为相应的函数值( n维向量)。

其他MATLAB函数

MATLAB中还有诸如求解偏微分方程的函数,读者可以自行查询相关资料。

机器学习

由于机器学习内容很多这里我只将常用学习算法进行归类。机器学习分为监督学习和无监督学习。其中监督学习又分为分类、集成学习、降维。

分类:

  • K最近邻
  • 决策树
  • 贝叶斯分类器
  • 逻辑回归
  • 支持向量机

集成学习:

  • bagging:随机森林
  • boosting:AdaBoost、GBDT、XGBoost(工业级)

无监督学习:

  • K-Means
  • DBSCAN(基于密度的聚类)

概率统计模型

聚类  {KMeans聚类(快速聚类)分层聚类(系统聚类)hierarchical cluster判别分析  {根据距离判别fisher判别法逐步判别法(选择变量)时间序列分析  {指数平滑BoxJenkins方法\begin{array}{lcl} 聚类~~\begin{cases} K-Means聚类(快速聚类)\\ 分层聚类(系统聚类)hierarchical\ cluster \end{cases}\\ 判别分析~~\begin{cases} 根据距离判别\\ fisher判别法\\ 逐步判别法(选择变量) \end{cases}\\ 时间序列分析~~\begin{cases} 指数平滑\\ Box-Jenkins方法 \end{cases} \end{array}

注:聚类分析对类及类的数量是未知的,而判别分析是已知的。

评价模型

常用评价模型:

  • 层次分析法:定性与定量相结合的多准则决策
  • 灰色综合评价法:灰色关联度分析
  • 模糊综合评价法: 根据模糊数学的隶属度评价
  • BP神经网络综合评价法
  • 数据包络(DEA): 是一个对多投入/多产出的多决策单元的效率评价方法,广泛使用于业绩评价

综合评价模型:

  • 线性加权综合法 y=j=1mwixjy=\sum^m_{j=1}w_ix_j
  • 非线性加权综合法 y=j=1mxjwjy=\prod^m_{j=1}x_j^{w_j}
  • 逼近理想点(TOPSIS)方法
  • 动态加权

动态加权函数:

  • 分段变幂函数

  • 偏大型正态分布函数

  • S型分布函数

智能计算方法

  • 模拟退火算法(SA):寻找全局最优思想
    1. 自动转换: 满足条件自动转换到另外一种状态
    2. 概率转换: 当不满足条件时按照一定的概率转换到另外一种状态
  • 遗传算法(GA): 1. 选择 2. 交叉 3. 变异
  • 粒子群算法(PSO):信息共享思想

欢迎关注我的其它发布渠道