system: [SYSTEM]

user: 2. 相关工作 2.1. 灰色GM(1，1)预测模型 灰色系统理论是由我国邓聚龙教授于20世纪80世纪初提出，已广泛应用于社会、经济、科技、农业、生态、生物等各个领域 [ 3 ]。其中GM(1，1)模型是灰色系统理论的核心模型。该模型是由一个变量的一阶微分方程构成。 设原始序列为 x ( 0 ) = { x ( 0 ) ( 1 ) ， x ( 0 ) ( 2 ) ， ⋯ ， x ( 0 ) ( n ) } ，并且序列中的任何一项均不为负数。其中 ∀ x ( 0 ) ( k ) ∈ x ( 0 ) ， k = 1 ， 2 ， ⋯ ， n 。 对原始序列进行级比计算： σ ( k ) = x ( k − 1 ) x ( k ) ， x ( k ) ， x ( k − 1 ) ∈ x (2.1) 进而得到级比序列 σ = ( σ ( 2 ) ， σ ( 3 ) ， ⋯ ， σ (n) ) 计算级比检验区间 σ ( 0 ) ( k ) ： σ ( 0 ) ( k ) ∈ ( e − 2 n + 1 ， e 2 n + 1 ) (2.2) 判断级比是否落入检验区间，如果未落入，则对原始序列进行相应的数据变换，常见的变换方式：对数变换，方根变换和平移变换。对变换后的数据序列进行一次累加生成(AGO)，即将同一序列中数据逐次相加以生成新的数据。 即 x ( 1 ) = ( x ( 1 ) ( 1 ) ， x ( 1 ) ( 2 ) ， ⋯ ， x ( 1 ) ( n ) ) ，其中： x ( 1 ) ( k ) = ∑ i = 1 k X ( 0 ) ( i ) ， k = 1 ， 2 ， ⋯ ， n (2.3) GM(1，1)的一阶线性微分方程为： d x d t + a x = b (2.4) 其中a为发展系数，a的大小和符号反应了 x ( 0 ) 和 x ( 1 ) 的发展态势，b为灰作用量。a和b可以通过最小二乘法求得。 u = [ a ， b ] T = ( B T B ) − 1 B T Y (2.5) Y为数据向量： Y = ( X ( 0 ) ( 2 ) ， X ( 0 ) ( 3 ) ， ⋯ ， X ( 0 ) ( n ) ) (2.6) B为构造矩阵，形式如下： B = [ − z ( 1 ) ( 2 ) 1 − z ( 1 ) ( 3 ) 1 ⋮ ⋮ − z ( 1 ) ( n ) 1 ] = [ − 1 2 [ x ( 1 ) ( 1 ) + x ( 1 ) ( 2 ) ] 1 − 1 2 [ x ( 1 ) ( 2 ) + x ( 1 ) ( 3 ) ] 1 ⋮ ⋮ − 1 2 [ x ( 1 ) ( n − 1 ) + x ( 1 ) ( n ) ] 1 ] (2.7) 于是得到预测模型： x ⌢ ( 1 ) ( k + 1 ) = ( x ( 0 ) ( 1 ) − b a ) e − a b + b a (2.8) 通过递减得到GM(1，1)预测模型的还原值： x ⌢ ( 0 ) ( k + 1 ) = x ⌢ ( 1 ) ( k + 1 ) − x ⌢ ( 1 ) ( k ) (2.9) 2.2. 灰色马尔科夫模型 马尔科夫链是由俄国数学家马尔科夫提出，是一种时间离散状态的马尔科夫过程。未来状态的发生概率仅和当前系统状态有关，与系统过去状态无关。马尔科夫过程是根据现在的状态和状态转移概率，预测未来可能出现的状态 [ 4 ]。 2.2.1. 状态区间的划分 通过GM(1，1)预测模型，计算真实值和预测值之间的相对误差，通过相对误差的范围进行状态区间的划分。状态区间为： E i = [ L i ， H i ] 其中 H i ， L i 分别为状态区间的上下限 [ 5 ]。 2.2.2. 状态转移概率矩阵 设序列 x t 在时间t的状态为 E i 的概率为 p ( x t = i ) ，若序列 x t 从 E i 状态转移到下一个时间状态 E j 的概率为 p i j ，则 p i j = p ( x t + 1 = j | x t = i ) 为从时刻t处于i状态到下一个时刻 t + 1 转移到j状态的概率。满足此条件的时间序列为马尔科夫链。 p i j 为在t时刻的一步转移条件概率 [ 6 ]。 由概率组成的矩阵称为概率矩阵。状态 E i 转移到状态 E j 的次数为 n i j ，状态 E i 的总次数为 N i ，状态 E i 到状态 E j 的概率为 p i j 。 p i j = n i j N i ， 0 < p i j < 1 ， ∑ i = 1 k P i j = 1 ， ( j = 1 ， 2 ， ⋯ ， n ) k步转移概率为： p i j ( k ) ( n ) = p { x t + k = j | x t = i } 所以k步转移概率矩阵为k步转移概率组成的矩阵。形式如下： p ( k ) = [ p 11 ( k ) p 12 ( k ) ⋯ p 1 n ( k ) p 21 ( k ) p 22 ( k ) ⋯ p 2 n ( k ) ⋮ ⋮ ⋱ ⋮ p n 1 ( k ) p n 2 ( k ) ⋯ p m n ( k ) ] 矩阵具有如下两个性质： ① 非负性： p i j ( k ) ≥ 0 ，   i ， j = 1 ， 2 ， ⋯ ， n ； ② 行元素和为1，即 ∑ j = 1 n p i j ( k ) = 1 ，   i = 1 ， 2 ， ⋯ ， n 。 根据当前时刻所处的转态，利用一步转移概率矩阵对下一时刻进行预测。 P i j = max { P i 1 ， P i 2 ， ⋯ ， P i k } 当前时刻t的状态为 E i ，则 t + 1 时刻转移到状态 E j ，状态j出现的概率最大，则为下一时刻的预测结果 [ 7 ]。 2.2.3. 计算灰色马尔科夫预测值 y = x ⌢ ( 0 ) ∗ ( 1 − 0.5 ( L i + H i ) ) (2.10) 2.3. 粒子群算法对灰色马尔科夫预测模型的优化 2.3.1. 粒子群算法 粒子群算法(Particle Swarm Optimization， PSO)是一种仿生物集群进化算法，PSO由美国科学家James Kennedy和Russell Eberhart于上世纪90年代提出 [ 8 ]。 PSO算法首先初始化一群随机粒子，通过对局部最优解和全局最优解的不停迭代以得到最终结果。在迭代的过程中，粒子通过参考个体极值(pbest)和全局极值(gbest)来更新自己。粒子没有质量和体积，但是有自己的位置和速度，粒子的速度代表飞行的方向和距离，位置代表空间中的一个点。在一个D维搜索空间，N个随机粒子的群体中，第i个粒子的空间位置为 x i = ( x i 1 ， x i 2 ， ⋯ ， x i D ) ， i = 1 ， 2 ， 3 ， ⋯ ， N ，速度为 v i = ( v i 1 ， v i 2 ， ⋯ ， v i D ) 。在粒子探索的过程中，个体极值(pbest)为粒子个体本身所达到的最优值即局部极值用 p b e s t i = ( p b e s t i 1 ， p b e s t i 2 ， ⋯ ， p b e s t i D ) 表示，全局极值(gbest)为粒子在整个种群中所能达到的最优值用 p b e s t i = ( g b e s t i 1 ， g b e s t i 2 ， ⋯ ， g b e s t i D ) 表示。粒子根据个体极值和全局极值，按照以下两个公式不断更新自身的速度和位置 [ 9 ] [ 10 ]。 v i d k + 1 = w k ∗ v i d k + c 1 r 1 ( p b e s t i d k − x i d k ) + c 2 r 2 ( g b e s t i d k − x i d k ) (2.11) x i d k + 1 = v i d k + 1 + x i d k + 1 (2.12) 其中 r 1 和 r 2 为随机数，取值范围为[0， 1]， c 1 和 c 2 为学习因子，通常 c 1 = c 2 = 2 ， c 1 ， c 2 的作用是提高算法的收敛速度。 c 1 代表飞行过程中自身影响。 c 2 代表飞行过程中全局影响。 p b e s t i d 代表粒子个体极值在d维分量所经历的最好位置， g b e s t i d 代表粒子全局极值在d维分量所经历的最好位置， x i d 为粒子所在位置的第d维分量， v i d 为粒子速度的d维分量。w为惯性权重，上一速度对当前速度的影响。w过大，算法的全局搜索比较好，w过小，局部搜索能力加强。 2.3.2. 粒子群算法实现的步骤 [ 11 ] 步骤① 设定粒子数目，并进行初始化，随机生成初始速度。 步骤② 每个粒子的速度和位置都是在持续更新，在当前时刻具有最新的位置，计算粒子的目标函数fitness。 步骤③ 计算粒子的适应值，如果优于原有的个体极值，则用当前适应值替换原有的个体极值。 步骤④ 根据粒子的个体极值寻找全局极值。 步骤⑤ 根据式(2.11)改变粒子速度，每个粒子都不可以超过最大速度，如果超过，则该粒子的速度会被设定为最大速度。 步骤⑥ 根据式(2.12)更新粒子的位置。 PSO算法流程图见图1所示： 图1. PSO算法流程图 2.4. 模型检验 模型对于预测的效果，需要根据模型的评定指标进行检验，我们这里采用2个误差标准作为模型的评定指标。 ① 平均绝对误差 MAE = 1 n ∑ i = 1 n | e ( i ) | 其值越小越好，反映了模型预测值和原始值的平均偏离程度。 ② 平均绝对百分误差 MAEP = 1 n ∑ i = 1 n | e ( i ) | x ( 0 ) ( i ) ∗ 100 % 其值越小越好，反映了不同模型对相同数据拟合好坏的比较。 e ( i ) 为误差，即预测值和原始值的误差。 x ( 0 ) ( i ) 为原始值。