基于状态转移算法的函数寻优算法及其在旅行商问题中的应用

304 篇文章 185 订阅
13 篇文章 7 订阅

一、理论基础

状态转移算法(State transition algorithm, STA)是基于状态和状态转移的概念及现代控制理论中状态空间表示法提出的一种智能型随机性全局优化方法,由于其优良的全局搜索能力和快速收敛性,在许多优化问题中得到了很好的应用。

1、连续状态转移算法

连续状态转移算法主要针对无约束连续优化问题,它的主体实现从以下三个方面进行阐述,其中状态变换算子、邻域与采样用于产生候选解,选择和更新用于当前最优解的替换,交替轮换策略用于不同状态变换算子的调用。

1.1 状态变换算子

(1)旋转变换(Rotation transformation, RT)

x k + 1 = x k + α 1 n ∣ ∣ x k ∣ ∣ 2 R r x k (1) \boldsymbol x_{k+1}=\boldsymbol x_{k}+\alpha\frac{1}{n||\boldsymbol x_k||_2}R_r\boldsymbol x_k\tag{1} xk+1=xk+αnxk21Rrxk(1)其中, α > 0 \alpha>0 α>0为旋转因子; R r ∈ R n × n R_r\in{\bf{R}}^{n×n} RrRn×n是一个其元素取值在 [ − 1 , 1 ] [-1,1] [1,1]之间均匀分布的随机矩阵; ∣ ∣ ⋅ ∣ ∣ 2 ||\cdot||_2 2为向量2-范数或欧氏范数。可以证明,旋转变换具有以 α \alpha α为半径的超球内进行搜索的功能。

(2)平移变换(Translation transformation, TT)

x k + 1 = x k + β R t x k − x k − 1 ∣ ∣ x k − x k − 1 ∣ ∣ 2 (2) \boldsymbol x_{k+1}=\boldsymbol x_{k}+\beta R_t\frac{\boldsymbol x_k-\boldsymbol x_{k-1}}{||\boldsymbol x_k-\boldsymbol x_{k-1}||_2}\tag{2} xk+1=xk+βRtxkxk12xkxk1(2)其中, β > 0 \beta>0 β>0为平移因子; R t ∈ R R_t\in\bf R RtR是一个其元素取值在 [ − 1 , 1 ] [-1,1] [1,1]之间均匀分布的随机数。平移变换具有在沿着从点 x k − 1 \boldsymbol x_{k-1} xk1到点 x k \boldsymbol x_k xk的直线上并以 x k \boldsymbol x_k xk为起点、 β \beta β为最大长度进行搜索的功能。

(3)伸缩变换(Expansion transformation, ET)

x k + 1 = x k + γ R e x k (3) \boldsymbol x_{k+1}=\boldsymbol x_{k}+\gamma R_e\boldsymbol x_k\tag{3} xk+1=xk+γRexk(3)其中, γ > 0 \gamma>0 γ>0为伸缩因子; R e ∈ R n × n R_e\in{\bf R}^{n×n} ReRn×n是一个其非零元素取值服从高斯分布的随机对角矩阵。从理论上看,伸缩变换能够把 x k \boldsymbol x_k xk中的每个元素伸缩到 ( − ∞ , + ∞ ) (-\infty,+\infty) (,+)的范围内。

(4)轴向变换(Axesion transformation, AT)

x k + 1 = x k + δ R a x k (4) \boldsymbol x_{k+1}=\boldsymbol x_{k}+\delta R_a\boldsymbol x_k\tag{4} xk+1=xk+δRaxk(4)其中, δ > 0 \delta>0 δ>0为轴向因子; R a ∈ R n × n R_a\in{\bf R}^{n×n} RaRn×n是一个其非零元素取值服从高斯分布的稀疏随机对角矩阵(基本连续状态转移算法中,只有一个随机位置为非零元素)。轴向变换的功能是增强单一维度的搜索。

1.2 邻域与采样

