导读340s## 一个人把数学建模比赛打完
高中生也能听懂的教程
一个记笔记的工具分享:https://pan.baidu.com/s/1lfVn8xa-3xpJnDUVBtdqNQ?pwd=v3fk 【https://www.bilibili.com/video/BV1zX4y1X73T/?spm_id_from=333.337.search-card.all.click&vd_source=6ff28d43565c4c39f53d8348c817a669】
340s导读:https://www.bilibili.com/video/BV1Yo4y1w7vP/ 不硬核的Chen
1 知是行之始——模型的建立、工具的准备、概念的厘清
1.1 概念的厘清
1.1.1数学建模是什么
数学建模是利用数学工具解决实际问题的重要手段,是把现实世界中的具体事物进行抽象,并加之以数学工具、数学方法加之进行计算求解的过程。
1.1.2数学建模工具是什么
数学建模工具是一类用于对实际问题进行建模和分析的软件工具,常用于解决各种领域中的复杂问题。这些工具包括挖掘数据工具、处理数据工具、分析数据工具和可视化数据工具,下面将分别进行介绍:
工具类型 | 工具名称 | 作用范围 |
---|---|---|
挖掘数据工具 | Pandas | 数据清洗、数据采集、特征提取等数据预处理阶段 |
Tidyverse | 数据清洗、数据采集、特征提取等数据预处理阶段 | |
处理数据工具 | Numpy | 数据整理和转换、数据归一化、缺失值处理等数据预处理阶段 |
data.table | 数据整理和转换、数据归一化、缺失值处理等数据预处理阶段 | |
分析数据工具 | Scikit-learn | 统计分析和机器学习、回归分析、聚类分析、分类分析等数据分析和建模阶段 |
mlr3 | 统计分析和机器学习、回归分析、聚类分析、分类分析等数据分析和建模阶段 | |
可视化数据工具 | Matplotlib | 数据可视化、折线图、散点图、柱状图等数据分析和结果展示阶段 |
ggplot2 | 数据可视化、折线图、散点图、柱状图等数据分析和结果展示阶段 |
- 挖掘数据工具:挖掘数据工具用于从大量数据中提取有用的信息,例如数据清洗、数据采集、特征提取等。常用的挖掘数据工具包括Python中的Pandas库、R语言中的tidyverse等。这些工具的作用范围主要在数据预处理阶段。
- 处理数据工具:处理数据工具用于对数据进行整理和转换,例如数据归一化、缺失值处理、数据规范化等。常用的处理数据工具包括Python中的Numpy库、R语言中的data.table等。这些工具的作用范围主要在数据预处理阶段。
- 分析数据工具:分析数据工具用于对数据进行统计分析和机器学习,例如回归分析、聚类分析、分类分析等。常用的分析数据工具包括Python中的Scikit-learn库、R语言中的mlr3等。这些工具的作用范围主要在数据分析和建模阶段。
- 可视化数据工具:可视化数据工具用于将数据以图形的形式进行展示,例如折线图、散点图、柱状图等。常用的可视化数据工具包括Python中的Matplotlib库、R语言中的ggplot2等。这些工具的作用范围主要在数据分析和结果展示阶段。
1.1.3数学建模方法是什么
数学建模方法是指在数学建模过程中所采用的一系列数学思想和技巧。数学建模方法是数学建模的基础,通过运用数学建模方法,可以将实际问题转化为数学模型,并对模型进行分析和求解,从而得出实际问题的解决方案。
常用的数学建模方法包括:
- 微积分方程
微分方程公式: y ′ = f ( x , y ) , 其中 y ′表示 y 对 x 的导数, f ( x , y ) 是关于 x 和 y 的函数。 微分方程公式:y′=f(x,y),\\其中 y′ 表示 y 对 x 的导数,f(x,y) 是关于 x 和 y 的函数。 微分方程公式:y′=f(x,y),其中y′表示y对x的导数,f(x,y)是关于x和y的函数。
积分方程公式: ∫ b a K ( x , t ) f ( t ) d t = g ( x ) 积分方程公式:∫baK(x,t)f(t)dt=g(x) 积分方程公式:∫baK(x,t)f(t)dt=g(x)
其中 K ( x , t ) 和 f ( t ) 是已知函数, g ( x ) 是待求函数。 其中 K(x,t)和 f(t) 是已知函数,g(x)是待求函数。 其中K(x,t)和f(t)是已知函数,g(x)是待求函数。
# 解微分方程
from scipy.integrate import solve_ivpdef dy_dx(x, y):return x + ysol = solve_ivp(dy_dx, [0, 1], [0])print(sol.t)
print(sol.y)# 解积分方程
from scipy.integrate import quaddef integrand(t, x):return K(x, t) * f(t)result, error = quad(integrand, a, b, args=(x,))
print(result)
- 最优化方法:
寻找最优解的方法,包括线性规划、非线性规划、整数规划等。
线性规划公式: m i n c T x ,满足 A x = b 和 x ≥ 0 , 其中 x 是待求变量, c 、 A 和 b 是已知矩阵和向量。 线性规划公式:mincTx ,满足 Ax=b 和 x≥0 ,\\其中 x 是待求变量,c 、A 和 b 是已知矩阵和向量。 线性规划公式:mincTx,满足Ax=b和x≥0,其中x是待求变量,c、A和b是已知矩阵和向量。
非线性规划公式: m i n f ( x ) ,满足 g i ( x ) ≤ 0 , h j ( x ) = 0 ,其中 x 是待求变量, f ( x ) 是目标函数, g i ( x ) 和 h j ( x ) 3 是约束条件函数。 非线性规划公式:minf(x) ,满足 gi(x)≤0 ,\\hj(x)=0 ,其中 x 是待求变量,f(x) 是目标函数,gi(x) 和 hj(x)3 是约束条件函数。 非线性规划公式:minf(x),满足gi(x)≤0,hj(x)=0,其中x是待求变量,f(x)是目标函数,gi(x)和hj(x)3是约束条件函数。
整数规划公式: m i n c T x ,满足 A x = b , x i ∈ Z , 其中 x 是待求变量, c 、 A 和 b 是已知矩阵和向量。 整数规划公式:mincTx ,满足 Ax=b ,xi∈Z ,\\其中 x 是待求变量,c 、A 和 b 是已知矩阵和向量。 整数规划公式:mincTx,满足Ax=b,xi∈Z,其中x是待求变量,c、A和b是已知矩阵和向量。
示例代码:
# 线性规划
from scipy.optimize import linprogc = [-1, 4]
A = [[-3, 1], [1, 2]]
b = [6, 4]res = linprog(c, A_ub=A, b_ub=b)print(res.fun)
print(res.x)# 非线性规划
from scipy.optimize import minimizedef objective(x):return x[0]**2 + x[1]**2def constraint1(x):return x[0] + x[1] - 1def constraint2(x):return 2*x[0] - x[1] - 2cons = [{'type': 'ineq', 'fun': constraint1},{'type': 'eq', 'fun': constraint2}]res = minimize(objective, [0, 0], constraints=cons)print(res.fun)
print(res.x)# 整数规划
from scipy.optimize import linprogc = [-1, 4]
A = [[-3, 1], [1, 2]]
b = [6, 4]
bounds = [(0, None), (0, None)]res = linprog(c, A_ub=A, b_ub=b, bounds=bounds, method='interior-point')
- 统计学方法:将实际问题转化为统计问题,运用概率统计的方法对数据进行分析和建模,如回归分析、时间序列分析等。
线性回归公式: y = β 0 + β 1 x 1 + ⋯ + β p x p + ϵ , 其中 β i 是回归系数, x i 是自变量, y 是因变量, ϵ 是随机误差。 线性回归公式:y=β0+β1x1+⋯+βpxp+ϵ ,\\其中 βi 是回归系数,xi 是自变量,y 是因变量,ϵ 是随机误差。 线性回归公式:y=β0+β1x1+⋯+βpxp+ϵ,其中βi是回归系数,xi是自变量,y是因变量,ϵ是随机误差。
时间序列分析公式: y t = μ t + ∑ p i = 1 ϕ i y t − i + ∑ q j = 1 θ j ϵ t − j + ϵ t , 其中 y t 是时间序列数据, μ t 是均值, ϕ i 和 θ j 是自回归系数和移动平均系数, ϵ t 是随机误差。 时间序列分析公式:yt=μt+∑pi=1ϕiyt−i+∑qj=1θjϵt−j+ϵt ,\\其中 yt 是时间序列数据,μt 是均值,ϕi 和 θj 是自回归系数和移动平均系数,ϵt 是随机误差。 时间序列分析公式:yt=μt+∑pi=1ϕiyt−i+∑qj=1θjϵt−j+ϵt,其中yt是时间序列数据,μt是均值,ϕi和θj是自回归系数和移动平均系数,ϵt是随机误差。
示例代码:
# 线性回归
import statsmodels.api as smX = sm.add_constant(X) # 添加常数项
model = sm.OLS(y, X)
result = model.fit()print(result.summary())# 时间序列分析
from statsmodels.tsa.arima.model import ARIMAmodel = ARIMA(y, order=(p, d, q))
result = model.fit()print(result.summary())
-
数值计算方法:通过数值计算的方式对数学模型进行求解,如差分法、有限元法、蒙特卡罗方法等。
差分方程公式: y i + 1 = y i + f ( x i , y i ) Δ x , 其中 y i 是 x i 处的函数值, f ( x i , y i ) 是 y i 的导数, Δ x 是步长。 差分方程公式:yi+1=yi+f(xi,yi)Δx ,\\其中 yi 是 xi 处的函数值,f(xi,yi) 是 yi 的导数,Δx 是步长。 差分方程公式:yi+1=yi+f(xi,yi)Δx,其中yi是xi处的函数值,f(xi,yi)是yi的导数,Δx是步长。有限元方法公式: ∫ Ω ∇ u ⋅ ∇ v , d x = ∫ Ω f v , d x , 其中 u 是待求解的函数, v 是测试函数, Ω 是空间区域, f 是已知函数。 有限元方法公式:∫Ω∇u⋅∇v,dx=∫Ωfv,dx ,\\其中 u 是待求解的函数,v 是测试函数,Ω 是空间区域,f 是已知函数。 有限元方法公式:∫Ω∇u⋅∇v,dx=∫Ωfv,dx,其中u是待求解的函数,v是测试函数,Ω是空间区域,f是已知函数。
蒙特卡罗方法公式: ∫ b a f ( x ) , d x ≈ b − a n ∑ n i = 1 f ( x i ) , 其中 f ( x ) 是待求函数, a 和 b 是积分区间, n 是采样点数。 蒙特卡罗方法公式:∫baf(x),dx≈b−an∑ni=1f(xi) ,\\其中 f(x) 是待求函数,a 和 b 是积分区间,n 是采样点数。 蒙特卡罗方法公式:∫baf(x),dx≈b−an∑ni=1f(xi),其中f(x)是待求函数,a和b是积分区间,n是采样点数。
# 差分法 def f(x, y):return x + yx = np.linspace(0, 1, 11) y = np.zeros_like(x)for i in range(len(x) - 1):y[i+1] = y[i] + f(x[i], y[i]) * (x[i+1] - x[i])print(y)# 有限元法 from scipy.sparse import lil_matrix from scipy.sparse.linalg import spsolvedef f(x):return np.sin(np.pi * x)def u(x):return np.sin(np.pi * x)n = 10 h = 1 / nA = lil_matrix((n+1, n+1)) b = np.zeros(n+1)for i in range(1, n):A[i, i-1] = 1A[i, i] = -2A[i, i+1] = 1b[i] = h * f
-
图论与网络流方法:将实际问题转化为图或网络流问题,通过图论或网络流算法求解问题,如最短路径、最大流等。
最短路径公式: d i j = m i n k ∈ P i j d i k + c k j 其中 d i j 是从节点 i 到节点 j 的最短距离, c k j 是从节点 k 到节点 j 的距离 P i j 是从节点 i 到节点 j 的所有路径。 最短路径公式:dij=mink∈Pijdik+ckj\\ 其中 dij 是从节点 i 到节点 j 的最短距离,ckj 是从节点 k 到节点 j 的距离\\Pij 是从节点 i 到节点 j 的所有路径。 最短路径公式:dij=mink∈Pijdik+ckj其中dij是从节点i到节点j的最短距离,ckj是从节点k到节点j的距离Pij是从节点i到节点j的所有路径。
$$
最大流公式:maxf∑v∈Vfsv−∑v∈Vfvs
,\其中 fsv
是从源点 s
到节点 v
的流量,fvs
\
是从节点 v
到源点 s
的流量,V
是节点集合。
$$
示例代码:
# 最短路径
import networkx as nxG = nx.Graph()
G.add_edge(1, 2, weight=1)
G.add_edge(2, 3, weight=2)
G.add_edge(3, 4, weight=3)
G.add_edge(4, 5, weight=4)
G.add_edge(5, 6, weight=5)path = nx.shortest_path(G, source=1, target=6, weight='weight')
print(path)# 最大流
import networkx as nxG = nx.DiGraph()
G.add_edge('s', 'A', capacity=3.0)
G.add_edge('s', 'B', capacity=2.0)
G.add_edge('A', 'C', capacity=3.0)
G.add_edge('B', 'C', capacity=1.0)
G.add_edge('B', 'D', capacity=2.0)
G.add_edge('C', 't', capacity=3.0)
G.add_edge('D', 't', capacity=3.0)flow_value, flow_dict = nx.maximum_flow(G, 's', 't')
print(flow_value)
print(flow_dict)
1.1.4 数学建模中数学思维是什么
- 抽象思维:数学建模的第一步就是将实际问题抽象成数学问题。这需要具备较强的抽象思维能力,能够将实际问题中的主要因素抽象出来,用数学符号和公式来表达。
- 综合思维:数学建模需要将多个学科领域的知识综合运用,涉及到数学、物理、化学、生物等学科领域的知识。需要具备跨学科综合思维的能力。
- 创新思维:数学建模中需要对问题进行创新性的思考,提出独特的解决方法。需要具备创新思维能力,能够从不同的角度出发,提出新颖的思路和解决方法。
- 系统思维:数学建模需要将问题分解为多个子问题,然后将这些子问题综合起来求解。需要具备系统思维能力,能够将一个大问题分解为多个小问题,并能够将这些小问题综合起来求解。
- 抛弃框架思维:数学建模需要从传统框架中抽离出来,开阔思路,避免固步自封。需要具备抛弃框架思维的能力,能够超越传统思维模式,创造新的解决方案。
- 非线性思维:数学建模中的问题往往是非线性的,需要具备非线性思维的能力,能够破解非线性问题的难题,提出有效的解决方法。
1.2 工具的准备
1.2.1 数据挖掘的工具
数据挖掘是从大量的数据中提取出有用的信息和知识,以便进行决策或预测未来趋势的过程。以下是一些常用的数据挖掘工具:
- SQL:SQL是一种结构化查询语言,用于管理关系型数据库系统。它可以用于从数据库中查询、筛选和组织数据。
- Python:Python是一种广泛使用的编程语言,用于数据分析、机器学习和人工智能等领域。它有丰富的数据处理库和数据可视化库,如NumPy、Pandas、Matplotlib和Seaborn等。
- R:R是一种统计学软件,它提供了许多用于数据分析、数据可视化和机器学习的函数和工具包,如ggplot2、dplyr和tidyr等。
- SAS:SAS是一种商业化的数据挖掘和分析软件,它提供了广泛的数据处理和数据分析功能,如数据挖掘、预测建模和统计分析等。
- KNIME:KNIME是一种开源的数据挖掘和机器学习工具,它提供了一个可视化的工作流设计器,用于构建数据挖掘和分析流程。
- Tableau:Tableau是一种数据可视化软件,它可以将数据转换成图表、图形和地图等形式,以便用户更好地理解和分析数据。
- MATLAB:MATLAB是一种用于科学计算和数据分析的编程语言和交互式环境,它提供了丰富的数学函数和工具箱,用于数据挖掘和分析。
1.2.2 数据清洗的工具
数据清洗是数据预处理的一个重要环节,用于处理和修正数据中存在的缺失、错误、异常和不一致等问题,以确保数据的质量和准确性。以下是一些常用的数据清洗工具:
- OpenRefine:OpenRefine是一种开源的数据清洗工具,它可以自动识别和修正数据中存在的错误和重复项,并支持数据分列、合并和转换等操作。
- Trifacta:Trifacta是一种商业化的数据清洗工具,它提供了一种交互式的数据清洗界面,用于解决大规模数据清洗和转换问题。
- Python:Python有丰富的数据处理库,如Pandas和NumPy等,可以用于数据清洗和数据预处理,支持数据筛选、去重、填充缺失值、数据类型转换等操作。
- R:R也有丰富的数据处理和数据清洗库,如dplyr和tidyr等,可以用于数据筛选、去重、填充缺失值和数据类型转换等操作。
- Excel:Excel是一种广泛使用的电子表格软件,它可以用于数据清洗和预处理,支持数据筛选、去重、查找替换、数据类型转换等操作。
1.2.3 数据分析的工具
数据分析是对数据进行挖掘和分析的过程,常用的数据分析工具有以下几种:
- Excel:Excel是一个常见的数据分析工具,它提供了许多功能,如数据透视表、图表和公式等,可以帮助用户分析和可视化数据。
- R:R是一种流行的数据分析工具,它提供了广泛的数据分析库和包,如ggplot2和dplyr等,可以进行数据可视化和数据清洗等操作。
- Python:Python也是一个流行的数据分析工具,它提供了许多数据处理和数据分析库,如Pandas和NumPy等,可以进行数据可视化和数据清洗等操作。
- Tableau:Tableau是一种商业化的数据可视化工具,它提供了丰富的图表和交互式界面,可以帮助用户快速分析和探索数据。
- Power BI:Power BI是Microsoft公司推出的一款数据分析和可视化工具,它提供了丰富的图表和可视化功能,可以帮助用户快速分析和可视化数据。
1.2.4 数据可视化的工具
- Tableau:Tableau是一种商业化的数据可视化工具,它提供了丰富的图表和交互式界面,可以帮助用户快速创建专业的数据可视化。
- Power BI:Power BI是Microsoft公司推出的一款数据分析和可视化工具,它提供了丰富的图表和可视化功能,可以帮助用户快速创建自定义的数据可视化。
- D3.js:D3.js是一种流行的JavaScript库,可以用于创建各种类型的交互式数据可视化,如折线图、散点图、地图等。
- ggplot2:ggplot2是一种用于R语言的数据可视化包,它提供了丰富的图形和图表类型,可以用于创建高质量的数据可视化。
- matplotlib:matplotlib是Python中的一种数据可视化库,它提供了多种图表类型,如折线图、散点图和条形图等,可以用于创建高质量的数据可视化。
1.2.5 本章小结 ——对于一个人来说唯一推荐的工具
给出的工具千百种,但既要满足论文书写,数据处理,可视化,那但这里我要推荐的工具只有一种SPSSPRO。
1.3 模型的建立
粒子群算法详解:https://juejin.cn/post/7159457607055310885
随机森林算法详解:https://juejin.cn/post/7219613068275171365
1.3.1 常见模型
建模问题一般只能分成这几类,每一类呢挑一些特别的学习一下就行,至于有些不知道的或者说比较少见的,可以留到比赛的时候去做学习。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LIZbuxHL-1684560561287)(C:\Users\b\Desktop\image-20230430073442285.png)]
数学建模中比较常见的几种模型:
(一)、预测与预报
1、灰色预测模型(必须掌握)
满足两个条件可用:
①数据样本点个数少,6-15个
②数据呈现指数或曲线的形式
例如:可以通过极值点和稳定点来预测下一次稳定点和极值点出现的时间点
2、微分方程预测(高大上、备用)
无法直接找到原始数据之间的关系,但可以找到原始数据变化速度之间的关系,通过公式推导转化为原始数据的关系。微分方程关系较为复杂,如果数学功底不是很好的一般不会选择使用。比如说小编我。
3、回归分析预测(必须掌握)
求一个因变量与若干自变量之间的关系,若自变量变化后,求因变量如何变化;
样本点的个数有要求:
①自变量之间的协方差比较小,最好趋近于0,自变量间的相关性小;
②样本点的个数n>3k+1,k为自变量的个数;
③因变量要符合正态分布
4、马尔科夫预测(备用)
一个序列之间没有信息的传递,前后没联系,数据与数据之间随机性强,相互不影响;今天的温度与昨天、后台没有直接联系,预测后天温度高、中、低的概率,只能得到概率
5、时间序列预测(必须掌握)
与马尔科夫链预测互补,至少有2个点需要信息的传递,AR模型、MA模型ARMA模型,周期模型,季节模型等
6、小波分析预测(高大上)
数据无规律,海量数据,将波进行分离,分离出周期数据、规律性数据;可以做时间序列做不出的数据,应用范围比较广
7、神经网络预测(备用)
大量的数据,不需要模型,只需要输入和输出,黑箱处理,建议作为检验的办法
8、混沌序列预测(高大上)
比较难掌握,数学功底要求高
(二)、评价与决策
1、模糊综合评判(经常用,需掌握)
评价一个对象优良中差等层次评价,评价一个学校等,不能排序
2、主成分分析(经常用,需掌握)
评价多个对象的水平并排序,指标间关联性很强
3、层次分析法(AHP)(经常用,需掌握)
做决策,去哪旅游,通过指标,综合考虑做决策
4、数据包络(DEA)分析法
优化问题,对各省发展状况进行评判
5、秩和比综合评价法(经常用,需掌握)
评价各个对象并排序,指标间关联性不强
6、优劣解距离法(TOPSIS法)
7、投影寻踪综合评价法
揉合多种算法,比如遗传算法、最优化理论等
8、方差分析、协方差分析等(经常用,需掌握)
方差分析:看几类数据之间有无差异,差异性影响,例如:元素对麦子的产量有无影响,差异量的多少;(1992年,作物生长的施肥效果问题)
协方差分析:有几个因素,我们只考虑一个因素对问题的影响,忽略其他因素,但注意初始数据的量纲及初始情况。(2006年,艾滋病疗法的评价及预测问题)
(三)、分类与判别
1、距离聚类(系统聚类)(常用,需掌握)
2、关联性聚类(常用,需掌握)
3、层次聚类
4、密度聚类
5、其他聚类
6、贝叶斯判别(统计判别方法,需掌握)
7、费舍尔判别(训练的样本比较多,需掌握)
8、模糊识别(分好类的数据点比较少)
(四)、关联与因果
1、灰色关联分析方法(样本点的个数比较少)
2、Sperman或Kendall等级相关分析
3、Person相关(样本点的个数比较多)
4、Copula相关(比较难,金融数学,概率数学)
5、典型相关分析(因变量组Y1234,自变量组X1234,各自变量组相关性比较强,问哪一个因变量与哪一个自变量关系比较紧密?)
6、标准化回归分析
若干自变量,一个因变量,问哪一个自变量与因变量关系比较紧密
7、生存分析(事件史分析)难
数据里面有缺失的数据,哪些因素对因变量有影响
8、格兰杰因果检验
计量经济学,去年的x对今年的y有没有影响
(五)、优化与控制
1、现行规划、整数规划、0-1规划(有约束,确定的目标)
2、非线性规划与智能优化算法
3、多目标规划和目标规划(柔性约束,目标函数,超过)
4、动态规划
5、网络优化(多因素交错复杂)
6、排队论与计算机仿真
7、模糊规划(范围约束)
8、灰色规划(难)
◆涉及到的数学建模方法:
几何理论、现行代数、微积分、组合概率、统计(回归)分析、优化方法(规划)、图论与网络优化、综合评价、插值与拟合、差分计算、微分方程、排队论、模糊数学、随机决策、多目标决策、随机模拟、灰色系统理论、神经网络、时间序列、机理分析等方法。
1.3.2 进阶模型
有一种模型叫做无论什么模型都有神经网络模
链接:https://pan.baidu.com/s/1PbO-CbXst7sm7EUK5RRc2R1A 提取码:1111
神经网络简介
人工神经网络是在现代神经科学的基础上提出和发展起来的,旨在反映人脑结构及功能的一种抽象数学模型。自1943 年美国心理学家W. McCulloch 和数学家W. Pitts 提出形式神经元的抽象数学模型—MP 模型以来,人工神经网络理论技术经过了50 多年曲折的发展。特别是20 世纪80 年代,人工神经网络的研究取得了重大进展,有关的理论和方法已经发展成一门界于物理学、数学、计算机科学和神经生物学之间的交叉学科。它在模式识别,图像处理,智能控制,组合优化,金融预测与管理,通信,机器人以及专家系统等领域得到广泛的应用,提出了40 多种神经网络模型,其中比较著名的有感知机,Hopfield 网络,Boltzman 机,自适应共振理论及反向传播网络(BP)等。在这里我们仅讨论最基本的网络模型及其学习算法。
人工神经元模型
下图表示出了作为人工神经网络(artificial neural network,以下简称NN)的基本单元的神经元模型,它有三个基本要素:
(i)一组连接(对应于生物神经元的突触),连接强度由各连接上的权值表示,权值为正表示激活,为负表示抑制。
(ii)一个求和单元,用于求取各输入信号的加权和(线性组合)。
(iii)一个非线性激活函数,起非线性映射作用并将神经元输出幅度限制在一定范围内(一般限制在(0,1)或(−1,1)之间)。
此外还有一个阈值\theta {k} (或偏置 b{k} = −\theta _{k} )。
若把输入的维数增加一维,则可把阈值 \theta {k}(或偏置 b{k} = −\theta _{k} )包括进去
Matlab 中的激活(传递)函数如下表所示:
函数名 功 能
purelin 线性传递函数
hardlim 硬限幅传递函数
hardlims 对称硬限幅传递函数
satlin 饱和线性传递函数
satlins 对称饱和线性传递函数
logsig 对数S 形传递函数
tansig 正切S 形传递函数
radbas 径向基传递函数
compet 竞争层传递函数
网络结构及工作方式
除单元特性外,网络的拓扑结构也是NN 的一个重要特性。从连接方式看NN 主要有两种。
- 前馈型网络
各神经元接受前一层的输入,并输出给下一层,没有反馈。结点分为两类,即输入单元和计算单元,每一计算单元可有任意个输入,但只有一个输出(它可耦合到任意多个其它结点作为其输入)。通常前馈网络可分为不同的层,第i层的输入只与第i −1层输出相连,输入和输出结点与外界相连,而其它中间层则称为隐层。
- 反馈型网络
所有结点都是计算单元,同时也可接受输入,并向外界输出。NN 的工作过程主要分为两个阶段:第一个阶段是学习期,此时各计算单元状态不变,各连线上的权值可通过学习来修改;第二阶段是工作期,此时各连接权固定,计算单元状态变化,以达到某种稳定状态。从作用效果看,前馈网络主要是函数映射,可用于模式识别和函数逼近。
反馈网络按对能量函数的极小点的利用来分类有两种:
第一类是能量函数的所有极小点都起作用,这一类主要用作各种联想存储器;
第二类只利用全局极小点,它主要用于求解最优化问题。
蠓虫分类问题与多层前馈网络
蠓虫分类问题
蠓虫分类问题可概括叙述如下:生物学家试图对两种蠓虫(Af 与Apf)进行鉴别,依据的资料是触角和翅膀的长度,已经测得了9 支Af 和6 支Apf 的数据如下:
Af: (1.24,1.27),(1.36,1.74),(1.38,1.64),(1.38,1.82),(1.38,1.90),(1.40,1.70),(1.48,1.82),(1.54,1.82),(1.56,2.08).
Apf: (1.14,1.82),(1.18,1.96),(1.20,1.86),(1.26,2.00),(1.28,2.00),(1.30,1.96).
现在的问题是:
(i)根据如上资料,如何制定一种方法,正确地区分两类蠓虫。
(ii)对触角和翼长分别为(1.24,1.80),(1.28,1.84)与(1.40,2.04)的3 个标本,用所得的方法加以识别。
(iii)设Af 是宝贵的传粉益虫,Apf 是某疾病的载体,是否应该修改分类方法。
如上的问题是有代表性的,它的特点是要求依据已知资料(9 支Af 的数据和6 支Apf 的数据)制定一种分类方法,类别是已经给定的(Af 或Apf)。今后,我们将9 支Af 及6 支Apf 的数据集合称之为学习样本。
多层前馈网络
为解决上 述问题,考虑一个其结构如下图所示的人工神经网络,
图中最下面单元,即由•所示的一层称为输入层,用以输入已知测量值。在我们的例子中,它只需包括两个单元,一个用以输入触角长度,一个用以输入翅膀长度。中间一层称为处理层或隐单元层,单元个数适当选取,对于它的选取方法,有一些文献进行了讨论,但通过试验来决定,或许是最好的途径。在我们的例子中,取三个就足够了。最上面一层称为输出层,在我们的例子中只包含二个单元,用以输出与每一组输入数据相对应的分类信息.任何一个中间层单元接受所有输入单元传来的信号,并把处理后的结果传向每一个输出单元,供输出层再次加工,同层的神经元彼此不相联接,输入与输出单元之间也没有直接联接。这样,除了神经元的形式定义外,我们又给出了网络结构。有些文献将这样的网络称为两层前传网络,称为两层的理由是,只有中间层及输出层的单元才对信号进行处理;输入层的单元对输入数据没有任何加工,故不计算在层数之内。
下面利用上文所叙述的网络结构及方法,对蠓虫分类问题求解。编写 Matlab 程序如下:
clear
p1=[1.24,1.27;1.36,1.74;1.38,1.64;1.38,1.82;1.38,1.90;
1.40,1.70;1.48,1.82;1.54,1.82;1.56,2.08];
p2=[1.14,1.82;1.18,1.96;1.20,1.86;1.26,2.00
1.28,2.00;1.30,1.96];
p=[p1;p2]';
pr=minmax(p);
goal=[ones(1,9),zeros(1,6);zeros(1,9),ones(1,6)];
plot(p1(:,1),p1(:,2),'h',p2(:,1),p2(:,2),'o')
net=newff(pr,[3,2],{'logsig','logsig'});
net.trainParam.show = 10;
net.trainParam.lr = 0.05;
net.trainParam.goal = 1e-10;
net.trainParam.epochs = 50000;
net = train(net,p,goal);
x=[1.24 1.80;1.28 1.84;1.40 2.04]';
y0=sim(net,p)
y=sim(net,x)
BP神经网络的应用场景
- 模式识别
模式识别通常是指对表征事物或现象的各种形式的(数值的、文字的和逻辑关系的)信息进行处理和分析,以便确定他们属于哪种类别。
- 函数逼近
对于一些表达式过于复杂的函数,或者是难以表达的函数,我们可以利用神经网络来无限逼近他们,对他们进行模拟。
- 预测
先利用一些已知的数据对网络进行训练,然后再利用这个训练好的网络来对新来的数据进行预测。相比于传统的方法来说,神经网络提高了准确度,并且只需要较少的数据。
- 数据压缩
数字图像压缩实际上是以较少的比特数有损或者无损的来表示原来像素矩阵的一种图像处理技术,实际上就是减少图像数据中的时间冗余,空间冗余,频谱冗余等等作为目的,从而同过减少上述的一种或者多种冗余的信息而达到更加高效的存储与传输数据.图像的压缩系统其实无论采用什么样的具体的架构或者技术方法,基本的过程都是一致的,主要还是可以概述为编码,量化,解码这三个部分。从理论上讲,编解码问题其实就可以归结为映射与优化的问题,从神经网络的方面来看无非就是实现了从输入到输出的一个非线性的映射关系,并且衡量性能的标准可以从并行处理能力是否高效,容错率是否合适,以及是否具有鲁棒性.分析图像压缩的基本原理其实和上述的BP神经网络的原理一样。所以我们可以利用BP神经网络来解决图像压缩问题。
2 行是知之成——数据收集、建模过程、论文书写
2.1 数据收集
⽂献检索与数据获得主要因为四部分讲解,能在您的美赛之路上尽微薄之⼒是数模乐园最⼤的荣耀。
1.⽂献检索
2.⽂献下载
3.数据获取
4.⼀些⼯具
⽂献搜索
⽂献检索的类型
⼀次⽂献: 指作者以其本⼈的研究成果(如实验、观察等)为基本素材写成的原始创作,如专著、期刊论⽂、学位论⽂等。
⼆次⽂献: 将⼤量⽆序、分散的⼀次⽂献⼿收集、整理、加⼯形成的材料,如索引、⽂摘及相应的数据库。
三次⽂献:科技⼈员围绕某⼀专题,借助于⼆次⽂献和⼀次⽂献,经过阅读、分析、归纳、概括、撰写⽽成的新的⽂献,如综述、进展、现状等。
⼀次⽂献最有价值,离事实最近,最真实可靠,但对⽂献资料的检索往往是通过⼆次⽂献、三次⽂献进⾏。需要深挖理论时需阅读⼀次⽂献。
⽂献检索渠道(General)
⾕歌学术 http://www.scholar.google.com 最权威的学术搜索引擎,⽅便提取参考⽂献
⾕歌镜像 https://xueshu.glgoo.net/
Web of Science http://apps.webofknowledge.com/ 综合的英⽂⽂献搜索(英⽂⽂献)
中国知⽹ http://www.cnki.net/ 权威的中⽂搜索引擎
百度学术 http://xueshu.baidu.com/使⽤⽅便,可⾃动链接本校数据库进⾏下载(建议能不⽤百度尽量不⽤,以后也是)
微软学术 http://academic.research.microsoft.com/ ⽐较适合英⽂⽂献(英⽂好⼀些,但⽂献数量不多)
Google学术搜索•“ -” 要排除的字符 :如 “数学建模 -中国”表示在数学建模中没有中国的搜索结果
•“OR” 并列字符(必须⼤写)
•“intitle”: 限制搜索的词语是⽹⻚标题中包含的关键词
•“allintitle”限制搜索的词语是⽹⻚标题中包含的多个 关键词
•“filetype” 检索⽂档格式 ( xls 、ppt 、doc 、 rtf 、pdf 、swf )
•“site: ”对搜索的⽹站 进⾏限制
•“引⽤ ” 对参考⽂献提取,标准英⽂论⽂参考⽂献格式
知⽹检索⼀框式检索:数据检索词直接进⾏检索,⽅便快捷,适合新⼿⼊⻔使⽤。在⼀框式检索中也能够切换不同的数据库、不同
的学科⻔类进⾏搜索,可以满⾜基本的使⽤。
⾼级检索: 针对需要专业检索和组合检索的⽤户建议使⽤⾼级检索模式。⾼级搜索模式的核⼼是通过检索词进⾏⼀系列的 逻辑运算来尽可能准确地表达出⽤户的检索意图。
⾼级检索主要分为四个类别,分别为 “⾼级检索 ” 、“专业检索” 、“作者发⽂检索” 以及“句⼦检索” ,其中常⽤的为 “⾼级检索 ”和 “专业检索”。
⼀框式搜索
⼀框式搜索
检索注意事项• 多⽤单元词少⽤多元词
•尽量多使⽤同义词、近义词,包括俗称、学名、缩写等。
• 少⽤含义过于偏窄或过于宽泛的词。
•试查相关数据库,以初步检索借鉴相关⽂献的⽤词,扩展、变更检索词。
• 英⽂检索词可借助Google翻译 、 中国知⽹(CNKI)⼯具书等。⽂献下载
• Google学术搜索 免费PDF下载
• 本校图书馆数据库 (例如知⽹/WOS/ Elsevier,百度学术会⾃动提示是否购买)
• SCI-Hub http://sci-hub.hk/
• ⼀些⼤学的免费数据库
数据获取
公开数据库http://data.stats.gov.cn/index.htm 国家数据,中国国家统计局的数据 公布平台
•http://hao.199it.com/ ⼤数据导航 各种数据⽹站的⼊⼝
•https://data.worldbank.org.cn
世界银⾏公开数据免费并公开获取世界 各国的发展数据
•https://cadmapper.com/ 世界主要城市CAD图
•https://www.data.gov/ 美国的开放数据库
•https://nycopendata.socrata.com/ NYC 纽约Opendata
•http://data.europa.eu/euodp/en/data EU欧盟 OpenData
•http://open.canada.ca/en 加拿⼤ Open Data
•https://data.london.gov.uk/dataset 伦敦 Datastore
•https://datasf.org/ 旧⾦⼭开放数据库
•https://data.gov.uk/data/search U.K. Government Data
•https://www.gapminder.org/data/ Health Care
•http://www.cs.cmu.edu/~enron/ Email Datasets
•http://www.cs.toronto.edu/~delve/data/datasets.html University of Toronto
•https://www.reddit.com/r/bigquery/wiki/datasets Datasets publicly available on Google BigQuery
•https://www.reddit.com/r/datasets/gilded/ Reddit数据库
•http://en.tutiempo.net/climate 全球⽓候数据
•Other…
数据爬⾍⽹络爬⾍是按照⼀定的规则(模拟⼈⼯登录⽹⻚的⽅式),⾃动抓取⽹络上内容的数据。
1.编程:如利⽤Python,上⼿⻔槛较⾼
2.⼋⽖⻥采集器 http://www.bazhuayu.com/;
⽕⻋头采集器 http://www.locoy.com/
推荐使⽤⼋⽖⻥采集器,操作⽅便、上⼿⻔槛低、可以导出成Excel等表格⽂件。常⽤⼩⼯具
⾕歌浏览器
•冰点⽂库下载器:百度⽂库下载
•赛⻛翻墙(免费)、蓝灯(有流量限制)
•⾚兔VPN (免费或收费)
•CNKI翻译助⼿: http://dict.cnki.net/
•Turbo VPN (Android 永久免费, Google Play下载)
•净⽹⼤师(去除镜像⽹站⼴告)
2.2 建模过程
2.2.1团队建立
其实一句话整完了,你拿chatgpt一个把他当成是编程手、一个作为写手、一个负责算手,你是leader
编程手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lJ45s2Qf-1684560561290)(C:\Users\b\AppData\Roaming\Typora\typora-user-images\image-20230430075545388.png)]
算手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pWCv5neQ-1684560561291)(C:\Users\b\AppData\Roaming\Typora\typora-user-images\image-20230430075634021.png)]
写手
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ox0rPUj9-1684560561292)(C:\Users\b\AppData\Roaming\Typora\typora-user-images\image-20230430075723858.png)]
每一个人准备的内容是不一样的,因为一个队伍三个人会分别负责不同的内容和工作,准备数学建模最忌讳的就是三个人一起扎堆看数学模型,一起学习编程,一起学论文写作,到了最后三个人啥都会,但也啥都不会。
下面给一个完整的准备路线:
对于建模手而言首先要将上图中提到六类模型的基本原理弄懂;然后结合实际的题目(例如往年国赛、美赛等等)来分析这些模型一般会用到什么类型的题目中,如微分方程模型一般会和规划模型结合起来用于解决「热传递」的相关问题(2018 年国赛 A 题和 2019 年国赛 A 题)。
对于编程手而言最起码要掌握一门编程语言:Python 或者 Matlab,这两种是数学建模中最常用的编程语言。如果你是一个不懂编程的小白的话,建议你选择 Python,虽然 Python 和 Matlab 都比较简单但是 Python 对于建模编程小白最大的优势在于强大且良好的社区环境以及涵盖了全部常用模型的第三方库,
- 强大且良好的社区环境:在用 Python 实现一个模型的时候,基本上 CSDN 和博客园都有现成的代码,如果网上没有需要自己手动实现,但是害怕自己遇到很多 bug,网上针对这些 bug 都有很好的解释以及解决办法。
- 覆盖面广的第三方库:Python 有很多第三方库对数学建模常用的模型都有实现,你只需要安装这些第三方库,然后调用这些库,基本上几行代码就能实现一个复杂的模型。比如说最小二乘法的多元线性回归,在 sklearn 库中 LinearRegression 模块就已经替你实现好了,直接调用就可以。
2.3 论文书写
找到一篇相似的论文进行抄袭(只抄形式、不抄内容)
历年的相似论文:https://mbd.pub/o/bread/ZJiXk59p(辛苦整理,可以支持一下,2元…)
可参考:
数学建模论文
简单扼要,层次分明
书写论文前搞明白:
1、 论文需要回答哪几个问题?(哪个方面需要建模)
2、 问题以怎样的方式回答?(结果如何呈现)
3、 每个问题列出哪些关键数据?(建模得到的数据)
4、 文章层次感
论文内容:
1、 摘要(文章思路、模型、算法、创新点、结果)重要!!!
2、 问题重述与研究背景(问题的由来,以往学者的研究成果)
3、 模型的假设及符号说明(列表)
4、 模型的建立(问题分析→建模的思想→公式推导→基本模型→最终或简化模型等)
5、 模型的求解(计算方法设计或选择,算法设计或选择,算法思想依据,步骤及实现,算法流程图,采用的软件名称,引用或建立必要的数学命题和定理,求解方案及流程,结果表示)
6、 结果数据分析与校验(误差分析,灵敏度分析,模型校验……)
7、 模型评价与推广(特点,优缺点,改进方法)
8、参考文献(注意格式)
9、附录(程序及运行结果,详细图表,复杂步骤演算过程等)
摘要:(简要的语言概括文章的脉络)(单独占页)(创新点!!!)
课题问题→模型引入→模型的数学归类→建模的思想(思路)→算法思想(思路)→建模特点(论文内容的6、7点)→主要结果(数值结果、结论)(回答题目所问的全部“问题”)
问题分析:(简述总体思路,小题宏观分析)(问题的由来,背景)
简要描述一下题目问题→介绍别人的成果(引用)(方便后面与自己的模型比较优劣)→自己对问题的分析
模型假设及符号说明(列表)
据题目的条件和要求做出假设(关键性假设不能缺,切合题意,符号列表简洁全面)
模型建立(模型实用有效,追求简单、初等)
问题微观分析→基本模型(公式、方案、算法等,正确、简明、完整)→简化模型(简化思想、依据,简化后的模型)
模型求解(符合数学规范)
说明计算方法或算法的原理、思想、依据、步骤或流程图,介绍软件(算法用有所据)
计算过程放重要的过程,不重要的过程放在附录里面。
有数值解(合理正确)
结果数据分析、检验等
对数值结果或模拟结果进行必要的检验(有误差,分析原因,改进),精炼数据,选取合适的数据,结果表示要集中,一目了然,便于比较分析。数值结果设计表格(图形图标),求解方案用图示。最后结论要正确。
模型评价和推广(可以分开,看最终篇幅)
突出优点,缺点不回避
参考文献
参考书、论文一一列出,文章中注明
附录
详细的结果、详细的数据罗列在此(主要结果数据,在正文中列出,复杂的计算过程列在此处)
P.S 编辑于2023.5.20
最近集中的一些问题是关于需要看哪些参考书,那么这里给一个集中回答
数学建模书籍推荐:
最近总有一些同学问一些关于有没有一些关于数学建模推荐的书籍,那这里呢我给到一个集中的回答
1.《数学模型》姜启源/谢金星
2.《数学建模算法与应用》司守奎
3.《数学建模基础教程》刘保东
4.《R语言实战》 (美)卡巴科弗(Robert I.Kabacoff)
5.《Matlab在数学建模中的应用》卓金武
6.《SAS常用统计分析教程》胡良平
7.《[SPSS统计分析基础教程]》
8.《数学建模方法与分析》
10.《数学建模竞赛》
11.《数学建模方法及其应用》韩中庚
12.《美国大学生数学建模竞赛题解析与研究》王杰
13.《正确写作美国大学生数字建模竞赛论文》王杰
14.《[Matlab神经网络43个案例分析]王小川
15.《Matlab智能算法30个案例》[史峰]
16.《复杂网络算法与应用》司守奎
17.《[Matlab R2016a完全自学一本通]刘浩
18.《Matlab与数学实验》艾冬梅
-
《[国赛历届优秀论文》
-
《美赛历届优秀论文》
-
《系统动力学》钟永光
19、20可以移步这里https://mbd.pub/o/bread/ZJiXk59p
我推荐的这些书,都是自己拥有的,我也整理一些电子书版本的资源https://mbd.pub/o/bread/ZJmVl5tq。但依然建议大家购买纸质书,电子版的只能说是应急用的,反正pdd的东西也很便宜。
推荐这些书并不是代表每一本都得看完了。精看了其中几本,剩下的就是在数模比赛前期(一般一周)快速学习一下,大概有一个感觉。
其中建模的书可以从1 2 3 8 9 11 12 21当中选择,适用于美赛还是适用于国赛我想题主从作者国籍或者书名就可以看出来了。
尤其是系统动力学,这个方法在美赛ICM当中应用得最多。编程基础的书则有4 5 6 7 17 18当中选择,其中Matlab是必须掌握的语言。
R,SAS,SPSS这三个统计学语言三选一就足够了,建议选择前两个,第三个傻瓜操作。比赛的时候完全可以现学现卖
编程进阶的书则有14 15 16稍微了解一些智能算法有助于比赛的时候可以用得上一些高大上的算法。虽然前面的书都有涉及,但是不如这些讲得深刻。
写作的书主要是10 13 19 21
祝各位比赛顺利,如果有任何关于数学建模的问题可以b站私信我,我会尽力回答各位,也可付费咨询也可https://mbd.pub/o/bread/ZJiZl5lw,但我不会帮各位写作论文,更多的也是希望大家能够真实的建立抽象的数学建模思维(提升能力、帮忙准备的建议、和一些经验心得的分享),之后无论是论文写作还是工作都大有裨益。
赛论文》王杰
14.《[Matlab神经网络43个案例分析]王小川
15.《Matlab智能算法30个案例》[史峰]
16.《复杂网络算法与应用》司守奎
17.《[Matlab R2016a完全自学一本通]刘浩
18.《Matlab与数学实验》艾冬梅
-
《[国赛历届优秀论文》
-
《美赛历届优秀论文》
-
《系统动力学》钟永光
19、20可以移步这里https://mbd.pub/o/bread/ZJiXk59p
我推荐的这些书,都是自己拥有的,我也整理一些电子书版本的资源https://mbd.pub/o/bread/ZJmVl5tq。但依然建议大家购买纸质书,电子版的只能说是应急用的,反正pdd的东西也很便宜。
推荐这些书并不是代表每一本都得看完了。精看了其中几本,剩下的就是在数模比赛前期(一般一周)快速学习一下,大概有一个感觉。
其中建模的书可以从1 2 3 8 9 11 12 21当中选择,适用于美赛还是适用于国赛我想题主从作者国籍或者书名就可以看出来了。
尤其是系统动力学,这个方法在美赛ICM当中应用得最多。编程基础的书则有4 5 6 7 17 18当中选择,其中Matlab是必须掌握的语言。
R,SAS,SPSS这三个统计学语言三选一就足够了,建议选择前两个,第三个傻瓜操作。比赛的时候完全可以现学现卖
编程进阶的书则有14 15 16稍微了解一些智能算法有助于比赛的时候可以用得上一些高大上的算法。虽然前面的书都有涉及,但是不如这些讲得深刻。
写作的书主要是10 13 19 21
祝各位比赛顺利,如果有任何关于数学建模的问题可以b站私信我,我会尽力回答各位,也可付费咨询也可https://mbd.pub/o/bread/ZJiZl5lw,但我不会帮各位写作论文,更多的也是希望大家能够真实的建立抽象的数学建模思维(提升能力、帮忙准备的建议、和一些经验心得的分享),之后无论是论文写作还是工作都大有裨益。