数学建模笔记

优化模型

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

形如:

决策变量: x

目标函数: f(x)

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

优化问题三要素:

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

数学规划:

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

LINGO软件求解优化模型

例题:

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

LINGO代码:

1
2
3
4
5
6
7
8
9
10
11
!求解规划问题;
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

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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命令窗口中进行运算求解。

线性规划问题

数学模型形式:

MATLAB中函数调用格式:

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

参数及返回值释义:

xopt: 最优解

fopt: 最优值

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

x0:初始点

options: 可选项

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

二次规划问题

数学模型形式:

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

参数及返回值释义:

xopt: 最优解

fopt: 最优值

H: 目标函数的海塞矩阵

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

其余同上。

示例:

求解约束优化问题

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

$\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文件:

1
2
3
4
5
6
7
8
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),根据题意可得微分方程
  1. 模型的求解

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

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

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

运算结果为:

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

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

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

MATLAB代码:

1
2
3
4
5
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 命令来求其数值解.
对于微分方程(组)的初值问题

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

1
2
[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)$。

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

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

options 可用于设定误差限(options 默认时设定相对误差${10}^{-3}$绝对误差${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(基于密度的聚类)

概率统计模型

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

评价模型

常用评价模型:

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

综合评价模型:

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

动态加权函数:

  • 分段变幂函数
  • 偏大型正态分布函数
  • S型分布函数

智能计算方法

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