从某个当前状态 x k \boldsymbol x_k xk出发,通过状态变换算子的作用,由于随机性, 产生的候选状态 x k + 1 \boldsymbol x_{k+1} xk+1不是唯一的。不难想象,对一个固定的当前 x k \boldsymbol x_k xk,在某种特定的状态变换算子作用下,所有产生的候选解将构成一个集合,形成一个邻域,记作 N x k o p e r a t o r N_{\boldsymbol x_k}^{operator} Nxkoperator,其中 o p e r a t o r operator operator代表某种特定算子。容易理解,邻域 N x k o p e r a t o r N_{\boldsymbol x_k}^{operator} Nxkoperator中的元素具有同质性,它们是由固定的当前 x k \boldsymbol x_k xk和特定的状态变换算子 o p e r a t o r operator operator共同作用产生的。
考虑到邻域 N x k o p e r a t o r N_{\boldsymbol x_k}^{operator} Nxkoperator中候选解的同质性,利用采样策略从该邻域中以一定的机制随机采集有限个候选解,可以节省搜索时间、避免穷举带来的时间复杂度过高的问题。以旋转变换为例,基本连续状态转移算法中随机均匀采样策略的伪代码如下所示:
在这里插入图片描述其中, B e s t k \boldsymbol {Best}_k Bestk表示当前最优解; S E SE SE可以理解为搜索强度、采样力度或样本大小(种群规模); S t a t e State State表示在给定的 B e s t k \boldsymbol{Best}_k Bestk和旋转变换作用下产生的样本大小为 S E SE SE的状态集。

1.3 选择与更新

