一、题目要求
1790-1980年间美国每隔10年的人口数量记录如下表所示。
年份 | 1790 | 1800 | 1810 | 1820 | 1830 | 1840 | 1850 | 1860 | 1870 | 1880 | 1890 | 1900 | 1910 | 1920 | 1930 | 1940 | 1950 | 1960 | 1970 | 1980 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 3.9 | 5.3 | 7.2 | 9.6 | 12.9 | 17.1 | 23.2 | 31.4 | 38.6 | 50.2 | 62.9 | 76.0 | 92.0 | 106.5 | 123.2 | 131.7 | 150.7 | 179.3 | 204.0 | 226.5 |
- 1.试用以上数据建立马尔萨斯(Malthus)人口指数增长模型,对接下来的每隔十年预测五次人口数量,并查阅实际数据进行比对分析。
- 2.如果数据不相符,再对以上模型进行改进,寻找更为合适的模型进行预测,并对两次预测结果进行对比分析。
关于人口增长的模型常用的有马尔萨斯人口指数增长模型、Logistic增长模型以及改进的Logistic模型,它们常被用于预测人口增长。本次问题求解中除了使用这三种常用的人口增长模型外,还使用了BP神经网络模型来预测人口。
2.1 马尔萨斯(Malthus)人口指数增长模型
提出: 马尔萨斯模型来自于英国经济学家托马斯·罗伯特·马尔萨斯于1798年发表的《人口原理》。
马尔萨斯的人口论指出: 在没有生存资源限制的情况下,人口或生物种群的数量成指数增长。
定义: 关于人口或种群增长的模型。
模型的建立: 人口数量在单位时间内增长的百分比
r
r
r 是一定的,写成一个微分方程的形式,设
t
=
0
t = 0
t=0时刻的人口数量为
N
0
N_{0}
N0,则
t
t
t 时刻的总人口
N
t
N_{t}
Nt满足
1
N
t
d
N
t
d
t
=
r
⇒
N
t
=
N
0
e
r
t
\frac{1}{N_{t}}\frac{dN_{t}}{dt}=r\Rightarrow N_{t}=N_{0}e^{rt}
Nt1dtdNt=r⇒Nt=N0ert
马尔萨斯认为,如果人口长期不受控制的话,指数增长的速度会十分惊人,生存资源的增长速度将无法满足众多人口的生存需要,从而产生一系列人口问题,严重时甚至会爆发饥荒、战争和疾病来除去资源与环境无法承受的过剩人口。
2.2 逻辑斯蒂(Logistic)增长模型
马尔萨斯人口论自提出以来,就一直是一个备受争议的理论。例如:在受到资源环境限制的情况下,人口还能否做指数爆炸式的增长呢?假设资源环境能承受的人口数量为 K K K,则可以建立一个Logistic方程 1 N t d N t d t = r ( 1 − N t K ) \frac{1}{N_{t}}\frac{dN_{t}}{dt}=r\left (1-\frac{N_{t}}{K} \right ) Nt1dtdNt=r(1−KNt)
这个方程将得出仅在人口
N
t
<
<
K
N_{t}<<K
Nt<<K 时,
N
t
=
N
0
e
r
t
N_{t}=N_{0}e^{rt}
Nt=N0ert才是指数增长的。当接近
K
K
K时,人口的增长明显受到天花板
K
K
K的压制。虽然
N
t
>
K
N_{t}> K
Nt>K时确实会出现人口的负增长,但不过是平稳地趋近于平衡水平
K
K
K,而并不会发生马尔萨斯所担心的灾难性人口锐减的行为。下图给出了
K
K
K 随时间缓慢线性增加时,人口从不同的初条件以不同的生育率
r
r
r 增长的数值模拟结果。最终人口都达到了跟随
K
K
K(灰线)的线性增加行为。
那么是不是可以说由于生存资源
K
K
K 的算术级增长,人口实际上并不能长期持续地指数增长,而是也会适应
K
K
K 变为算术级增长,所以马尔萨斯其实在杞人忧天地担心一个伪命题?
逻辑斯蒂方程( Logistic Equation)为马尔萨斯( Malthus) 人口模型的推广。
2.3 改进的Logistic模型
虽然Logistic模型考虑了环境容纳量,认为增长率是随着人口的增加而递减的,但Logistic模型中的增长率是线性递减的。事实上,随着人口的增加,人口基数越来越大,出生率也是增大的,导致增长率的减小是逐渐缓慢的。因此,增长率的逐年递减是非线性的。所以需要对Logistic模型进行改进,使得增长率的变化是非线性的。
2.4 BP神经网络模型
BP(back propagation)神经网络是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是应用最广泛的神经网络。
BP神经网络是一种多层前馈神经网络,该网络的主要特点是:信号前向传播、误差反向传播。在前向传播中,输入信号从输入层经隐含层逐层处理,直至输出层,每一层的神经元状态只影响下一层神经元状态。如果输出层得不到期望输出,则转入反向传播,根据预测误差调整网络权值和阈值,从而使BP神经网络输出不断逼近期望输出。
BP可以用于数据预测,在已知过去和当前的数据下,可以对未来数据进行估计。
针对本次的题目使用了Malthus模型、Logistic模型、改进的Logistics模型、BP神经网络模型四种模型进行建模。
为了更清楚地反应各模型的预测准确度,令1790-2020年间预测人口数和实际人口数偏差之和为:
E
=
∑
t
=
0
24
∣
N
(
t
)
−
N
p
(
t
)
∣
E=\sum_{t=0}^{24} \left | N(t)-N_{p}(t) \right |
E=t=0∑24∣N(t)−Np(t)∣
其中, t = 0 , 1 , … , 24 t=0,1,…,24 t=0,1,…,24分别表示年份1790,1800,…,2020, N ( t ) N(t) N(t)和 N p ( t ) Np(t) Np(t)分别表示第 t t t个年份的实际人口和预测人口数量。
3.1 Malthus模型
-
模型的建立
在最简单的情况下,人口预测采用指数增长函数,建模的思路如下:假定 t 0 = 1790 t_{0}=1790 t0=1790年的人口数为 N 0 N_{0} N0,人口增长率 r r r为常数,则第 t t t年的人口为 N ( t ) N\left ( t \right ) N(t)。其数学模型为: { N ( t ) = N 0 e r ( t − t 0 ) = N 0 e r Δ t N ( 0 ) = N 0 \left\{\begin{matrix} N\left ( t \right )=N_{0}e^{r\left ( t-t_{0} \right )}=N_{0}e^{r\Delta t }\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & & & \end{matrix} \end{matrix}\right. {N(t)=N0er(t−t0)=N0erΔtN(0)=N0 -
模型的求解
使用MATLAB的cftool工具箱对数据进行拟合:
拟合得: r = 0.02222 r = 0.02222 r=0.02222
模型为: N ( t ) = 3.9 ∗ e x p ( 0.02222 ∗ ( t − 1790 ) ) N(t)= 3.9*exp(0.02222*(t-1790)) N(t)=3.9∗exp(0.02222∗(t−1790))
3.2 Logistic模型
-
模型的建立
马尔萨斯模型虽然在一定程度上反映了人口数量随着时间的推移的变化规律,但是根据马尔萨斯模型随着时间的推移人口成指数增长,这显然是不符合事实的。当人口数量较少时,自然资源比较丰富,人口增长相对较快,自然增长率可以在短期维持一个常数。但当人口达到一定水平后,受到自然资源相对稀缺的影响,人口增长率开始下降。设人口自然增长率 r ( t ) = r N ( t ) [ 1 − N ( t ) K ] r(t)=rN(t)\left [ 1-\frac{N(t)}{K} \right] r(t)=rN(t)[1−KN(t)],则其数学模型为: { d N ( t ) d t = r N ( t ) [ 1 − N ( t ) K ] N ( 0 ) = N 0 \left\{\begin{matrix} \frac{dN\left ( t \right )}{dt}=rN\left ( t \right )\left [ 1-\frac{N\left ( t \right )}{K} \right ]\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & \end{matrix} \end{matrix}\right. {dtdN(t)=rN(t)[1−KN(t)]N(0)=N0
其中,
K
K
K表示最大环境容纳量。
求解该微分方程模型可解得第
t
t
t年的人口数量为
N
(
t
)
=
K
1
+
(
K
N
0
−
1
)
e
−
r
(
t
−
t
0
)
N\left ( t \right )=\frac{K}{1+\left ( \frac{K}{N_{0}} -1\right )e^{-r(t-t_{0})}}
N(t)=1+(N0K−1)e−r(t−t0)K
-
模型的求解
使用MATLAB的cftool工具箱对数据进行拟合:
拟合得: k = 285.9 , r = 0.0287 k =285.9,r = 0.0287 k=285.9,r=0.0287
模型为: x ( t ) = 285.9 / ( 1 + ( 285.9 / 3.9 − 1 ) ∗ e x p ( − 0.0287 ∗ ( t − 1790 ) ) ) x(t) = 285.9/(1+(285.9/3.9-1)*exp(- 0.0287*(t-1790))) x(t)=285.9/(1+(285.9/3.9−1)∗exp(−0.0287∗(t−1790)))
3.3 改进的Logistic模型
-
模型的建立
虽然Logistic模型考虑了环境容纳量,认为增长率是随着人口的增加而递减的,但是Logistic模型中的增长率是线性递减的。事实上,随着人口的增加,人口基数越来越大,出生率也是增大的,导致增长率的减小是逐渐缓慢的。因此,增长率的逐年递减是非线性的。设人口自然增长率 r ( t ) = r N ( t ) [ 1 − l n N ( t ) l n K ] r(t)=rN(t)\left [ 1-\frac{lnN(t)}{lnK} \right] r(t)=rN(t)[1−lnKlnN(t)],则其数学模型为: { d N ( t ) d t = r N ( t ) [ 1 − l n N ( t ) l n K ] N ( 0 ) = N 0 \left\{\begin{matrix} \frac{dN\left ( t \right )}{dt}=rN\left ( t \right )\left [ 1-\frac{lnN(t)}{lnK} \right ]\\ N\left ( 0 \right )=N_{0}\begin{matrix} & & & & & & \end{matrix} \end{matrix}\right. {dtdN(t)=rN(t)[1−lnKlnN(t)]N(0)=N0
求解该微分方程模型可解得第 t t t年的人口数量为 N ( t ) = K [ ( N 0 K ) e − r ( t − t 0 ) l n K ] N(t)=K\left [ (\frac{N_{0}}{K})e^{\frac{-r(t-t_{0})}{lnK}} \right ] N(t)=K[(KN0)elnK−r(t−t0)]
-
模型的求解
使用MATLAB的cftool工具箱对数据进行拟合:
拟合参数得: k = 1084 , r = 0.04687 k =1084,r =0.04687 k=1084,r=0.04687
模型为: x ( t ) = 1084 ∗ ( ( 3.9 / 1084 ) x(t)= 1084*((3.9/1084) x(t)=1084∗((3.9/1084)^ e x p ( − 0.04687 ∗ ( t − 1790 ) / l o g ( 1084 ) ) ) exp(-0.04687*(t-1790)/log(1084))) exp(−0.04687∗(t−1790)/log(1084)))
3.4 BP神经网络模型
-
模型的建立
我们将BP神经网络模型用于对人口增长的预测,在建立的BP神经网络模型中,输入为年份 t t t,输出为年份对应的人口数量 N ( t ) N(t) N(t)。输入和输出神经元个数均为1,由于三层神经元网络可以实现对任意非线性问题的逼近,因此设隐藏层为1,神经元个数为2。BP神经网络结构图如下图所示: -
模型的求解
用1790-1980年间美国每隔10年的人口数量作为训练集,用1990-2030年间美国每隔10年的人口数量作为测试集,设训练次数为1000,训练目标最小误差为0.1,学习速率为0.01。代码如下:
%利用BP神经网络对人口进行预测
clear
clc
%%% 读取原始数据
num=xlsread('E:\MATLAB\R2012a\bin\数学建模\1790-1980间美国人口数据.xlsx'); %num返回的是excel中的数据
year=num(1,:);
population=num(2,:);
%%% 利用已知数据训练BP网络
x=year;
y=population;
net=newff(x,y,2); %生成输入、输出均为一个神经元,隐含层2个神经元的BP网络
net.trainParam.epochs = 1000; % 训练次数,这里设置为1000次(训练的最大次数)
net.trainParam.goal = 0.1; % 训练目标最小误差,这里设置为0.1
net.trainParam.lr = 0.01; % 学习速率,这里设置为0.01
net=train(net,x,y); %训练网络
%%% 预测1790-1980间人口数量
population_pre=sim(net,year);
plot(year,population,'*b','MarkerSize',8);hold on
plot(year,population_pre,'or','MarkerSize',8);hold on
plot(year,population,'b','LineWidth',2);hold on
plot(year,population_pre,'r','LineWidth',2);grid on
legend('人口自然增长','拟合曲线')
xlabel('年份')
ylabel('人口/百万')
title('利用BP神经网络进行人口预测')
%%% 预测1980-2030间人口数量
Year_pre=1790:10:2030;
Population_pre_BP=sim(net,Year_pre);% 在m文件中向Simulink模型传递参数,并运行模型,得到模型运行的结果数据
POPUS=[population,250.181,282.413,310.483,326.767];
errors=sum(abs(Population_pre_BP(1:end-1)-POPUS));
fprintf('总误差:%f\n',errors)
save Population_pre_BP Population_pre_BP
四、人口数量的预测及分析
用1790-1980年间美国每隔10年的人口数量作为训练集去拟合模型,用拟合好的模型去预测1990-2030年间美国每隔10年的人口数量,并计算每个模型所预测的1790-2030年间美国每隔10年的人口数量与真实值之间的误差和 E E E。
年份 | 1990 | 2000 | 2010 | 2020 | 2030 |
---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 250.181 | 282.413 | 310.483 | 326.767 | —— |
- Malthus模型
年份 | 1990 | 2000 | 2010 | 2020 | 2030 |
---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 331.9474 | 414.5429 | 517.6900 | 646.5022 | 807.3656 |
经过预测后计算可得, Malthus模型预测的总误差为1070.944344(百万)。
- Logistic模型
年份 | 1990 | 2000 | 2010 | 2020 | 2030 |
---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 231.9765 | 243.4314 | 252.8001 | 260.3193 | 266.2630 |
经过预测后计算可得, Logistic模型预测的总误差为265.616329(百万)。
- 改进的Logistic模型
年份 | 1990 | 2000 | 2010 | 2020 | 2030 |
---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 248.8625 | 273.7884 | 299.3514 | 325.4116 | 351.8302 |
经过预测后计算可得, 改进的Logistic模型预测的总误差为67.551021(百万)。
- BP神经网络模型
年份 | 1990 | 2000 | 2010 | 2020 | 2030 |
---|---|---|---|---|---|
人口 ( × 1 0 6 ) \left (\times 10^{6} \right ) (×106) | 252.1015 | 277.7805 | 303.0367 | 327.2741 | 349.9891 |
经过预测后计算可得, BP神经网络模型预测的总误差为54.471387(百万)。
- 四种模型预测结果对比
四种模型对1990-2030年的美国人口进行预测的结果进行对比如上表所示,可以看出Malthus模型、Logistic模型、改进的Logistic模型、BP神经网络模型四种模型中Malthus模型的误差是最大的,而BP神经网络模型的误差是最小的,可以说明对这一时期的美国人口而言,BP神经网络模型的效果是比较好的。