灰色预测 GM(1,1) 模型及Python、R语言实现

GM(1,1)模型

1 GM(1,1)模型概述

灰色预测经常用来解决数据量较少且不能直接发现规律的数据。对于包含不确定信息的序列,灰色预测方法通过对原始数据进行处理,使之转化为灰色序列,并建立微分方程模型模型

GM(1,1)模型是灰色预测理论的基本模型,也是灰色系统理论中运用最广泛的一种动态预测模型,模型由一个单变量的一阶微分方程构成。GM(1,1)模型适合对“少数据,贫信息”的对象进行中短期预测

在这里插入图片描述

2 GM(1,1)数据处理方法

在灰色系统中,能获得的信息非常有限,且不易发现内部规律,因此我们需要一些处理,减弱序列的随机性,使得一般规律可以显现。处理方式主要有以下三种:累加生成、累减生成和加权邻值生成

3 GM(1,1)模型方法的可行性检验

(1)级比检验

由原始序列
X ( 0 ) = ( x ( 0 ) ( 1 ) , x 0 ( 2 ) , . . . , x 0 ( n ) ) X^{\left( 0 \right)}=\left( x^{\left( 0 \right)}\left( 1 \right) ,x^0\left( 2 \right) ,...,x^0\left( n \right) \right) X(0)=(x(0)(1),x0(2),...,x0(n))

λ ( k ) \lambda \left( k \right) λ(k) 为序列 X ( 0 ) X^{\left( 0 \right)} X(0) 的级比

λ ( k ) = x ( 0 ) ( k − 1 ) x ( 0 ) ( k ) , k = 2 , 3 , ⋯   , n \lambda \left( k \right) =\frac{x^{\left( 0 \right)}\left( k-1 \right)}{x^{\left( 0 \right)}\left( k \right)}\text{,}k=2,3,\cdots ,n λ(k)=x(0)(k)x(0)(k1)k=2,3,,n若满足:

λ ( k ) ∈ ( e − 2 n + 1 , e 2 n + 1 ) \lambda \left( k \right) \in \left( e^{\frac{-2}{\text{n}+1}},e^{\frac{2}{n+1}} \right) λ(k)(en+12,en+12)
其中 n 为原始序列的数据个数,则 X ( 0 ) X^{\left( 0 \right)} X(0) 可建立GM(1,1) 模型,并进行灰色预测。

否则,需对数据进行处理,使其落在有效范围内,如平移变换:

y ( 0 ) ( k ) = x ( 0 ) ( k ) + c , k = 1 , 2 , ⋯   , n y^{\left( 0 \right)}\left( k \right) =x^{\left( 0 \right)}\left( k \right) +c\text{,}k=1,2,\cdots ,n y(0)(k)=x(0)(k)+ck=1,2,,n


(2)光滑度检验

设数据序列 { x ( 0 ) ( k ) , k = 1 , 2 , ⋯   , n } \left\{ x^{\left( 0 \right)}\left( k \right) \text{,}k=1,2,\cdots ,n \right\} {x(0)(k)k=1,2,,n} 为非负数据序列,则该数据序列为光滑离散序列的充要条件为 p ( k ) p(k) p(k) k k k 的递减函数,即
p ( k ) = x ( 0 ) ( k ) x ( 1 ) ( k − 1 ) , k = 2 , 3 , ⋯   , n p\left( k \right) =\frac{x^{\left( 0 \right)}\left( k \right)}{x^{\left( 1 \right)}\left( k-1 \right)}\text{,}k=2,3,\cdots ,n p(k)=x(1)(k1)x(0)(k)k=2,3,,n
只有原始数据序列满足了这一条件才可以用于建模预测。

4 GM(1,1)预测模型的构建

设原始序列 X ( 0 ) = ( x ( 0 ) ( 1 ) , x 0 ( 2 ) , . . . , x 0 ( n ) ) X^{\left( 0 \right)}=\left( x^{\left( 0 \right)}\left( 1 \right) ,x^0\left( 2 \right) ,...,x^0\left( n \right) \right) X(0)=(x(0)(1),x0(2),...,x0(n))满足上述条件,其中 x ( 0 ) ( k ) ≥ 0 x^{\left( 0 \right)}\left( k \right) \ge 0 x(0)(k)0

