-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdivmyFitness_Match.m
98 lines (73 loc) · 3.39 KB
/
divmyFitness_Match.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
%适应度函数
%浮点数编码
%输入:
% GA 是最小化
%Fit_paras =
%struct('sNCBP',[NCBP_min,NCBP_max],'sGBest_Curr',GBest(iteration),'sSizePSO',[size_particles,dim_objfunction],...
% 'sc1_local_current',c1_local_current(:,iteration),'sc2_global_current',c2_global_current(:,iteration), ...
% 'sV_Curr', V_Current(:,:,iteration), 'sParticles_Curr', Particles(:,:,iteration), ...
% 'slocal_minimum_particle_Curr', local_minimum_particle(:,:,iteration) , ...
% 'sglobal_minimum_particle_Curr', global_minimum_particle(:,:,iteration), ...
% 'sabs_max_V', abs_max_V,'sabs_max_particle',abs_max_particle,...
% 'sLBest_Curr', LBest(:,iteration),'sW_Current',W(:,:,iteration))
%输出:result_Fitness,文化基因的适应度
%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%%
%%%% 每个基因与粒子1对1随机匹配
%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%% %%%%%%%%%%%%
function result_Fitness = divmyFitness_Match ( x, Fit_paras )
%%%%%%%%%%%%%%%% 两个全局变量用于匹配基因和粒子
global fitnesstimes;
global MatchGenesWithParticles;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%
result_Fitness = 0;
delta_g = decode_myga(x);
num_var = size(delta_g,2);
if (num_var ~= 11)
'error in CG'
exit(1)
end
size_particle = Fit_paras.sSizePSO(1);
dim_objfunction = Fit_paras.sSizePSO(2);
%%%%%%%%%%%%%%%%使用全局变量%%%%%%%%%%%%%%%%%%%%%%%
index_temp = MatchGenesWithParticles(fitnesstimes);
%update W
CBPE = [Fit_paras.sNCBP(1), Fit_paras.sNCBP(2), Fit_paras.sGBest_Curr]; %计算NCBPE时我们还是针对整个种群来计算,减少计算量,只是每个粒子的惯性权重不一样
W_NextIter = divFAUpdateWeight_FCAPSO(CBPE, Fit_paras.sW_Current, delta_g); %整个权重矩阵每一列都相同
clear V_Next;
clear Particles_Next;
%update velocity
V_Next = W_NextIter(index_temp,1) * Fit_paras.sV_Curr(index_temp,:)...
- rand * Fit_paras.sc1_local_current(1) ...
* ( Fit_paras.sParticles_Curr(index_temp,:) - Fit_paras.slocal_minimum_particle_Curr(index_temp,:) ) ...
- rand * Fit_paras.sc2_global_current(1)...
* ( Fit_paras.sParticles_Curr(index_temp,:) - Fit_paras.sglobal_minimum_particle_Curr(index_temp,:) );
%越界检查V
V_Next = min(V_Next,Fit_paras.sabs_max_V); %让全部速度小于abs_max_V
V_Next = max(V_Next,-Fit_paras.sabs_max_V); %让全部速度大于-abs_max_V
%particle fly
Particles_Next = Fit_paras.sParticles_Curr(index_temp,:) + V_Next;
%越界检查X
Particles_Next = min(Particles_Next, Fit_paras.sabs_max_particle);
Particles_Next = max(Particles_Next, -Fit_paras.sabs_max_particle);
%Compute the ObjFunction Value for each Particle
F_Next = ComputeObjFunctionForParticle(Particles_Next);
%用局部最优值更新值与局部最优比较,更新适应度
result_Fitness = 0;
if ( F_Next < Fit_paras.sLBest_Curr(index_temp) )
%如果最优值小了,更新
result_Fitness = 1 + W_NextIter(index_temp,1);
end
%如果全局最优值获得更新,那么这个基因的适应度比较高
if ( F_Next < Fit_paras.sGBest_Curr )
%如果变小,更新
result_Fitness = 3;
end
result_Fitness = 10 - result_Fitness;
%%%%%%%%%%%%%%%更新全局变量%%%%%%%%%%%%%%%%%%%%
fitnesstimes = fitnesstimes + 1;
if fitnesstimes == (size_particle + 1)
fitnesstimes = 1;
end
if fitnesstimes == 1
[Ytemp,MatchGenesWithParticles] = sort(rand(1,size_particle));
end