-
Notifications
You must be signed in to change notification settings - Fork 0
/
F_generator.m
36 lines (31 loc) · 1.36 KB
/
F_generator.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
function Offspring = F_generator(r1,r2,r3,Boundary, F, CR)
%微分进化,变异产生一个子代
D = length(r1);
MaxValue = Boundary(1,:);
MinValue = Boundary(2,:);
%微分进化参数
%CR = 0.8; %控制参数
%F =0.5; %控制参数
ProM = 1/D; %变异概率
DisM = 20; %变异参数
F=round(rand(1,D));
%微分进化
Offspring = r1;
Temp = rand(1,D)<=CR;
Offspring(Temp) = xor(Offspring(Temp),and(F(Temp),(or(r2(Temp),r3(Temp)))));
% %多项式变异
% k = rand(1,D);
% miu = rand(1,D);
% Temp = (k<=ProM & miu<0.5);
% Offspring(Temp) = Offspring(Temp)+(MaxValue(Temp)-MinValue(Temp)).*((2.*miu(Temp)+(1-2.*miu(Temp)).*(1-(Offspring(Temp)-MinValue(Temp))./(MaxValue(Temp)-MinValue(Temp))).^(DisM+1)).^(1/(DisM+1))-1);
% Temp = (k<=ProM & miu>=0.5);
% Offspring(Temp) = Offspring(Temp)+(MaxValue(Temp)-MinValue(Temp)).*(1-(2.*(1-miu(Temp))+2.*(miu(Temp)-0.5).*(1-(MaxValue(Temp)-Offspring(Temp))./(MaxValue(Temp)-MinValue(Temp))).^(DisM+1)).^(1/(DisM+1)));
%
% %越界处理
% randupper=rand(1,D);
% randlower=rand(1,D);
%
% Offspring(Offspring>MaxValue) = MaxValue(Offspring>MaxValue)-randupper(Offspring>MaxValue);
% Offspring(Offspring<MinValue) = MinValue(Offspring<MinValue)+randlower(Offspring<MinValue);
%Offspring = Offspring>0.5;
end