(1)序列的累加处理
将原始序列进行一次累加生成后处理后,生成 X ( 0 ) X^{\left( 0 \right)} X(0)的1-AGO 序列 (累加生成序列):
X ( 1 ) = ( x ( 1 ) ( 1 ) , x ( 1 ) ( 2 ) , . . . , x ( 1 ) ( n ) ) X^{\left( 1 \right)}=\left( x^{\left( 1 \right)}\left( 1 \right) ,x^{\left( 1 \right)}\left( 2 \right) ,...,x^{\left( 1 \right)}\left( n \right) \right) X(1)=(x(1)(1),x(1)(2),...,x(1)(n))
其中
x ( 1 ) ( k ) = ∑ i = 1 k x ( 0 ) ( i )      k = 1 , 2 , . . . . . . , n x^{\left( 1 \right)}\left( k \right) =\sum\limits_{i=1}^k{x^{\left( 0 \right)}\left( i \right)}\ \ \ \ k=1,2,......,n x(1)(k)=i=1kx(0)(i)    k=1,2,......,n

(2)计算紧邻均值序列 Z ( 1 ) = ( z ( 1 ) ( 2 ) , z ( 1 ) ( 3 ) , . . . , z ( 1 ) ( n ) ) Z^{\left( 1 \right)}=\left( z^{\left( 1 \right)}\left( 2 \right) ,z^{\left( 1 \right)}\left( 3 \right) ,...,z^{\left( 1 \right)}\left( n \right) \right) Z(1)=(z(1)(2),z(1)(3),...,z(1)(n))
其中 z ( 1 ) ( k ) = 1 2 ( x ( 1 ) ( k ) + x ( 1 ) ( k − 1 ) ) z^{\left( 1 \right)}\left( k \right) =\frac{1}{2}\left( x^{\left( 1 \right)}\left( k \right) +x^{\left( 1 \right)}\left( k-1 \right) \right) z(1)(k)=21(x(1)(k)+x(1)(k1))

(3)建立相关模型
建立一阶微分线性方程,即灰色微分方程,得到 GM(1,1)模型的均值形式: x ( 0 ) ( k ) + a z ( 1 ) ( k ) = b x^{\left( 0 \right)}\left( k \right) +az^{\left( 1 \right)}\left( k \right) =b x(0)(k)+az(1)(k)=b

通过 GM(1,1) 模型相应的白化微分方程:
dx ( 1 ) d t + a x ( 1 ) = b \frac{\text{dx}^{\left( 1 \right)}}{dt}+ax^{\left( 1 \right)}=b dtdx(1)+ax(1)=b

其中 a 表示发展系数,反映了 x ^ ( 1 ) \hat{x}^{\left( 1 \right)} x^(1) x ^ ( 0 ) \hat{x}^{\left( 0 \right)} x^(0) 的发展态势; b 表示灰色作用量,或者内生控制灰数,是从行为序列中挖掘出来的数据,反映的是数据变化的关系,其确切内涵是灰的。

(4)计算 a、b

a ^ \hat{a} a^ 为待估参数向量,令 a ^ = [ a b ] \hat{a}=\left[ \begin{array}{c} \text{a}\\ b\\ \end{array} \right] a^=[ab],利用最小二乘法求解,可得:
a ^ = ( B T B ) − 1 B T Y \hat{a}=\left( B^TB \right) ^{-1}B^TY a^=(BTB)1BTY
其中B、Y 分别为
B = [ − z ( 1 ) ( 2 ) 1 − z ( 1 ) ( 3 ) 1 ⋮ ⋮ − z ( 1 ) ( n ) 1 ] ,Y = [ x ( 0 ) ( 2 ) x ( 0 ) ( 3 ) ⋮ x ( 0 ) ( n ) ] \text{B}=\left[ \begin{matrix} -z^{\left( 1 \right)}\left( 2 \right)& 1\\ -z^{\left( 1 \right)}\left( 3 \right)& 1\\ \vdots& \vdots\\ -z^{\left( 1 \right)}\left( n \right)& 1\\ \end{matrix} \right] \text{,Y}=\left[ \begin{array}{c} x^{\left( 0 \right)}\left( 2 \right)\\ x^{\left( 0 \right)}\left( 3 \right)\\ \vdots\\ x^{\left( 0 \right)}\left( \text{n} \right)\\ \end{array} \right] B=z(1)(2)z(1)(3)z(1)(n)111Y=x(0)(2)x(0)(3)x(0)(n)

