粒子群优化算法的实现

1 算法基本概念

粒子群优化算法属于进化算法的一种,通过追随当前搜索到的最优值来寻找全局最优。粒子群算法也称粒子群优化算法(Particle Swarm Optimization,PSO),PSO有几个关键概念:粒子、优化函数、适值(Fitness Value)、飞行方向、飞行距离。

粒子群优化算法实现容易、精度高、收敛快,在解决实际问题中展示了其优越性。粒子群算法通用性较好,适合处理多种类型的目标函数和约束,并且容易与传统的优化方法结合,从而改进自身的局限性,更高效地解决问题。因此,将粒子群算法应用于解决多目标优化问题上具有很大的优势。

2 算法的MATLAB实现

基本粒子群算法使用固定长度的二进制符号串来表示群体中的个体,其等位基因是由二值符号集 { 0 , 1 } \{0,1\} {0,1} 所组成。初始群体中各个个体的基因值可用均匀分布的随机数来生成。

2.1 算法的基本程序

基本粒子群(PSO)算法描述如下:

begin
	Initalize; %包括初始化粒子群数,粒子初始速度和位置
		[x,xd] = judge(x,pop_size); %调用judge函数,初始化第一次值

	fornum=2:最大迭代次数
		wk=wmax-num*(wmax-wmin)/max_gen; %计算惯性权重
		r1= ; r2=  %随机产生加速权重
		PSO算法
	迭代求vk,xk;
	While 判断 vk 是否满足条件
		再次重新生成加速权重系数r1;r2
		PSO算法
		再次迭代求vk,xk数值
	end
	调用[x,xd] = judge(x,pop_size); 重新计算出目标函数值
	判断并重新生成pj数值;
	判断并重新生成pjd数值
	if 迭代前数值 > 迭代后的数值
		累加迭代次数值
	end
	输出随机数种子、进度、最优迭代次数、每个函数的数值和目标函数的数值
	用ASCII保存粒子位移的数值
	用ASCII保存粒子速度的数值
end

在MATLAB中,编程实现的基本粒子群算法基本函数为PSO,其调用格式如下:

[xm, dv] = PSO(fitness, N, c1, c2, w, M, D)

其中,fitness为待优化的目标函数(适应度函数),N是粒子数目,c1是学习因子 1 1 1c2是学习因子 2 2 2w是惯性权重,M是最大迭代次数,D是自变量个数,xm是目标函数取最小值时自变量,fv是目标函数最小值。

使用MATLAB实现基本粒子群(PSO)算法代码如下:

function[xm,fv]=PSO(fitness, N, c1, c2, w, M, D)
%%%%%%%给定初始化条件%%%%%%%
% c1 学习因子1
% c2 学习因子2
% w 惯性权重
% M 最大迭代次数
% D 搜索空间维数
% N 初始化群体个体数目
%%%%%%%初始化种群个体(限定位置和速度范围)%%%%%%%
format long;
for i = 1: N
	for j = 1: D
		x(i,j) = randn;	% 随机初始化位置
		v(i,j) = randn; % 随机初始化速度
	end
end
%%%%%%%先计算各个粒子的适应度,并初始化Pi和Pg%%%%%%%
for i = 1: N
	p(i) = fitness(x(i,:));
	y(i,:) = x(i,:);
end
pg = x(N,:); % pg为全局最优
for i = 1:(N-1)
	if fitness(x(i,:)) < fitness(pg)
		pg = x(i,:);
	end
end
%%%%%%%进入主循环,按照公式依次迭代,知道满足精度要求%%%%%%%
for t = 1:M
	for i = 1:N % 更新速度和位移
		v(i,:) = w * v(i,:) + c1 * rand * (y(i,:)-x(i,:)) + c2 * rand * (pg - x(i,:));
		x(i,:) = x(i,:) + v(i,:);
		if fitness(x(i,:)) < p(i)
			p(i) = fitness(x(i,:));
			y(i,:) = x(i,:);
		end
		if p(i) < fitness(pg)
			pg = y(i,:);
		end
	end
	Pbest(t) = fitness(pg);
