-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathjSSA.m
61 lines (55 loc) · 1.22 KB
/
jSSA.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
function [sFeat,Sf,Nf,curve] = jSSA(feat,label,N,max_Iter,HO)
lb = 0;
ub = 1;
thres = 0.5;
fun = @jFitnessFunction;
dim = size(feat,2);
X = zeros(N,dim);
for i = 1:N
for d = 1:dim
X(i,d) = lb + (ub - lb) * rand();
end
end
% Pre
fit = zeros(1,N);
fitF = inf;
curve = inf;
t = 1;
%---Iteration start----------------------------------------------------
while t <= max_Iter
for i = 1:N
fit(i) = fun(feat,label,(X(i,:) > thres),HO);
if fit(i) < fitF
Xf = X(i,:);
fitF = fit(i);
end
end
c1 = 2 * exp(-(4 * t / max_Iter) ^ 2);
for i = 1:N
if i == 1
for d = 1:dim
c2 = rand();
c3 = rand();
if c3 >= 0.5
X(i,d) = Xf(d) + c1 * ((ub - lb) * c2 + lb);
else
X(i,d) = Xf(d) - c1 * ((ub - lb) * c2 + lb);
end
end
else
for d = 1:dim
X(i,d) = (X(i,d) + X(i-1,d)) / 2;
end
end
XB = X(i,:); XB(XB > ub) = ub; XB(XB < lb) = lb;
X(i,:) = XB;
end
curve(t) = fitF;
fprintf('\nIteration %d Best (SSA)= %f',t,curve(t))
t = t + 1;
end
Pos = 1:dim;
Sf = Pos((Xf > thres) == 1);
Nf = length(Sf);
sFeat = feat(:,Sf);
end