在基本连续状态转移算法中,均采用“贪婪准则”来选择和更新最优解,如下所示: B e s t = { n e w B e s t , f ( n e w B e s t ) < f ( B e s t ) B e s t ,   o t h e r w i s e (5) \boldsymbol{Best}=\begin{dcases}\boldsymbol{newBest},\quad f(\boldsymbol{newBest})<f(\boldsymbol{Best})\\\boldsymbol{Best},\quad\quad\quad\, otherwise\end{dcases}\tag{5} Best={newBest,f(newBest)<f(Best)Best,otherwise(5)其中, n e w B e s t \boldsymbol{newBest} newBest是从状态集 S t a t e State State中选择的“最优解”。

1.4 交替轮换

为达到全局优化的本质要求,即在最短的时间内找到全局最优解,状态转移算法中专门设计了全局搜索算子和局部搜索算子,并采用了交替轮换的机制使用各种算子。基本连续状态转移算法的伪代码如下:
在这里插入图片描述其中, B e s t 0 \boldsymbol{Best}_0 Best0为随机产生的初始解, e x p a n s i o n , r o t a t i o n expansion, rotation expansion,rotation以及 a x e s i o n axesion axesion函数分别实现了伸缩变换、旋转变换和轴向变换并包括选择和更新功能。值得注意的是,状态转移算法中采用了交替轮换的机制使用各种搜索算子,即旋转、伸缩变换和轴向搜索轮换进行,并且在分别使用旋转、伸缩变换和轴向变换后调用了平移变换。采用的交替轮换机制是为了适应不同结构类型优化问题的需要,它的一大好处是在未达到全局最优解邻域时,避免浪费过多的时间进行局部搜索,增强搜索过程的活跃性。
此外,基本状态转移算法的参数设置如下: α max ⁡ = 1 , α min ⁡ = 1 × 1 0 − 4 , β = 1 , γ = 1 , δ = 1 , S E = 30 , f c = 2 \alpha_{\max}=1,\alpha_{\min}=1×10^{-4},\beta=1,\gamma=1,\delta=1,SE=30,fc=2 αmax=1,αmin=1×104,β=1,γ=1,δ=1,SE=30,fc=2。其中平移、伸缩和轴向因子都保持恒定,旋转因子 α \alpha α以指数的方式进行衰减,底数为 1 f c \frac1{f_c} fc1,并且以周期性的方式在最大值 α max ⁡ \alpha_{\max} αmax和最小值 α min ⁡ \alpha_{\min} αmin之间进行变化。

2、离散状态转移算法

离散状态转移算法用于求解决策变量为离散变量的优化问题,比如旅行商问题(Travelling salesman problem, TSP)。其与连续状态转移算法的主要差别是候选解的产生和编码方式有所不同。离散状态转移算法中设计了交换、平移、对称和替换算子四种具有特定几何功能的算子,对候选解采用独特的下标表示法作为候选解的编码方式,使利用搜索算子得到的候选解均为可行解,避免了算法在迭代求解过程中对不可行解的修正,缩短了离散优化问题的求解时间。
为了介绍基本离散状态转移算法的主要思想,考虑如下的离散优化问题: min ⁡ x i ∈ K    f ( x ) (6) \underset{x_i\in K}{\min}\,\,f(\boldsymbol x)\tag{6} xiKminf(x)(6)其中, x = [ x 1 , x 2 , ⋯   , x n ] T \boldsymbol x=[x_1,x_2,\cdots,x_n]^T x=[x1,x2,,xn]T K = { κ 1 , κ 2 , ⋯   , κ n } K=\{\kappa_1,\kappa_2,\cdots,\kappa_n\} K={κ1,κ2,,κn}是每个元素 x i x_i xi取值的集合。

2.1 下标表示法

为了方便求解离散优化问题,加快搜索速率,离散状态转移算法采用下标表示法对候选解进行编码。对于如式(6)所示的离散最优选择问题,下标表示法将 n n n维决策变量的取值 { κ 1 , κ 2 , ⋯   , κ m } \{\kappa_1,\kappa_2,\cdots,\kappa_m\} {κ1,κ2,,κm} { 1 , 2 , ⋯   , m } \{1,2,\cdots,m\} {1,2,,m}中的数字一一对应,将决策变量 x \boldsymbol x x编码成一种包含 1 , 2 , ⋯   , m 1,2,\cdots,m 1,2,,m这些数字的序列。下标表示法具有可拓展性,可以根据离散优化问题的具体形式,做出相应的变化。此外,采用下标表示法也可以降低部分离散优化问题的求解难度。

2.2 离散状态变换算子

离散状态转移算法设计了四种典型离散状态变换算子,同样具有一定的几何搜索功能、全局搜索和局部搜索能力。各种算子的示意图如图1所示。

(1)交换变换算子

x k + 1 = A k s w a p ( m a ) x k (7) \boldsymbol x_{k+1}=A_k^{swap}(m_a)\boldsymbol x_k\tag{7} xk+1=Akswap(ma)xk(7)其中, A k s w a p ∈ Z n × n A_k^{swap}\in{\bf Z}^{n×n} AkswapZn×n称为交换变换矩阵,是一个带有交换变换功能的随机布尔矩阵。该算子具有交换 x k \boldsymbol x_k xk m a m_a ma个元素的能力。 m a m_a ma称为交换因子,具有控制交换变换元素的个数的作用。

(2)移动变换算子

x k + 1 = A k s h i f t ( m b ) x k (8) \boldsymbol x_{k+1}=A_k^{shift}(m_b)\boldsymbol x_k\tag{8} xk+1=Akshift(mb)xk(8)其中, A k s h i f t ∈ Z n × n A_k^{shift}\in{\bf Z}^{n×n} AkshiftZn×n称为移动变换矩阵,是一个带有移动变换功能的随机布尔矩阵。该算子具有将 x k \boldsymbol x_k xk中连续 m b m_b mb个元素移动到另一个随机位置后面的能力。 m b m_b mb称为移动因子,具有控制候选解中最多连续移动元素的作用。

(3)对称变换算子

x k + 1 = A k s y m ( m c ) x k (9) \boldsymbol x_{k+1}=A_k^{sym}(m_c)\boldsymbol x_k\tag{9} xk+1=Aksym(mc)xk(9)其中, A k s y m ∈ Z n × n A_k^{sym}\in{\bf Z}^{n×n} AksymZn×n称为对称变换矩阵,是一个带有对称变换功能的随机布尔矩阵。该算子具有将 x k \boldsymbol x_k xk中连续 m c m_c mc个元素翻转到另一个随机位置对面的能力。 m c m_c mc称为对称因子,具有控制候选解对称变换元素个数的作用。

(4)替代变换算子

x k + 1 = A k s u b ( m d ) x k (10) \boldsymbol x_{k+1}=A_k^{sub}(m_d)\boldsymbol x_k\tag{10} xk+1=Aksub(md)xk(10)其中, A k s u b ∈ Z n × n A_k^{sub}\in{\bf Z}^{n×n} AksubZn×n称为替代变换矩阵,是一个带有替代变换功能的随机布尔矩阵。该算子具有将 x k \boldsymbol x_k xk中连续 m d m_d md个元素进行替换的能力。 m d m_d md称为替代因子,具有控制候选解中被替代元素个数的作用。
在这里插入图片描述

图1 离散状态变换算子示意图

二、实验与分析

1、函数测试

将连续STA分别与樽海鞘群算法(SSA)、鲸鱼优化算法(WOA)、飞蛾火焰优化算法(MFO)、教与学优化算法(TLBO)、灰狼优化算法(GWO)进行对比,以文献[2]中表1列出的10个测试函数为例。设置种群规模为30,最大迭代次数为1000,每个算法独立运算30次。结果显示如下:
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

函数:F1
SSA:最差值: 1.8475e-08,最优值:7.4852e-09,平均值:1.213e-08,标准差:2.742e-09,秩和检验:1.2118e-12
WOA:最差值: 3.3438e-149,最优值:9.0182e-172,平均值:1.1384e-150,标准差:6.1008e-150,秩和检验:1.2118e-12
MFO:最差值: 10000,最优值:1.0535e-05,平均值:2666.6669,标准差:4497.7643,秩和检验:1.2118e-12
TLBO:最差值: 1.7753e-183,最优值:2.0294e-188,平均值:1.2684e-184,标准差:0,秩和检验:1.2118e-12
GWO:最差值: 9.9344e-58,最优值:8.0907e-62,平均值:6.1757e-59,标准差:1.7872e-58,秩和检验:1.2118e-12
STA:最差值: 0,最优值:0,平均值:0,标准差:0,秩和检验:NaN
函数:F2
SSA:最差值: 106.4603,最优值:34.8235,平均值:64.0752,标准差:18.6718,秩和检验:1.2118e-12
WOA:最差值: 5.6843e-14,最优值:0,平均值:1.8948e-15,标准差:1.0378e-14,秩和检验:0.33371
MFO:最差值: 240.9918,最优值:76.6117,平均值:164.2882,标准差:40.6265,秩和检验:1.2118e-12
TLBO:最差值: 25.9813,最优值:6.9648,平均值:14.8451,标准差:4.9511,秩和检验:1.2118e-12
GWO:最差值: 14.1079,最优值:0,平均值:0.66876,标准差:2.761,秩和检验:0.021546
STA:最差值: 0,最优值:0,平均值:0,标准差:0,秩和检验:NaN
函数:F3
SSA:最差值: 0.039353,最优值:4.5559e-08,平均值:0.010172,标准差:0.010384,秩和检验:4.5618e-11
WOA:最差值: 0.11272,最优值:0,平均值:0.0037574,标准差:0.02058,秩和检验:1
MFO:最差值: 180.989,最优值:8.7983e-05,平均值:18.1269,标准差:43.8093,秩和检验:2.4098e-11
TLBO:最差值: 0,最优值:0,平均值:0,标准差:0,秩和检验:0.33371
GWO:最差值: 0.019066,最优值:0,平均值:0.0020703,标准差:0.0054346,秩和检验:0.18993
STA:最差值: 0.10265,最优值:0,平均值:0.0034216,标准差:0.018741,秩和检验:1
函数:F4
SSA:最差值: 1394.3768,最优值:22.4618,平均值:182.5539,标准差:376.4949,秩和检验:2.6015e-08
WOA:最差值: 28.7226,最优值:26.474,平均值:27.1524,标准差:0.45649,秩和检验:5.5727e-10
MFO:最差值: 90135.2834,最优值:14.8313,平均值:27281.4561,标准差:41801.2529,秩和检验:1.7294e-07
TLBO:最差值: 25.645,最优值:21.2689,平均值:23.4194,标准差:0.73342,秩和检验:9.0632e-08
GWO:最差值: 27.9401,最优值:25.1974,平均值:26.7971,标准差:0.63968,秩和检验:9.7555e-10
STA:最差值: 83.8687,最优值:14.3985,平均值:26.4819,标准差:11.0199,秩和检验:1
函数:F5
SSA:最差值: -6315.5349,最优值:-11372.6096,平均值:-9171.8564,标准差:1163.5408,秩和检验:3.0199e-11
WOA:最差值: -12089.4945,最优值:-14843.1434,平均值:-14065.507,标准差:852.7645,秩和检验:0.0072884
MFO:最差值: -6935.3981,最优值:-9886.8042,平均值:-8399.0168,标准差:612.7715,秩和检验:3.0199e-11
TLBO:最差值: -4252.9337,最优值:-8351.3628,平均值:-6163.1463,标准差:1016.281,秩和检验:3.0199e-11
GWO:最差值: -3077.9476,最优值:-5094.1962,平均值:-4192.1134,标准差:468.5024,秩和检验:3.0199e-11
STA:最差值: -14548.7465,最优值:-14784.3606,平均值:-14673.3631,标准差:51.3879,秩和检验:1
函数:F6
SSA:最差值: 4.7003,最优值:2.6812e-05,平均值:2.087,标准差:0.97925,秩和检验:1.2118e-12
WOA:最差值: 7.9936e-15,最优值:8.8818e-16,平均值:3.2567e-15,标准差:2.1546e-15,秩和检验:0.0026674
MFO:最差值: 19.9612,最优值:0.0035627,平均值:14.7331,标准差:7.4061,秩和检验:1.2118e-12
TLBO:最差值: 4.4409e-15,最优值:4.4409e-15,平均值:4.4409e-15,标准差:0,秩和检验:NaN
GWO:最差值: 2.2204e-14,最优值:1.1546e-14,平均值:1.6046e-14,标准差:2.7886e-15,秩和检验:2.5917e-13
STA:最差值: 4.4409e-15,最优值:4.4409e-15,平均值:4.4409e-15,标准差:0,秩和检验:NaN
函数:F7
SSA:最差值: -13.3718,最优值:-21.9633,平均值:-17.2707,标准差:1.9669,秩和检验:3.0199e-11
WOA:最差值: -7.81,最优值:-14.3439,平均值:-11.5587,标准差:1.4931,秩和检验:3.0199e-11
MFO:最差值: -16.8592,最优值:-24.9971,平均值:-20.6822,标准差:2.0164,秩和检验:3.0199e-11
TLBO:最差值: -22.7147,最优值:-28.5104,平均值:-26.1158,标准差:1.4973,秩和检验:6.0658e-11
GWO:最差值: -9.3663,最优值:-18.5087,平均值:-14.0349,标准差:3.2899,秩和检验:3.0199e-11
STA:最差值: -27.6021,最优值:-29.617,平均值:-29.0231,标准差:0.64895,秩和检验:1
函数:F8
SSA:最差值: 0.0097159,最优值:9.4369e-15,平均值:0.0025909,标准差:0.00437,秩和检验:1.2078e-12
WOA:最差值: 0.0097159,最优值:0,平均值:0.0038864,标准差:0.0048412,秩和检验:0.000144
MFO:最差值: 0.037224,最优值:0,平均值:0.010309,标准差:0.0053837,秩和检验:1.7653e-13
TLBO:最差值: 3.8858e-16,最优值:0,平均值:1.2953e-17,标准差:7.0944e-17,秩和检验:0.33371
GWO:最差值: 0.0097159,最优值:0,平均值:0.004858,标准差:0.004941,秩和检验:1.2717e-05
STA:最差值: 0,最优值:0,平均值:0,标准差:0,秩和检验:NaN
函数:F9
SSA:最差值: -1,最优值:-1,平均值:-1,标准差:6.9102e-13,秩和检验:0.0046371
WOA:最差值: 0,最优值:-1,平均值:-0.96667,标准差:0.18257,秩和检验:3.0199e-11
MFO:最差值: -1,最优值:-1,平均值:-1,标准差:0,秩和检验:1.2118e-12
TLBO:最差值: -1,最优值:-1,平均值:-1,标准差:0,秩和检验:1.2118e-12
GWO:最差值: -1,最优值:-1,平均值:-1,标准差:2.7354e-07,秩和检验:3.0199e-11
STA:最差值: -1,最优值:-1,平均值:-1,标准差:1.2468e-12,秩和检验:1
函数:F10
SSA:最差值: 3,最优值:3,平均值:3,标准差:7.4053e-14,秩和检验:3.3505e-08
WOA:最差值: 3.0004,最优值:3,平均值:3,标准差:6.7512e-05,秩和检验:3.3384e-11
MFO:最差值: 3,最优值:3,平均值:3,标准差:2.2281e-15,秩和检验:2.1033e-11
TLBO:最差值: 3,最优值:3,平均值:3,标准差:2.163e-15,秩和检验:3.1602e-12
GWO:最差值: 3.0001,最优值:3,平均值:3,标准差:1.3857e-05,秩和检验:3.0199e-11
STA:最差值: 3,最优值:3,平均值:3,标准差:3.1386e-10,秩和检验:1

结果表明,状态转移算法具有良好的全局搜索能力和收敛性,是一种很有前途的优化算法。

2、求解TSP

由于替代变换算子可能会导致重复序列,因此本文使用的求解TSP的离散STA不包括替代变换算子。设置离散STA种群规模为30,最大迭代次数为500。以bayg29、att48和gr96数据集为例。

(1)bayg29

图2为计算bayg29问题的收敛曲线图。
在这里插入图片描述

图2 计算bayg29问题的收敛曲线

图3为离散STA计算bayg29得到的最优路径。
在这里插入图片描述
图3 计算bayg29问题得到的最优路径

(2)att48

图4为计算att48问题的收敛曲线图。
在这里插入图片描述

图4 计算att48问题的收敛曲线

图5为离散STA计算att48得到的最优路径。
在这里插入图片描述
图5 计算att48问题得到的最优路径

(3)gr96

图6为计算gr96问题的收敛曲线图。
在这里插入图片描述

图6 计算gr96问题的收敛曲线

图7为离散STA计算gr96得到的最优路径。
在这里插入图片描述
图7 计算gr96问题得到的最优路径

实验结果表明了离散STA具有很强的搜索能力,能够有效优化TSP的距离。

三、参考文献

[1] 周晓君, 阳春华, 桂卫华. 状态转移算法原理与应用[J]. 自动化学报, 2020, 46(11): 2260-2274.
[2] Xiaojun Zhou, Chunhua Yang, Weihua Gui. State transition algorithm[J]. Journal of Industrial & Management Optimization, 2012, 8(4): 1039-1056.
[3] Tang X, Yang C, Zhou X, et al. A discrete state transition algorithm for generalized traveling salesman problem[M]. Advances in Global Optimization. Springer, Cham, 2015: 137-145.

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
旅行问题(Multi Traveling Salesman Problem,MTSP)是旅行问题(Traveling Salesman Problem, TSP)的扩展。在MTSP,有多个旅行,每个旅行需要访问一组给定的城市,并且每个城市只能被访问一次。现在需要利用灰狼算法(Grey Wolf Optimizer, GWO)来解决MTSP问题。 首先,需要基于matlab编写一个灰狼算法的求解函数。该函数包括灰狼的初始化、目标函数的计算、灰狼的适应度更新、灰狼位置的更新等步骤。 然后,需要进行MTSP问题的建模。将每个旅行的路径表示为一个解向量,其每个元素表示访问的城市顺序。通过将每个旅行的路径连接起来,构成一个整体的解。 接下来,利用灰狼算法来求解MTSP问题。初始化一群灰狼,并随机生成它们的初始位置。根据目标函数的值来计算灰狼的适应度,选择适应度最高的灰狼作为全局最解。 然后,通过更新灰狼的位置,利用化策略逐步化解。其包括利用alpha、beta和delta等参数来调整灰狼的位置。经过多次迭代,得到最解。 最后,将最解解码为每个旅行的路径,即为MTSP问题的解。将结果输出并进行评估。 综上所述,基于matlab的灰狼算法可以用来求解多旅行问题。通过灰狼算法的迭代化策略,可以得到近似最解。这种方法具有较高的搜索能力和全局化能力,在实际应用具有一定的实用性和效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心️升明月

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值