end
%%%%%%%最后给出计算结果%%%%%%%
disp('***********************')
disp('目标函数取最小值时自变量:')
xm = pg'
disp('目标函数最小值为:')
fv = fitness(pg)
disp('***********************')

2.2 适应度函数

适应度表示个体 x x x 对环境的适应程度,分为针对被优化目标函数优化行适应度和 针对约束函数的约束型适应度。粒子群算法使用的适应度函数多样, G W GW GW 函数和 R A RA RA 函数是两类经典的适应度函数。

  • 优化型适应度
    F o b j ( X ) = f ( x ) F_{obj}(X)=f(x) Fobj(X)=f(x)
  • 约束型适应度
    F i ( X ) = { 0 , g i ( X ) ≤ 0 g i ( X ) , g i ( X ) ≥ 0 F_{i}(X)=\left\{ \begin{matrix} 0,\qquad g_i(X)\leq0\\ \\ g_i(X),\quad g_i(X)\geq0\\ \end{matrix} \right. Fi(X)=0,gi(X)0gi(X),gi(X)0

示例

利用基本粒子群算法求解函数 f ( x ) = ∑ i = 1 10 ( x i 2 + 2 x i − 3 ) f(x)=\sum_{i=1}^{10}(x_i^2+2x_i-3) f(x)=i=110(xi2+2xi3) 最小值。

解析

利用PSO求解最小值,需要确认迭代次数对结果的影响。设定题中函数最小点均为 0 0 0,粒子群规模为 40 40 40,惯性权重为 0.6 0.6 0.6,学习因子1为 1.2 1.2 1.2,学习因子2为 2.2 2.2 2.2,迭代次数为 100 100 100 300 300 300

基本粒子群PSO算法代码见上。

目标函数代码如下:

function F = fitness(x)
F = 0;
for i = 1: 10
    F = F + x(i)^2 + 2 * x(i) - 3;
end

求解函数最小值代码如下:

  • 迭代次数为100
clear all
clc
x  = zeros(1,10);
[xm,fv] = PSO(@fitness,40,1.2,2.2,0.6,100,10);	% 迭代次数为100
% 取自变量
xm;
% 取函数最小值
fv;

结果如下:

***********************
目标函数取最小值时自变量:

xm =

  -0.991104610834485
  -0.997666388064225
  -0.993499168365228
  -0.995209292046358
  -0.997319510025391
  -0.997398011693752
  -0.997812988297172
  -1.003889705997851
  -0.999468835940385
  -1.006062399124978

目标函数最小值为:

fv =

 -39.999779311591290

***********************
  • 迭代次数为300
clear all
clc
x  = zeros(1,10);
[xm,fv] = PSO(@fitness,40,1.2,2.2,0.6,300,10);	% 迭代次数为300
% 取自变量
xm;
% 取函数最小值
fv;

结果如下:

***********************
目标函数取最小值时自变量:

xm =

  -1.005827335897396
  -1.003735840310715
  -1.001088656877167
  -1.001724852313095
  -1.003933895880758
  -1.002330669862129
  -1.001909424295409
  -0.996959460575888
  -0.993648871189404
  -1.001008751197640

目标函数最小值为:

fv =

 -39.999872772608128

***********************

PSO算法是一种随机算法,同样的参数也会算出不同结果,且迭代次数越大,获得解的精度不一定越高。在粒子群算法中,要想获得精度高的解,关键各个参数之间的合理搭配。

2.3 免疫粒子群算法的MATLAB应用

使用基于模拟退火的混合粒子群算法求解 f ( x ) = c o s x 1 2 − x 2 2 − 3 [ 2 + ( x 1 2 + x 2 2 ) ] 2 + 0.8 f(x)=\frac{cos\sqrt{x_1^2-x_2^2}-3}{[2+(x_1^2+x_2^2)]^2}+0.8 f(x)=[2+(x12+x22)]2cosx12x22 3+0.8 最小值,其中 − 10 ≤ x i ≤ 10 -10 \leq x_i \leq 10 10xi10 ,粒子数为 60 60 60,学习因子均为 1.2 1.2 1.2,退火常数为 0.8 0.8 0.8,迭代次数为 800 800 800

解析

免疫粒子群算法代码如下:

function [x,y,Result]=PSO_immu(func,N,c1,c2,w,MaxDT,D,eps,DS,replaceP,minD,Psum)
format long;
%%%%%%给定初始化条件%%%%%%%%%%%%%%%%%%%%%%%%%%%
c1=1.2;             %学习因子1
c2=1.2;             %学习因子2
w=0.8;            %惯性权重
MaxDT=800;        %最大迭代次数
D=2;              %搜索空间维数(未知数个数)
N=60;            %初始化群体个体数目
eps=10^(-10);     %设置精度(在已知最小值时候用)
DS=8;             %每隔DS次循环就检查最优个体是否变优
replaceP=0.5;     %粒子的概率大于replaceP将被免疫替换
minD=1e-10;       %粒子间的最小距离
Psum=0;           %个体最佳的和
range=100;
count = 0;
%%%%%%初始化种群的个体%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:N
    for j=1:D
        x(i,j)=-range+2*range*rand;  %随机初始化位置
        v(i,j)=randn;  %随机初始化速度
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%先计算各个粒子的适应度,并初始化Pi和Pg%%%%%%%%%%%%%%%%%%% 
for i=1:N    
    p(i)=feval(func,x(i,:));
    
    y(i,:)=x(i,:);
end
pg=x(1,:);             %Pg为全局最优
for i=2:N
    if feval(func,x(i,:))<feval(func,pg)    
        pg=x(i,:);
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%%主循环,按照公式依次迭代,直到满足精度要求%%%%%%% 
for t=1:MaxDT
    for i=1:N
        v(i,:)=w*v(i,:)+c1*rand*(y(i,:)-x(i,:))+c2*rand*(pg-x(i,:));
        x(i,:)=x(i,:)+v(i,:);
        if feval(func,x(i,:))<p(i) 
            p(i)=feval(func,x(i,:)); 
            y(i,:)=x(i,:);
        end
        if p(i)<feval(func,pg)  
            pg=y(i,:);
            subplot(1,2,1);            
            bar(pg,0.25); 
            axis([0 3 -40 40 ]) ;
            title (['Iteration  ', num2str(t)]); pause (0.1);
            subplot(1,2,2); 
          plot(pg(1,1),pg(1,2),'rs','MarkerFaceColor','r', 'MarkerSize',8)
            hold on;
            plot(x(:,1),x(:,2),'k.');
            set(gca,'Color','g')
            hold off;
            grid on;
            axis([-100 100 -100 100 ]) ;
            title(['Global Min =  ',num2str(p(i))]);
            xlabel(['Min_x= ',num2str(pg(1,1)),'  Min_y= ',num2str(pg(1,2))]);
            
        end
    end
    Pbest(t)=feval(func,pg) ;   
%     if Foxhole(pg,D)<eps                %如果结果满足精度要求则跳出循环
%         break;
%     end
%%%%%开始进行免疫%%%%%%%%%%%%%%%%%
    if t>DS
       if mod(t,DS)==0 && (Pbest(t-DS+1)-Pbest(t))<1e-020    %如果连续DS代数,群体中的最优没有明显变优,则进行免疫.
            %在函数测试的过程中发现,经过一定代数的更新,个体最优不完全相等,但变化非常非常小,
           for i=1:N                            %先计算出个体最优的和
             Psum=Psum+p(i);
           end
           
           for i=1:N                            %免疫程序              
               
               for j=1:N                        %计算每个个体与个体i的距离
                   distance(j)=abs(p(j)-p(i));
               end
               num=0;   
               for j=1:N                        %计算与第i个个体距离小于minD的个数
                   if distance(j)<minD
                       num=num+1;
                   end
               end
               PF(i)=p(N-i+1)/Psum;             %计算适应度概率
               PD(i)=num/N;                     %计算个体浓度
               
               a=rand;                          %随机生成计算替换概率的因子
               PR(i)=a*PF(i)+(1-a)*PD(i);       %计算替换概率
           end
           
            for i=1:N
                if PR(i)>replaceP
                    x(i,:)=-range+2*range*rand(1,D);
               count=count+1;
                end
           end
       end
    end    
end
 
%%%%%%%最后给出计算结果%%%%%%%%%%%%%%%%%%%%
x=pg(1,1);
y=pg(1,2);
Result=feval(func,pg);
%%%%%%%%%%算法结束%%%%%%%%%%%%%%%%%%
function probabolity(N,i)
PF=p(N-i)/Psum;%适应度概率
disp(PF);
for jj=1:N
  distance(jj)=abs(P(jj)-P(i));
end
num=0;
for ii=1:N
    if distance(ii)<minD
        num=num+1;
    end
end
PD=num/N;            %个体浓度
PR=a*PF+(1-a)*PD;     %替换概率

目标函数代码如下:

function y = imF(x)
	y = (cos(x(1)^2-x(2)^2)-3)/((2+(x(1)^2+x(2)^2))^2)+0.8;
end

目标函数最小值计算代码如下:

clear all
clc
x=zeros(1,10);
[x1,x2,f] = PSO_im(@imF,60,2,2,0.8,800,5,0.0000001,10,0.6,0.0000000000000000001,0);
% 得到出计算结果
disp('*************************************************');
disp('目标函数取最小值时的自变量:');
x1
x2
disp('目标函数的最小值为:')
f
disp('**************************************************');

结果如下所示:

在这里插入图片描述

*************************************************
目标函数取最小值时的自变量:

x1 =

    -9.576147568073508e-09


x2 =

     4.596695783685527e-09

目标函数的最小值为:

f =

   0.300000000000000

**************************************************

3 粒子群算法的权重控制

惯性权重控制前一变化量对当前变化量的影响。 w w w 较大,全局搜索能力较强; w w w 较小,局部搜索能力较强。常见的PSO算法有自适应权重法、随机权重法、线性递减权重法等。

3.1 线性递减法

针对PSO算法容易早熟及后期容易在全局最优解附近产生振荡的现象,提出了线性递减权重法。即惯性权重依照线性从大到小递减,其变化公式为
w = w m a x − t ∗ ( w m a x − w m i n ) t m a x w = w_{max}-\frac{t * (w_{max}-w_{min})}{t_{max}} w=wmaxtmaxt(wmaxwmin)
其中, w m a x w_{max} wmax 表示惯性权重最大值, w m i n w_{min} wmin 表示惯性权重最小值, t t t 表示当前迭代步数。

3.2 自适应法

3.2.1 根据全局最优点距离进行调整

目前大多采用非线性动态惯性权重系数公式,如下:
w = { w m i n − ( w m a x − w m i n ) ∗ ( f − f m i n ) f a v g − f m i n , f ≤ f a v g w m a x , f > f a v g w=\left\{ \begin{matrix} w_{min}-\frac{(w_{max}-w_{min})*(f-f_{min})}{f_{avg}-f_{min}},\quad f \leq f_{avg}\\ \\ w_{max},\quad f>f_{avg}\\ \end{matrix} \right. w=wminfavgfmin(wmaxwmin)(ffmin),ffavgwmax,f>favg
其中, f f f 表示粒子实时的目标函数值, f a v g f_{avg} favg f m i n f_{min} fmin 分别表示当前所有粒子的平均值和最小目标值。

从上面公式可以看出,惯性权重随着粒子目标函数值的改变而改变。当粒子目标值分散时,减小惯性权重;粒子目标值一致时,增加惯性权重。

3.2.2 依据早熟收敛程度和适应值进行调整权重

根据群里的早熟收敛程度和个体适应值,可以确定惯性权重的变化。

设定粒子 p i p_i pi 的适应值为 f i f_i fi,最优粒子适应度为 f m i n f_{min} fmin,则粒子群的平均适应值是 f a v g = 1 n ∑ i = 1 n f i f_{avg}=\frac{1}{n} \sum_{i=1}^{n}f_i favg=n1i=1nfi,将优于平均适应值的粒子适应值求平均(记为 f a v g ′ f_{avg}^{'} favg),定义 Δ = ∣ f m − f a v g ′ ∣ \Delta=|f_m-f_{avg}^{'}| Δ=fmfavg

依据 f i f_i fi f m f_m fm f a v g f_{avg} favg 将群体分为 3 3 3 个子群,分别进行不同的自适应操作。其惯性权重的调整如下:

(1)如果 f i f_i fi 优于 f a v g ′ f_{avg}^{'} favg,那么 w = w − ( w − w m i n ) ∗ ∣ f i − f a v g ′ f m − f a v g ′ ∣ w=w-(w-w_{min})*|\frac{f_i-f_{avg}^{'}}{f_m-f_{avg}^{'}}| w=w(wwmin)fmfavgfifavg

(2)如果 f i f_i fi 优于 f a v g ′ f_{avg}^{'} favg,且次于 f m f_m fm,则惯性权重不变。

(3)如果 f i f_i fi 次于 f a v g ′ f_{avg}^{'} favg,那么 w = 1.5 − 1 1 + k 1 ∗ e x p ( − k 2 ∗ Δ ) w=1.5-\frac{1}{1+k_1*exp(-k_2*\Delta)} w=1.51+k1exp(k2Δ)1

其中, k 1 k_1 k1 k 2 k_2 k2 为控制参数, k 1 k_1 k1 用来控制 w w w 的上限, k 2 k_2 k2 主要用来控制 w = 1.5 − 1 1 + k 1 ∗ e x p ( − k 2 ∗ Δ ) w=1.5-\frac{1}{1+k_1*exp(-k_2*\Delta)} w=1.51+k1exp(k2Δ)1 的调节能力。

当算法停止时,如果粒子的分布分散,则 Δ \Delta Δ 比较大, w w w 变小,此时算法局部搜索能力加强,从而使得群体趋于收敛;若粒子的分布聚集,则 Δ \Delta Δ 比较小, w w w 变大,使粒子具有较强的探查能力,从而有效地跳出局部最优。

4 混合粒子群算法

混合策略PSO就是将其他进化算法或传统优化算法或其他技术应用到PSO中,用于提高局部开发能力、增强收敛速度与精度,或者提高粒子多样性、增强粒子地全局探索能力。包括基于模拟退火的混合粒子群算法、基于杂交的混合粒子群算法等。下面以基于的混合粒子群算法为例。

基于的混合粒子群算法是借鉴遗传算法中杂交的概念,在每次迭代中,根据杂交率选取指定数量的粒子放入杂交池内,池内的粒子随机两两杂交,产生同样数目的子代粒子( n n n),并用子代粒子替代父代粒子( m m m)。子代位置由父代位置进行交叉得到
n x = i ∗ m x ( 1 ) + ( 1 − i ) ∗ m x ( 2 ) nx=i*mx(1)+(1-i)*mx(2) nx=imx(1)+(1i)mx(2)
其中, m x mx mx 表示父代粒子的位置, n x nx nx 表示子代粒子的位置, i i i 0 0 0 1 1 1 之间的随机数。子代的速度由下式计算:
n v = m v ( 1 ) + m v ( 2 ) ∣ m v ( 1 ) + m v ( 2 ) ∣ ∣ m v ∣ nv=\frac{mv(1)+mv(2)}{|mv(1)+mv(2)|}|mv| nv=mv(1)+mv(2)mv(1)+mv(2)mv
其中, m v mv mv 表示父代粒子的速度, n v nv nv 表示子代粒子的速度。

参考文献

[1] MATLAB优化算法/科学与工程计算技术丛书

  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
求解最优化问题一直是遗传算法的经典应用领域,但是对于不同的最优化问题,遗传算法往往要重新设计“交叉”、“变异”算子,甚至要开发新的进化操作;另外遗传算法不容易理解、操作复杂、大多数情况下效率比较低。所以,寻求新的解决最优问题的算法一直是研究热点。对约束优化问题的求解,已有许多算法被提出。传统的方法有梯度映射法、梯度下降法、惩罚函数法、障碍函数法等,但是单纯使用这些方法不是效率很低就是适用范围有限。而进化计算由于其求解过程不依赖于目标函数的解析性质,同时又能以较大的概率收敛于全局最优解,所以用进化算法求解约束优化问题已是一个很有意义的研究方向。用进化计算求解约束优化问题时,最基本的思想就是:首先设法把个体带入可行域,然后再在可行域内找到尽可能好的解。求解约束优化问题最困难的主要是对约束条件的处理。目前,使用最广泛的对约束条件的处理方法是惩罚函数法。基于惩罚函数的进化算法一般来说都包含有许多惩罚系数,在实际应用时,只有正确设置这些系数才可能获得可行解,而要获得适当的惩罚系数则需要大量的实验为基础。在科学实践、工程系统设计及社会生产和经济发展中还有一类很常见到优化问题:多目标优化问题,因此研究多目标优化问题具有十分重要的意义。由于多目标优化问题不存在唯一的全局最优解,所以求解多目标优化问题实际上就是要寻找一个解的集合。传统的多目标优化方法是将多目标问题通过加权求和转化为单目标问题来处理的。但是,这种方法要求对问题本身有很强的先验认识,难以处理真正的多目标问题。进化计算由于其是一种基于种群操作的计算技术,可以隐并行的搜索解空间中的多个解,并能利用不同解之间的相似性来提高其并发求解的效率,因此进化计算比较合求解多目标优化问题。 粒子群优化(Particle Swarm Optimization, PSO)经济论文www.youzhiessay.com。 算法是由Kennedy和Eberhart于1995年提出的一种优化算法。它是对生物群体的社会行为进行的一种模拟,它最早源于对鸟群觅食行为的研究。在生物群体中存在着个体与个体、个体与群体间的相互作用、相互影响的行为,这种行为体现的是一种存在于生物群体中的信息共享的机制。PSO算法就是对这种社会行为的模拟,即利用信息共享机制,使得个体间可以相互借鉴经验,从而促进整个群体的发展。 PSO算法和遗传算法(Genetic Algorithm,GA)类似,也是一种基于迭代的优化工具,系统初始化为一组随机解,通过某种方式迭代寻找最优解。但PSO没有GA的“选择”、“交叉”、“变异”算子,编码方式也比GA简单。并且很多情况下要比遗传算法更有效率,所以基于粒子群算法处理优化问题中的是一个很有意义的研究方向。由于PSO算法容易理解、易于实现,所以PSO算法发展很快。在函数优化、系统控制、神经网络训练等领域得到广泛应用。 因此,本文在PSO算法基础上对PSO算法处理优化问题的能力及基于PSO算法,毕业论文网www.594wm.com,求解约束优化问题和多目标优化问题进行了深入研究。主要体现在以下几个方面:第一、介绍了有关粒子群优化算法的背景知识,阐述了算法产生的基础。 接着讨论了粒子群优化算法的发展和基本原理,并给出了算法的流程。通过对算法公式和参数设置进行的综合分析以及和其它优化算法进行比较,给出了粒子群优化算法实际使用时的指导原则。并讨论了算法在一些领域中的成功应用。第二、就粒子群优化算法在求解最优化问题中的应用,对无约束和有约束最优化问题分别设计了基于粒子群优化算法的不同的求解方法。对于无约束优化问题,本文直接用目标函数作为适应度函数,采用实数编码。对于约束优化问题,本文采用一种惩罚函数作为粒子群优化算法的适应度函数。 对两种问题分别应用了不同的测试函数对其进行了测试,结果表明了粒子群优化算法求解最优化问题的可行性。第三、针对约束优化问题本文在引入了半可行域的概念的基础上提出了竞争选择的新规则,并改进了基于竞争选择和惩罚函数的进化算法的适应度函数。并且本文规定了半可行解性质:半可行解优于不可行解,但劣于可行解。在半可行域内个体可直接用目标函数来评价。第四、结合粒子群优化算法本身的特点,本文设计了选择算子对半可行域进行操作,从而提出了利用PSO算法求解约束优化问题的新的进化算法。 第五、由于多目标优化问题和单目标优化问题是有本质的区别的:前者一般是一组或几组连续解的集合,而后者只是单个解或一组连续的解,所以PSO算法不能直接应用于多目标优化问题。因此本文对PSO全局极值和个体极值选取方式做了改进,提出了最优解评估选取的PSO算法,用于对多目标优化问题的非劣最优解集的搜索。实验结果证明了算法的有效性。粒子群算法的收敛性、基于粒子群算法求解不连续、多可行域的约束优化问题、基于粒子群算法求解高维多目标优化问题是本文的后续研究工作。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值