GM(1,1)模型中的参数 − a -a a 为发展系数, b b b 为灰色作用量。

− a -a a 反应了 X ( 1 ) X^{(1)} X(1) 及原始序列 X ( 0 ) X^{(0)} X(0) 的发展趋势。

作用量在物理学中是一个比较抽象的概念,它表示一个动力系统内在的演化趋势。

对原始数据序列进行计算求出的GM(1,1)模型中的 b b b ,反应了原始数据的变化规律。

(5)建立 GM(1,1) 的时间响应式,即预测模型
{ x ^ ( 1 ) ( k + 1 ) = ( x ( 0 ) ( 1 ) − b a ) e − a k + b a , k = 1 , 2 ⋯   , n x ^ ( 0 ) ( k + 1 ) = x ^ ( 1 ) ( k + 1 ) − x ^ ( 1 ) ( k ) \left\{ \begin{array}{l} \hat{x}^{\left( 1 \right)}\left( k+1 \right) =\left( x^{\left( 0 \right)}\left( 1 \right) -\frac{b}{a} \right) e^{-ak}+\frac{b}{a},\text{k}=1,2\cdots ,\text{n}\\ \\ \hat{x}^{\left( 0 \right)}\left( k+1 \right) =\hat{x}^{\left( 1 \right)}\left( k+1 \right) -\hat{x}^{\left( 1 \right)}\left( k \right)\\ \end{array} \right. x^(1)(k+1)=(x(0)(1)ab)eak+ab,k=1,2,nx^(0)(k+1)=x^(1)(k+1)x^(1)(k)

5 GM(1,1) 模型的检验

检验灰色预测模型效果主要包括三种方法:残差检验、关联度检验和后验差检验方法,以此来检验模型的准确性。

(1) 残差检验

按预测模型计算 x ^ ( 1 ) ( k ) \hat{x}^{\left( 1 \right)}\left( k \right) x^(1)(k),并将 x ^ ( 1 ) ( i ) \hat{x}^{\left( 1 \right)}\left( i \right) x^(1)(i)累减生成 x ^ ( 0 ) ( k ) \hat{x}^{\left( 0 \right)}\left( k \right) x^(0)(k),然后计算原始序列 x ( 0 ) ( k ) x^{\left( 0 \right)}\left( k \right) x(0)(k) x ^ ( 0 ) ( k ) \hat{x}^{\left( 0 \right)}\left( k \right) x^(0)(k)的绝对误差序列即相对误差序列。

{ 残差: ε ( k ) = x ( 0 ) ( k ) − x ^ ( 0 ) ( k ) 相对误差: Δ k = ∣ ε ( k ) ∣ x ( 0 ) ( k ) 平均相对误差: Δ = 1 n − 1 ∑ k = 2 n Δ k \left\{ \begin{array}{l} \text{残差:}\varepsilon \left( k \right) =x^{\left( 0 \right)}\left( k \right) -\hat{x}^{\left( 0 \right)}\left( k \right)\\ \\ \text{相对误差:}\Delta _k=\frac{\left| \varepsilon \left( k \right) \right|}{x^{\left( 0 \right)}\left( k \right)}\\ \\ \text{平均相对误差:}\Delta =\frac{1}{n-1}\sum\limits_{k=2}^n{\Delta _k}\\ \end{array} \right. 残差:ε(k)=x(0)(k)x^(0)(k)相对误差:Δk=x(0)(k)ε(k)平均相对误差:Δ=n11k=2nΔk

若对相应序列残差有 Δ k < 10 % \Delta _k<10\% Δk<10% ,则代表用 GM(1,1) 模型的模拟精度较高,若 Δ k < 20 % \Delta _k<20\% Δk<20% 则代表用 GM(1,1) 模型的模拟精度一般。

GM(1,1) 模型建模精度:
p = ( 1 − Δ ) × 100 % p=\left( 1-\varDelta \right) \times 100\% p=(1Δ)×100%

(2)关联度检验法

绝对误差:
Δ ( 0 ) ( k ) = ∣ x ( 0 ) ( k ) − x ^ ( 0 ) ( k ) ∣ \varDelta ^{\left( 0 \right)}\left( k \right) =\left| x^{\left( 0 \right)}\left( k \right) -\hat{x}^{\left( 0 \right)}\left( k \right) \right| Δ(0)(k)=x(0)(k)x^(0)(k)

得出最大值、最小值

{ Δ max ⁡ ( 0 ) = max ⁡ Δ ( 0 ) ( k ) Δ min ⁡ ( 0 ) = min ⁡ Δ ( 0 ) ( k ) \left\{ \begin{array}{l} \varDelta _{\max}^{\left( 0 \right)}=\max \varDelta ^{\left( 0 \right)}\left( k \right)\\ \\ \varDelta _{\min}^{\left( 0 \right)}=\min \varDelta ^{\left( 0 \right)}\left( k \right)\\ \end{array} \right. Δmax(0)=maxΔ(0)(k)Δmin(0)=minΔ(0)(k)
计算关联系数
η ( k ) = Δ max ⁡ ( 0 ) + ρ Δ min ⁡ ( 0 ) Δ ( 0 ) ( k ) + ρ Δ max ⁡ ( 0 ) , ρ = 0.5 , k = 1 , 2 , ⋯   , n \eta \left( k \right) =\frac{\varDelta ^{\left( 0 \right)}_{\max}+\rho \varDelta ^{\left( 0 \right)}_{\min}}{\varDelta ^{\left( 0 \right)}\left( k \right) +\rho \varDelta ^{\left( 0 \right)}_{\max}}\text{,}\rho =0.5\text{,}k=1,2,\cdots ,n η(k)=Δ(0)(k)+ρΔmax(0)Δmax(0)+ρΔmin(0)ρ=0.5k=1,2,,n
得出关联度
r = 1 n ∑ k = 1 n η ( k ) r=\frac{1}{n}\sum_{k=1}^n{\eta \left( k \right)} r=n1k=1nη(k)
根据经验,当 p =0.5 时,关联度 r >0.6 时可认为模型的预测效果较好。

(3)后验差检验
原始序列的均值
x ˉ ( 0 ) = 1 n ∑ k = 1 n x ( 0 ) ( k ) \bar{x}^{\left( 0 \right)}=\frac{1}{n}\sum_{k=1}^n{x^{\left( 0 \right)}\left( k \right)} xˉ(0)=n1k=1nx(0)(k)

计算的原始序列的标准差:
S 1 = ∑ [ x ( 0 ) ( k ) − x ˉ ( 0 ) ] 2 n − 1 S_1=\sqrt{\frac{\sum{\left[ x^{\left( 0 \right)}\left( k \right) -\bar{x}^{\left( 0 \right)} \right]}^2}{n-1}} S1=n1[x(0)(k)xˉ(0)]2

残差序列的均值:
Δ ( 0 ) = 1 n ∑ k = 1 n [ x ( 0 ) ( k ) − x ^ ( 0 ) ( k ) ] \varDelta ^{\left( 0 \right)}=\frac{1}{n}\sum_{k=1}^n{\left[ x^{\left( 0 \right)}\left( k \right) -\hat{x}^{\left( 0 \right)}\left( k \right) \right]} Δ(0)=n1k=1n[x(0)(k)x^(0)(k)]
计算绝对误差序列的标准差:
S 2 = ∑ [ Δ ( 0 ) ( k ) − Δ ( 0 ) ] 2 n − 1 S_2=\sqrt{\frac{\sum{\left[ \Delta ^{\left( 0 \right)}\left( k \right) -\Delta ^{\left( 0 \right)} \right]}^2}{n-1}} S2=n1[Δ(0)(k)Δ(0)]2
计算后验差比值为::
C = S 2 S 1 C=\frac{S_2}{S_1} C=S1S2
计算小误差概率:
P = p { ∣ Δ ( 0 ) ( k ) − Δ ( 0 ) ∣ < 0.6745 S 1 } P=p\left\{ \left| \Delta ^{\left( 0 \right)}\left( k \right) -\Delta ^{\left( 0 \right)} \right|<0.6745S_1 \right\} P=p{Δ(0)(k)Δ(0)<0.6745S1}

GM(1,1) 通常用后验差检验方法来评价预测结果的好坏,主要根据其中的后验差比值(C)和小误差概率(P)这两个数值来检验模型。根据 C 和 P 的大小可以将灰色模型的预测精度分为以下几个等级,如下表

后验差比值 C小误差概率 P预测精度等级
<0.35>0.95好(一级)
<0.50>0.80合格(二级)
<0.65>0.70勉强合格(三级)
>=0.65<=0.65不合格 (四级)

6 GM(1,1) 模型的适用范围

建立于灰色理论基础上的GM(1,1)模型具有所需样本量小,无需考虑数据分布规律,模型预测精度较高,且易于计算检验,决定了GM(1,1)模型被广泛的应用于经济生活各个领域。但这并非说明GM(1,1)模型应用具有随意性与其他任何数学模型相同GM(1,1)模型也有其适用范围,若超出其适用范围使用GM(1,1)模型往往很难得到满意的的结果。

GM(1,1)模型的参数与GM(1,1)模型适用性之间的关系得到如下结论

(1)当 -a ≤ 0.3时,GM(1,1)模型可用于中长期预测;

(2)当 0.3 < -a ≤ 0.5时,GM(1,1)模型可用于短期预测,中长期预测需谨慎;

(3)当 0.5 < -a ≤ 0.8时,用GM(1,1)模型作短期预测慎用;

(4)当 0.8 < -a ≤ 1.0时,需采用残差修正GM(1,1)模型;

(5)当 1 < -a 时,不宜使用GM(1,1)模型。

也即

模型预测时长判断标准
在这里插入图片描述

7 GM(1,1) 残差模型

当原始数据序列 x ( 0 ) ( k ) x^{\left( 0 \right)}\left( k \right) x(0)(k)建立的GM(1,1)模型检验不合格时,可以用GM(1,1)残差模型来修正。如果原始序列建立的GM(1,1)模型不够精确,也可以用GM(1,1)残差模型来提高精度。

若用原始序列 x ( 0 ) ( k ) x^{\left( 0 \right)}\left( k \right) x(0)(k) 建立的GM(1,1)模型

x ^ ( 1 ) ( k + 1 ) = ( x ( 0 ) ( 1 ) − b a ) e − a k + b a , k = 1 , 2 ⋯   , n \hat{x}^{\left( 1 \right)}\left( k+1 \right) =\left( x^{\left( 0 \right)}\left( 1 \right) -\frac{b}{a} \right) e^{-ak}+\frac{b}{a},\text{k}=1,2\cdots ,\text{n} x^(1)(k+1)=(x(0)(1)ab)eak+ab,k=1,2,n

可获得生成序列 x ( 1 ) ( k ) x^{\left( 1 \right)}\left( k \right) x(1)(k)的预测值,定义残差序列 e ( 0 ) ( k ) = x ( 1 ) ( k ) − x ^ ( 1 ) ( k ) e^{\left( 0 \right)}\left( k \right) =x^{\left( 1 \right)}\left( k \right) -\hat{x}^{\left( 1 \right)}\left( k \right) e(0)(k)=x(1)(k)x^(1)(k)。则对应的残差序列为: e ( 0 ) ( k ) = { e ( 0 ) ( 1 ) , e ( 0 ) ( 2 ) , ⋯   , e ( 0 ) ( n ) } e^{\left( 0 \right)}\left( k \right) =\left\{ e^{\left( 0 \right)}\left( 1 \right) ,e^{\left( 0 \right)}\left( 2 \right) ,\cdots ,e^{\left( 0 \right)}\left( n \right) \right\} e(0)(k)={e(0)(1),e(0)(2),,e(0)(n)}

计算其生成序列 e ( 1 ) ( k ) e^{\left( 1 \right)}\left( k \right) e(1)(k),并据此建立相应的GM(1,1)模型:

e ^ ( 1 ) ( k + 1 ) = ( e ( 0 ) ( 1 ) − b e a e ) e − a k + b e a e , k = 1 , 2 ⋯   , n \hat{e}^{\left( 1 \right)}\left( k+1 \right) =\left( e^{\left( 0 \right)}\left( 1 \right) -\frac{b_e}{a_e} \right) e^{-ak}+\frac{b_e}{a_e},\text{k}=1,2\cdots ,\text{n} e^(1)(k+1)=(e(0)(1)aebe)eak+aebe,k=1,2,n
得修正模型
x ^ ( 1 ) ( k + 1 ) = ( x ( 0 ) ( 1 ) − b a ) e − a k + b a + δ ( k − i ) ( − a e ) [ e ( 0 ) ( 1 ) − b e a e ] e − a k \hat{x}^{\left( 1 \right)}\left( k+1 \right) =\left( x^{\left( 0 \right)}\left( 1 \right) -\frac{b}{a} \right) e^{-ak}+\frac{b}{a}+\delta \left( k-i \right) \left( -a_e \right) \left[ e^{\left( 0 \right)}\left( 1 \right) -\frac{b_e}{a_e} \right] e^{-ak} x^(1)(k+1)=(x(0)(1)ab)eak+ab+δ(ki)(ae)[e(0)(1)aebe]eak
其中
δ ( k − i ) = { 1 , k ≥ i 0 , k < i \delta \left( k-i \right) =\left\{ \begin{array}{l} 1\text{,}k\ge i\\ 0\text{,}k<i\\ \end{array} \right. δ(ki)={1ki0k<i

为修正系数。

应用此模型时要考虑:

(1)一般不是使用全部残差数据来建立模型,而只是利用了部分残差。

(2)修正模型所代表的是差分微分方程,其修正作用与 δ ( k − i ) \delta \left( k-i \right) δ(ki) 中的 i 的取值有关。

R语言实现

灰色系统模型GM(1,1)的R语言实现

灰色预测GM11,R语言源程序

python

'''灰色预测函数'''
def GM11(x0): #自定义灰色预测函数
    import numpy as np
    x1 = x0.cumsum() # 生成累加序列
    z1 = (x1[:len(x1)-1] + x1[1:])/2.0 # 生成紧邻均值(MEAN)序列,比直接使用累加序列好,共 n-1 个值
    z1 = z1.reshape((len(z1),1))
    B = np.append(-z1, np.ones_like(z1), axis = 1)    # 生成 B 矩阵
    Y = x0[1:].reshape((len(x0)-1, 1))    # Y 矩阵
    [[a],[u]] = np.dot(np.dot(np.linalg.inv(np.dot(B.T, B)), B.T), Y)    #计算参数
    f = lambda k: (x0[0]-u/a)*np.exp(-a*(k-1))-(x0[0]-u/a)*np.exp(-a*(k-2))    #还原值
    delta = np.abs(x0 - np.array([f(i) for i in range(1,len(x0)+1)]))    # 计算残差
    C = delta.std()/x0.std()
    P = 1.0*(np.abs(delta - delta.mean()) < 0.6745*x0.std()).sum()/len(x0)
    return f, a, u, x0[0], C, P #返回灰色预测函数、a、b、首项、方差比、小残差概率
灰色预测模型是一种基于灰色理论的预测方法,其原理是根据系统的发展趋势和特征进行数据处理和分析,从而得出未来的预测结果。R语言是一种开源的编程语言,拥有丰富的数据分析和预测函数库,可以用于实现灰色预测模型。 要编写灰色预测模型的R语言代码,可以按照以下步骤进行: 1. 数据预处理:首先,要将原始数据进行处理,包括去除异常值、平滑数据等。R语言提供了许多函数用于数据处理,如去除异常值的函数(如outliers()),平滑数据的函数(如smooth())等。 2. 数据建模:接下来,根据处理后的数据,建立灰色预测模型。常用的灰色预测模型包括GM(1,1)模型GM(2,1)模型等。以GM(1,1)模型为例,可以使用R语言中的灰色包forecast来进行建模。使用gm()函数进行GM(1,1)模型建模。 3. 模型评估与优化:完成模型建立后,需要对模型进行评估,包括计算预测精度、预测误差等指标,并对模型进行优化。R语言提供了各种评估模型和优化模型的函数,如accuracy()函数用于计算预测精度,optim()函数用于模型优化。 4. 模型预测与结果展示:最后,使用建立好的模型进行预测,并将预测结果进行展示。R语言提供了预测函数,如predict()函数来进行模型预测,并提供了绘图函数,如plot()函数来展示预测结果。 综上所述,想要编写灰色预测模型的R语言代码,主要涉及数据预处理、模型建立、模型评估与优化、模型预测与结果展示等步骤。R语言提供了丰富的函数和库来实现这些步骤,通过逐步完成这些步骤,可以编写出完整的灰色预测模型的R语言代码。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值