文档库 最新最全的文档下载
当前位置:文档库 › PSO参数优化

PSO参数优化

PSO参数优化
PSO参数优化

1.利用PSO参数寻优函数(分类问题):psoSVMcgForClass

2.[bestCVaccuracy,bestc,bestg,pso_option]=

3.psoSVMcgForClass(train_label,train,pso_option)

4.输入:

5.train_label:训练集的标签,格式要求与svmtrain相同。

6.train:训练集,格式要求与svmtrain相同。

7.pso_option:PSO中的一些参数设置,可不输入,有默认值,详细请看代码的帮

助说明。

8.输出:

9.bestCVaccuracy:最终CV意义下的最佳分类准确率。

10.bestc:最佳的参数c。

11.bestg:最佳的参数g。

12.pso_option:记录PSO中的一些参数。

13.==========================================================

14.利用PSO参数寻优函数(回归问题):psoSVMcgForRegress

15.[bestCVmse,bestc,bestg,pso_option]=

16.psoSVMcgForRegress(train_label,train,pso_option)

17.其输入输出与psoSVMcgForClass类似,这里不再赘述。

复制代码

psoSVMcgForClass源代码:

1.function [bestCVaccuarcy,bestc,bestg,pso_option] =

psoSVMcgForClass(train_label,train,pso_option)

2.% psoSVMcgForClass

3.

4.%%

5.% by faruto

6.%Email:patrick.lee@https://www.wendangku.net/doc/0b4336319.html, QQ:516667408

https://www.wendangku.net/doc/0b4336319.html,/faruto BNU

7.%last modified 2010.01.17

8.

9.%% 若转载请注明:

10.% faruto and liyang , LIBSVM-farutoUltimateVersion

11.% a toolbox with implements for support vector machines based on libsvm,

2009.

12.%

13.% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for

14.% support vector machines, 2001. Software available at

15.% https://www.wendangku.net/doc/0b4336319.html,.tw/~cjlin/libsvm

16.%% 参数初始化

17.if nargin == 2

18. pso_option =

struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ...

19. 'k',0.6,'wV',1,'wP',1,'v',5, ...

20. 'popcmax',10^2,'popcmin',10^(-1),'popgmax',10^3,'popgmin',1

0^(-2));

21.end

22.% c1:初始为1.5,pso参数局部搜索能力

23.% c2:初始为1.7,pso参数全局搜索能力

24.% maxgen:初始为200,最大进化数量

25.% sizepop:初始为20,种群最大数量

26.% k:初始为0.6(k belongs to [0.1,1.0]),速率和x的关系(V = kX)

27.% wV:初始为1(wV best belongs to [0.8,1.2]),速率更新公式中速度前面的

弹性系数

28.% wP:初始为1,种群更新公式中速度前面的弹性系数

29.% v:初始为3,SVM Cross Validation参数

30.% popcmax:初始为100,SVM 参数c的变化的最大值.

31.% popcmin:初始为0.1,SVM 参数c的变化的最小值.

32.% popgmax:初始为1000,SVM 参数g的变化的最大值.

33.% popgmin:初始为0.01,SVM 参数c的变化的最小值.

34.

35.Vcmax = pso_option.k*pso_option.popcmax;

36.Vcmin = -Vcmax ;

37.Vgmax = pso_option.k*pso_option.popgmax;

38.Vgmin = -Vgmax ;

39.

40.eps = 10^(-3);

41.

42.%% 产生初始粒子和速度

43.for i=1:pso_option.sizepop

44.

45. % 随机产生种群和速度

46. pop(i,1) =

(pso_option.popcmax-pso_option.popcmin)*rand+pso_option.popcmin; 47. pop(i,2) =

(pso_option.popgmax-pso_option.popgmin)*rand+pso_option.popgmin;

48. V(i,1)=Vcmax*rands(1,1);

49. V(i,2)=Vgmax*rands(1,1);

50.

51. % 计算初始适应度

