-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathDoRevolution.m
49 lines (36 loc) · 1.28 KB
/
DoRevolution.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
function emp=DoRevolution(emp)
global ProblemSettings;
CostFunction=ProblemSettings.CostFunction;
nVar=ProblemSettings.nVar;
VarSize=ProblemSettings.VarSize;
VarMin=ProblemSettings.VarMin;
VarMax=ProblemSettings.VarMax;
global ICASettings;
pRevolution=ICASettings.pRevolution;
mu=ICASettings.mu;
nmu=ceil(mu*nVar);
sigma=0.1*(VarMax-VarMin);
nEmp=numel(emp);
for k=1:nEmp
NewPos = emp(k).Imp.Position + sigma*randn(VarSize);
NewPos = max(NewPos,VarMin);
NewPos = min(NewPos,VarMax);
jj=randsample(nVar,nmu)';
NewImp=emp(k).Imp;
NewImp.Position(jj)=NewPos(jj);
NewImp.Cost=CostFunction(NewImp.Position);
if NewImp.Cost<emp(k).Imp.Cost
emp(k).Imp = NewImp;
end
for i=1:emp(k).nCol
if rand<=pRevolution
NewPos = emp(k).Col(i).Position + sigma*randn(VarSize);
NewPos = max(NewPos,VarMin);
NewPos = min(NewPos,VarMax);
jj=randsample(nVar,nmu)';
emp(k).Col(i).Position(jj) = NewPos(jj);
emp(k).Col(i).Cost = CostFunction(emp(k).Col(i).Position);
end
end
end
end