52. cmd = ['-v ',num2str(pso_option.v),' -c ',num2str( pop(i,1) ),' -g

',num2str( pop(i,2) )];

53. fitness(i) = svmtrain(train_label, train, cmd);

54. fitness(i) = -fitness(i);

55.end

56.

57.% 找极值和极值点

58.[global_fitness bestindex]=min(fitness); % 全局极值

59.local_fitness=fitness; % 个体极值初始化

60.

61.global_x=pop(bestindex,:); % 全局极值点

62.local_x=pop; % 个体极值点初始化

63.

64.% 每一代种群的平均适应度

65.avgfitness_gen = zeros(1,pso_option.maxgen);

66.

67.%% 迭代寻优

68.for i=1:pso_option.maxgen

69.

70. for j=1:pso_option.sizepop

71.

72. %速度更新

73. V(j,:) = pso_option.wV*V(j,:) +

pso_option.c1*rand*(local_x(j,:) - pop(j,:)) +

pso_option.c2*rand*(global_x - pop(j,:));

74. if V(j,1) > Vcmax

75. V(j,1) = Vcmax;

76. end

77. if V(j,1) < Vcmin

78. V(j,1) = Vcmin;

79. end

80. if V(j,2) > Vgmax

81. V(j,2) = Vgmax;

82. end

83. if V(j,2) < Vgmin

84. V(j,2) = Vgmin;

85. end

86.

87. %种群更新

88. pop(j,:)=pop(j,:) + pso_option.wP*V(j,:);

89. if pop(j,1) > pso_option.popcmax

90. pop(j,1) = pso_option.popcmax;

91. end

92. if pop(j,1) < pso_option.popcmin

93. pop(j,1) = pso_option.popcmin;

94. end

95. if pop(j,2) > pso_option.popgmax

96. pop(j,2) = pso_option.popgmax;

97. end

98. if pop(j,2) < pso_option.popgmin

99. pop(j,2) = pso_option.popgmin;

100. end

102. % 自适应粒子变异

103. if rand>0.5

104. k=ceil(2*rand);

105. if k == 1

106. pop(j,k) = (20-1)*rand+1;

107. end

108. if k == 2

109. pop(j,k) =

(pso_option.popgmax-pso_option.popgmin)*rand + pso_option.popgmin; 110. end

111. end

112.

113. %适应度值

114. cmd = ['-v ',num2str(pso_option.v),' -c

',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];

115. fitness(j) = svmtrain(train_label, train, cmd);

116. fitness(j) = -fitness(j);

117.

118. cmd_temp = ['-c ',num2str( pop(j,1) ),' -g ',num2str( pop(j,2) )];

119. model = svmtrain(train_label, train, cmd_temp);

120.

121. if fitness(j) >= -65

122. continue;

123. end

124.

125. %个体最优更新

126. if fitness(j) < local_fitness(j)

127. local_x(j,:) = pop(j,:);

128. local_fitness(j) = fitness(j);

129. end

130.

131. if abs( fitness(j)-local_fitness(j) )<=eps && pop(j,1) < local_x(j,1)

132. local_x(j,:) = pop(j,:);

133. local_fitness(j) = fitness(j);

134. end

135.

136. %群体最优更新

137. if fitness(j) < global_fitness

138. global_x = pop(j,:);

139. global_fitness = fitness(j);

140. end

142. if abs( fitness(j)-global_fitness )<=eps && pop(j,1) < global_x(1)

143. global_x = pop(j,:);

144. global_fitness = fitness(j);

145. end

146.

147. end

148.

149. fit_gen(i) = global_fitness;

150. avgfitness_gen(i) = sum(fitness)/pso_option.sizepop;

151.end

152.

153.%% 结果分析

154.figure;

155.hold on;

156.plot(-fit_gen,'r*-','LineWidth',1.5);

157.plot(-avgfitness_gen,'o-','LineWidth',1.5);

158.legend('最佳适应度','平均适应度',3);

159.xlabel('进化代数','FontSize',12);

160.ylabel('适应度','FontSize',12);

161.grid on;

162.

163.% print -dtiff -r600 pso

164.

165.bestc = global_x(1);

166.bestg = global_x(2);

167.bestCVaccuarcy = -fit_gen(pso_option.maxgen);

168.

169.line1 = '适应度曲线Accuracy[PSOmethod]';

170.line2 = ['(参数c1=',num2str(pso_option.c1), ...

171. ',c2=',num2str(pso_option.c2),',终止代数=', ...

172. num2str(pso_option.maxgen),',种群数量pop=', ...

173. num2str(pso_option.sizepop),')'];

174.% line3 = ['Best c=',num2str(bestc),' g=',num2str(bestg), ... 175.% ' CVAccuracy=',num2str(bestCVaccuarcy),'%'];

176.% title({line1;line2;line3},'FontSize',12);

177.title({line1;line2},'FontSize',12);

PSO参数优化

1.利用PSO参数寻优函数(分类问题):psoSVMcgForClass 2.[bestCVaccuracy,bestc,bestg,pso_option]= 3.psoSVMcgForClass(train_label,train,pso_option) 4.输入: 5.train_label:训练集的标签,格式要求与svmtrain相同。 6.train:训练集,格式要求与svmtrain相同。 7.pso_option:PSO中的一些参数设置,可不输入,有默认值,详细请看代码的帮 助说明。 8.输出: 9.bestCVaccuracy:最终CV意义下的最佳分类准确率。 10.bestc:最佳的参数c。 11.bestg:最佳的参数g。 12.pso_option:记录PSO中的一些参数。 13.========================================================== 14.利用PSO参数寻优函数(回归问题):psoSVMcgForRegress 15.[bestCVmse,bestc,bestg,pso_option]= 16.psoSVMcgForRegress(train_label,train,pso_option) 17.其输入输出与psoSVMcgForClass类似,这里不再赘述。 复制代码 psoSVMcgForClass源代码: 1.function [bestCVaccuarcy,bestc,bestg,pso_option] = psoSVMcgForClass(train_label,train,pso_option) 2.% psoSVMcgForClass 3. 4.%% 5.% by faruto 6.%Email:patrick.lee@https://www.wendangku.net/doc/0b4336319.html, QQ:516667408 https://www.wendangku.net/doc/0b4336319.html,/faruto BNU 7.%last modified 2010.01.17 8. 9.%% 若转载请注明: 10.% faruto and liyang , LIBSVM-farutoUltimateVersion 11.% a toolbox with implements for support vector machines based on libsvm, 2009. 12.% 13.% Chih-Chung Chang and Chih-Jen Lin, LIBSVM : a library for 14.% support vector machines, 2001. Software available at 15.% https://www.wendangku.net/doc/0b4336319.html,.tw/~cjlin/libsvm 16.%% 参数初始化 17.if nargin == 2 18. pso_option = struct('c1',1.5,'c2',1.7,'maxgen',200,'sizepop',20, ... 19. 'k',0.6,'wV',1,'wP',1,'v',5, ...

(完整word版)用MATLAB编写PSO算法及实例

用MATLAB 编写PSO 算法及实例 1.1 粒子群算法 PSO 从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 假设在一个维的目标搜索空间中,有个粒子组成一个群落,其中第个粒子表示为一个维的向量 ,。 第个粒子的“飞行 ”速度也是一个维的向量,记为 ,。 第个粒子迄今为止搜索到的最优位置称为个体极值,记为 ,。 整个粒子群迄今为止搜索到的最优位置为全局极值,记为 在找到这两个最优值时,粒子根据如下的公式(1.1)和( 1.2)来更新自己的速度和位置: (1.1) (1. 2) 其中:和为学习因子,也称加速常数(acceleration constant),和为[0,1]范围内的均匀随机数。式(1.1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己D N i D ),,,(21iD i i i x x x X N i ,,2,1 i D ),,21i iD i i v v v V ,( 3,2,1 i i ),,,(21iD i i best p p p p N i ,,2,1 ),,,(21gD g g best p p p g ) (2211id gd id id id id x p r c x p r c v w v id id id v x x 1c 2c 1r 2r

标准粒子群算法(PSO)及其Matlab程序和常见改进算法

一、粒子群算法概述 粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy博士提出,源于对鸟群捕食的行为研究。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。 PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个”极值”来更新自己。第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 二、算法原理 粒子群算法采用常数学习因子,及惯性权重,粒子根据如下的公式更新自己的速度和位置。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 三、算法步骤 1、随机初始化种群中各微粒的位置和速度; 2、评价个粒子的适应度,将各粒子的位置和适应度储存在各微粒的pbest(Q bi)中,将所有pbest中适应度最优的个体的位置和适应度存储在gbest(Q bg)中。 3、更新粒子的速度和位移。 V ki=ωk V i?1i+c1r1(Q bi?Q k?1i)+c2r2(Q bg?Q k?1i)Q ki=Q k?1i+V ki 4、对每个微粒,与其前一个最优位置比较,如果较好,则将其作为当前的最优位置。 5、比较当前所有的pbest和上一迭代周期的gbest,更新gbest。 6、若满足停止条件(达到要求精度或迭代次数),搜索停止,输出结果,否则,返回2。

粒子群算法解决函数优化问题

粒子群算法解决函数优化问题 1、群智能算法研究背景 粒子群优化算法(Particle Swarm Optimization,PSO)是由Kennedy 和Eberhart 在研究鸟类和鱼类的群体行为基础上于1995 年提出的一种群智能算法,其思想来源于人工生命和演化计算理论,模仿鸟群飞行觅食行为,通过鸟集体协作使群体达到优。 PSO算法作为一种新的群智能算法,可用于解决大量非线性、不可微和多峰值的复杂函数优化问题,并已广泛应用于科学和工程领域,如函数优化、神经网络训练、经济调度、模式识别与分类、结构设计、电磁场和任务调度等工程优化问题等。 PSO算法从提出到进一步发展,仅仅经历了十几年的时间,算法的理论基础还很薄弱,自身也存在着收敛速度慢和早熟的缺陷。如何加快粒子群算法的收敛速度和避免出现早熟收敛,一直是大多数研究者关注的重点。因此,对粒子群算法的分析改进不仅具有理论意义,而且具有一定的实际应用价值。 2、国内外研究现状 对PSO算法中惯性权重的改进:Poli等人在速度更新公式中引入惯性权重来更好的控制收敛和探索,形成了当前的标准PSO算法。 研究人员进行了大量的研究工作,先后提出了线性递减权值( LDIW)策略、模糊惯性权值( FIW) 策略和随机惯性权值( RIW) 策略。其中,FIW 策略需要专家知识建立模糊规则,实现难度较大,RIW 策略被用于求解动态系统,LDIW策略相对简单且收敛速度快, 任子晖,王坚于2009 年,又提出了基于聚焦距离变化率的自适应惯性权重PSO算法。 郑春颖和郑全弟等人,提出了基于试探的变步长自适应粒子群算

法。这些改进的PSO算法既保持了搜索速度快的特点, 又提高了全局搜索的能力。 对PSO算法的行为和收敛性的分析:1999 年采用代数方法对几种典型PSO算法的运行轨迹进行了分析,给出了保证收敛的参数选择范围。在收敛性方面Fransvan den Bergh引用Solis和Wets关于随机性算法的收敛准则,证明了标准PSO算法不能收敛于全局优解,甚至于局部优解;证明了保证收敛的PSO算法能够收敛于局部优解,而不能保证收敛于全局优解。 国内的学者:2006 年,刘洪波和王秀坤等人对粒子群优化算法的收敛性进行分析,指出它在满足收敛性的前提下种群多样性趋于减小,粒子将会因速度降低而失去继续搜索可行解的能力,提出混沌粒子群优化算法。 2008 年,黄翀鹏和熊伟丽等人分析惯性权值因子大小对PSO算法收敛性所带来的影响,对粒子群算法进行了改进。2009 年,高浩和冷文浩等人,分析了速度因子对微粒群算法影响,提出了一种基于Gaussian 变异全局收敛的粒子群算法。并证明了它能以概率 1 收敛到全局优解。 2010 年,为提高粒子群算法的收敛性,提出了基于动力系统的稳定性理论,对惯性权重粒子群模型的收敛性进行了分析,提出了使得在算法模型群模型收敛条件下的惯性权重和加速系数的参数约束关系,使算法在收敛性方面具有显著优越性。在PSO算法中嵌入别的算法的思想和技术。 1997年,李兵和蒋慰孙提出混沌优化方法; 1998年,Angeline在PSO算法中引入遗传算法中的选择算子,该算法虽然加快了算法的收敛速度,但同时也使算法陷入局部优的概率大增,特别是在优化Griewank 基准函数的优值时得到的结果不理想; 2004 年,高鹰和谢胜利将混沌寻优思想引入到粒子群优化算法中,首先对当前群体中的优粒子进行混沌寻优, 再用混沌寻优的结果随机替换群体中的一个粒子,这样提出另一种混沌粒子群优化算法。

用MATLAB编写PSO算法及实例

用MATLAB编写PSO算法及实例

用MATLAB 编写PSO 算法及实例 1.1 粒子群算法 PSO 从这种模型中得到启示并用于解决优化问题。PSO 中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为粒子。所有的粒子都有一个由被优化的函数决定的适值( fitness value) ,每个粒子还有一个速度决定它们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。 PSO 初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己;第一个就是粒子本身所找到的最优解,这个解称为个体极值;另一个极值是整个种群目前找到的最优解,这个极值是全局极值。另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。 假设在一个维的目标搜索空间中,有个粒子组成一个群落,其中第个粒子表示为一个维的向量 ,。 第个粒子的“飞行 ”速度也是一个维的向量,记为 ,。 第个粒子迄今为止搜索到的最优位置称为个体极值,记为 ,。 整个粒子群迄今为止搜索到的最优位置为全局极值,记为 在找到这两个最优值时,粒子根据如下的公式(1.1)和( 1.2)来更新自己的速度 D N i D ),,,(21iD i i i x x x X =N i ,,2,1 =i D ),,21i iD i i v v v V ,(=3,2,1 =i i ),,,(21iD i i best p p p p =N i ,,2,1 =),,,(21gD g g best p p p g =

和位置: (1.1) (1. 2) 其中:和为学习因子,也称加速常数(acceleration constant),和为 [0,1]范围内的均匀随机数。式(1.1)右边由三部分组成,第一部分为“惯性(inertia)”或“动量(momentum)”部分,反映了粒子的运动“习惯(habit)”,代表粒子有维持自己先前速度的趋势;第二部分为“认知(cognition)”部分,反映了粒子对自身历史经验的记忆(memory)或回忆(remembrance),代表粒子有向自身历史最佳位置逼近的趋势;第三部分为“社会(social)”部分,反映了粒子间协同合作与知识共享的群体历史经验。 二、算法设计 2.1 算法流程图 2.2 算法实现 算法的流程如下: ()) (2211id gd id id id id x p r c x p r c v w v -+-+*=id id id v x x +=1c 2c 1r 2 r

利用PSO优化SVM

%% 清空环境 clc clear load wine; train = [wine(1:30,:);wine(60:95,:);wine(131:153,:)]; train_label = [wine_labels(1:30);wine_labels(60:95);wine_labels(131:153)]; test = [wine(31:59,:);wine(96:130,:);wine(154:178,:)]; test_label = [wine_labels(31:59);wine_labels(96:130);wine_labels(154:178)]; [train,pstrain] = mapminmax(train'); pstrain.ymin = 0; pstrain.ymax = 1; [train,pstrain] = mapminmax(train,pstrain); [test,pstest] = mapminmax(test'); pstest.ymin = 0; pstest.ymax = 1; [test,pstest] = mapminmax(test,pstest); train = train'; test = test'; %% 参数初始化 %粒子群算法中的两个参数 c1 = 1.6; % c1 belongs to [0,2] c2 = 1.5; % c2 belongs to [0,2] maxgen=300; % 进化次数 sizepop=30; % 种群规模 popcmax=10^(2); popcmin=10^(-1); popgmax=10^(3); popgmin=10^(-2); k = 0.6; % k belongs to [0.1,1.0]; Vcmax = k*popcmax; Vcmin = -Vcmax ; Vgmax = k*popgmax; Vgmin = -Vgmax ;

PSO算法

群体智能方法:是通过模拟自然界生物群体行为来实现人工智能的一种方法。 群体智能这个概念来自对自然界中生物群体的观察,群居性生物通过协作表现出的宏观智能行为特征被称为群体智能。 群体智能具有如下特点: (1) 控制是分布式的,不存在中心控制。因而它更能够适应当前网络环境下的工作状态,并且具有较强的鲁棒性,即不会由于某一个或几个个体出现故障而影响群体对整个问题的求解。 (2) 群体中的每个个体都能够改变环境,这是个体之间间接通信的一种方式,这种方式被称为“激发工作”。由于群体智能可以通过非直接通信的方式进行信息的传输与合作,因而随着个体数目的增加,通信开销的增幅较小,因此,它具有较好的可扩充性。 (3) 群体中每个个体的能力或遵循的行为规则非常简单,因而群体智能的实现比较方便,具有简单性的特点 (4) 群体表现出来的复杂行为是通过简单个体的交互过程突现出来的智能,因此,群体具有自组织性。 PSO基本原理 最初是为了在二维几何空间图形中优化模拟鸟群不可预测的运动。PSO 算法从这种模型中得到启示并用于解决优化问题。PSO算法中,每个优化问题的潜在解都是搜索空间中的一只鸟,称之为“粒子”。所有的粒子都有一个由目标函数决定的适应值(fitness value),每个粒子都由一个两维的速度变量决定各自飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。PSO算法初始化为一群随机粒子(随机解),然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪两个极值来更新自己。第一个极值就是粒子本身所经历的最优解,这个解被称为个体极值。另一个极值是整个种群目前所经历的最优解,这个极值被称为全局极值。另外也可以只选取整个种群中的一部分作为粒子的邻居,在所有邻居中的极值被称为局部极值。

PSO算法使用简介

PSO算法使用简介 1 PSO工具箱简介 PSOt为PSO的工具箱,该工具箱将PSO算法的核心部分封装起来,提供给用户的为算法的可调参数,用户只需要定义好自己需要优化的函数(计算最小值或者最大值),并设置好函数自变量的取值范围、每步迭代允许的最大变化量(称为最大速度,Max_V)等,即可自行优化。 与遗传算法相比,PSO仅需要调整少数几个参数即可实现函数的优化。该算法对待优化函数没有任何特别的要求(如可微分、时间连续等),因而其通用性极强,对多变量、高度非线性、不连续及不可微的情况更加具有其优势。 该工具箱的使用主要分为几个步骤: 1) 在Matlab中设置工具箱的路径; 2) 定义待优化函数; 3) 调用PSO算法的核心函数:pso_Trelea_vectorized()。 其中第三步最关键,用户需要根据自己的需要设置好参数,可使算法极快收敛。 下面对各个步骤一一介绍。 2 设置工具箱的路径 2.1 在Matlab的命令窗口点击"File-->Set Path....",如下图: 2.2 在弹出的对话框中点击"Add Folder",然后浏览找到工具箱放置的位置,如下图 2.3 若想用到该工具箱所带的测试函数,还需要用如上同样的方法,设置路径指向工具箱下的"testfunctions"文件夹; 2.4 若想用于训练神经网络的训练,设置路径指向工具箱下的"testfunctions"文件夹"nnet" 3 定义待优化函数(参见文件test_func.m) 用户根据自己的需要,定义需要优化的函数。举个例子,若想计算如下二元函数的最小值 z= 0.5*(x-3)^2+0.2*(y-5)^2-0.1 其中自变量x、y的范围均为[-50, 50]。 可按下面的方法定义该待优化函数: %%----------------------------------------------------------------%% function z=test_func(in) nn=size(in); x=in(:,1); y=in(:,2); nx=nn(1); for i=1:nx temp = 0.5*(x(i)-3)^2+0.2*(y(i)-5)^2-0.1; z(i,:) = temp; end %%----------------------------------------------------------------%% 需要特别指出的是:PSO算法的核心函数pso_Trelea_vectorized()自动初始化一组随机

基本pso优化神经网络程序

clc clear all %一、初始化部分 %1.1 预处理样本数据 % 选取训练样本(x,y) for i=1:126 x=0+0.0251*(i-1); y(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; % 待逼近函数 end AllSamIn=0:0.0251:pi; %训练样本输入 AllSamOut=y; %训练样本输出 %选取测试样本 for i=1:125 x=0.0125+0.0251*(i-1); %测试样本输入 ytest(i)=(sin(x)+(x.^2/9+x/3)*exp((-0.5)*(x.^2)))/2; %测试样本输出 end AlltestIn=0.0125:0.0251:(pi-0.0125); AlltestOut=ytest; %归一化训练样本,测试样本 [AlltestInn,minAlltestIn,maxAlltestIn,AlltestOutn,minAlltestOut,maxAlltestOut]= premnmx(AlltestIn,AlltestOut); %测试样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut]= premnmx(AllSamIn,AllSamOut); %训练样本 testIn=AlltestInn; testOut=AlltestOutn; global Ptrain; Ptrain = AllSamInn; global Ttrain; Ttrain = AllSamOutn; %1.2 设置神经网络参数 global indim; %输入层神经元个数 indim=1; global hiddennum; %隐藏层神经元个数 hiddennum=3; global outdim; %输出层神经元个数 outdim=1; global Gpos; %1.3 设置微粒群参数 vmax=0.5; % 速度上限 minerr=1e-7; % 目标误差 wmax=0.95;

Matlab PSO优化RBF的程序

Matlab PSO优化RBF的程序。 找了很久,凡是能找到的都找到了。网上就没有对的。自己写的一直有问题。我有个不完整的。大家看看能不能补全: AllSamIn=[]; AllSamOut=[]; %前向通道数据预设 global minAllSamOut; global maxAllSamOut; % 从总样本中抽取10%的样本作为测试样本,其余作为训练样本 [AllSamInn,minAllSamIn,maxAllSamIn,AllSamOutn,minAllSamOut,maxAllSamOut] = premnmx(AllSamIn,AllSamOut); TesSamIn=[]; TestSamOut=[]; TargetOfTestSam=[]; %测试样本目标 TrainSamIn=AllSamInn; TrainSamOut=AllSamOutn; %样本评估: EvaSamIn=[]; %样本评估输入 EvaSamInn=tramnmx(EvaSamIn,minAllSamIn,maxAllSamIn); %归一化处理 global Ptrain; Ptrain= TrainSamIn; global Ttrain; Ttrain=TrainSamOut; Ptest = TestSamIn; Ttest = TestSamOut; spread=1.2; vmax=0.5; %最大速率

minerr=0.001; %适应度阈值 wmax=0.90; %惯性权重的最大值 wmin=0.30; %惯性权重的最小值 global itmax; itmax=300; %允许的最大迭代步数 c1=2; %学习因子 c2=2; %学习因子 for iter= 1:itmax W(iter)=wmax-((wmax-wmin)/itmax)*iter; %惯性权重下降 end %粒子在a,b之间随机初始化: a=-1; b=1; m=-1; n=1; global N; %粒子种群数目 N=40; global D; %粒子群长度 D=(indim+1)*hiddennum+(hiddennum+1)*outdim; %粒子群位置初始化: rand('state',sum(100*clock)); %产生0-1之间的随机数,粒子在a,b(-1,1)之间初始化 X=a+(b-a)*rand(N,D,1); %产生N行D列由0-1之间的矩阵 V=m+(n-m)*rand(N,D,1); %粒子群速度在m,n即-1和1之间初始化 %粒子群优化RBF神经网络的适应度值 global fvrec;

pso优化算法matlab程序

%------初始格式化------------------------------------------------- clear all; clc; format long; %------给定初始化条件--------------------------------------------- c1=1.4962; %学习因子1 c2=1.4962; %学习因子2 w=0.7298; %惯性权重 MaxDT=1000; %最大迭代次数 D=10; %搜索空间维数(未知数个数) N=40; %初始化群体个体数目 eps=10^(-6); %设置精度(在已知最小值时候用) %------初始化种群的个体(可以在这里限定位置和速度的范围)----------- 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,:),D); y(i,:)=x(i,:); end pg=x(1,:); for i=2:N if fitness(x(i,:),D) 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 fitness(x(i,:),D) p(i)=fitness(x(i,:),D); y(i,:)=x(i,:); %Pg 为全局最优 end if p(i) pg=y(i,:); end end Pbest(t)=fitness(pg,D); end %------最后给出计算结果disp('*************************************************************') disp('函数的全局最优位置为:')

粒子群优化算法参数设置

一.粒子群优化算法综述 1.6粒子群优化算法的参数设置 1.6.1粒子群优化算法的参数设置—种群规模N 种群规模N影响着算法的搜索能力和计算量: PSO对种群规模要求不高,一般取20-40就可以达到很好的求解效果,不过对于比较难的问题或者特定类别的问题,粒子数可以取到100或200。 1.6.2粒子的长度D 粒子的长度D由优化问题本身决定,就是问题解的长度。 粒子的范围R由优化问题本身决定,每一维可以设定不同的范围。 1.6.3最大速度Vmax决定粒子每一次的最大移动距离,制约着算法的探索和开发能力 Vmax的每一维一般可以取相应维搜索空间的10%-20%,甚至100% ,也有研究使用将Vmax按照进化代数从大到小递减的设置方案。 1.6.4惯性权重控制着前一速度对当前速度的影响,用于平衡算法的探索和开发能力 一般设置为从0.9线性递减到0.4,也有非线性递减的设置方案; 可以采用模糊控制的方式设定,或者在[0.5, 1.0]之间随机取值; 设为0.729的同时将c1和c2设1.49445,有利于算法的收敛。 1.6.5压缩因子限制粒子的飞行速度的,保证算法的有效收敛 Clerc0.729,同时c1和c2设为2.05 。 1.6.6加速系数c1和c2 加速系数c1和c2代表了粒子向自身极值pBest和全局极值gBest推进的加速权值。 c1和c2通常都等于2.0,代表着对两个引导方向的同等重视,也存在一些c1和c2不相等的设置,但其范围一般都在0和4之间。研究对c1和c2的自适应调整方案对算法性能的增强有重要意义。 1.6.7终止条件 终止条件决定算法运行的结束,由具体的应用和问题本身确定。将最大循环数设定为500,1000,5000,或者最大的函数评估次数,等等。也可以使用算法

PSO算法简介

粒子群算法简介 一、粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS 理论于1994年正式提出,CAS中的成员称为主体。比如研究鸟群系统,每个鸟在这个系统中就称为主体。主体有适应性,它能够与环境及其他的主体进行交流,并且根据交流的过程“学习”或“积累经验”改变自身结构与行为。整个系统的演变或进化包括:新层次的产生(小鸟的出生);分化和多样性的出现(鸟群中的鸟分成许多小的群);新的主题的出现(鸟寻找食物过程中,不断发现新的食物)。 所以CAS系统中的主体具有4个基本特点(这些特点是粒子群算法发展变化的依据): ?首先,主体是主动的、活动的。 ?主体与环境及其他主体是相互影响、相互作用的,这种影响是系统发展变化的主要动力。 ?环境的影响是宏观的,主体之间的影响是微观的,宏观与微观要有机结合。 ?最后,整个系统可能还要受一些随机因素的影响。 粒子群算法就是对一个CAS系统---鸟群社会系统的研究得出的。 粒子群算法(Particle Swarm Optimization, PSO)最早是由Eberhart和Kennedy于1995年提出,它的基本概念源于对鸟群觅食行为的研究。设想这样一个场景:一群鸟在随机搜寻食物,在这个区域里只有一块食物,所有的鸟都不知道食物在哪里,但是它们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢?最简单有效的就是搜寻目前离食物最近的鸟的周围区域。 PSO算法就从这种生物种群行为特性中得到启发并用于求解优化问题。在PSO中,每个优化问题的潜在解都可以想象成d维搜索空间上的一个点,我们称之为“粒子”(Particle),所有的粒子都有一个被目标函数决定的适应值(Fitness Value ),每个粒子还有一个速度决定他们飞翔的方向和距离,然后粒子们就追随当前的最优粒子在解空间中搜索。Reynolds对鸟群飞行的研究发现。鸟仅仅是追踪它有限数量的邻居但最终的整体结果是整个鸟群好像在一个中心的控制之下.即复杂的全局行为是由简单规则的相互作用引起的。 二、粒子群算法的具体表述 上面罗嗦了半天,那些都是科研工作者写论文的语气,不过,PSO的历史就像上面说的那样。下面通俗的解释PSO算法。

粒子群优化算法(ParticleSwarmOptimizationPSO)是一种相对较新的

粒子群优化算法(Particle Swarm Optimization PSO )是一种相对较新的进化优化算法,它由Eberhart 博士和Kennedy 博士在1995年首次提出。粒子群优化算法源于对鸟类捕食行为的模拟,与遗传算法(GA )相比,它没有选择、交叉、变异等遗传操作,算法参数少,因此算法实现简单。目前,在一些学者的努力下,粒子群优化算法己经广泛应用于函数优化,并在系统辨识、神经网络训练等问题中取得了可喜的进展。自1998年以来,粒子群优化算法逐渐成为进化计算的领域内在遗传算法之后的又一个研究热点。 算法模拟鸟群飞行觅食的行为,通过鸟之间的集体协作使群体达到最优,与遗传算法类似,它也是基于群体迭代,但没有交叉和变异算子,是一种利用群体在解空间中找寻最优粒子进行搜索的计算智能方法。首先,PSO 中每个优化问题的解都是搜索空间中的一个粒子,所有的粒子都有一个由被优化的函数决定的适应值(fitness value ),每个粒子还有一个速度决定他们运动的方向和距离;然后粒子们就追随当前的最优粒子在解的空间中搜索。PSO 初始化为一群随机粒子(随机解);最后通过迭代找到最优解。该方法能快速地产生很好的效果,这样就可以使整个系统的效率有所提高。PSO 的优点在于收敛速度快、设置参数少,简单易实现,算法本身具有深刻的智能背景,既适合科学研究,又特别适合工程应用。 PSO 算法求解优化问题时,所求问题的解就是搜索空间中的每一只鸟的位置,称这些鸟为基本粒子。所有的粒子都由一个被优化的函数决定的适应值(候选解)和一个决定他们飞翔方向和距离的速度。在优化过程中,每个粒子记忆,追随当前的最优粒子,在解空间中进行搜索。PSO 算法初始化为一群随机粒子(随机候选解),然后通过迭代找到最优的解。在每一次迭代的过程中,粒子通过追逐两个极值来更新自己的位置。一个是粒子自身找到的当前最优解称为个体极值pbest ,另一个是整个群体当前找到的最优解,这个解称为全局极值gbest 。图2介绍了PSO 算法的具体流程[14,15]。 在PSO 算法中,每一个可能的解都会表示成一个粒子。每一个粒子都有一个位置坐标x 和一个速率坐标v ,位置坐标和速率坐标分别有以下表达式表示: ,1,2,(,, ,)i i i i N x x x x = (11) ,1,2,(,,,)i i i i N v v v v = (12)

相关文档
相关文档 最新文档