|
1 |
| -function [sFeat,Sf,Nf,curve]=jBHHO(feat,label,N,T,HO) |
| 1 | +function [sFeat,Sf,Nf,curve] = jBHHO(feat,label,N,max_Iter,HO) |
2 | 2 |
|
3 |
| -fun=@jFitnessFunction; |
4 |
| -D=size(feat,2); X=zeros(N,D); |
5 |
| -for i=1:N |
6 |
| - for d=1:D |
| 3 | +beta = 1.5; |
| 4 | +ub = 1; |
| 5 | +lb = 0; |
| 6 | + |
| 7 | +fun = @jFitnessFunction; |
| 8 | +dim = size(feat,2); |
| 9 | +X = zeros(N,dim); |
| 10 | +for i = 1:N |
| 11 | + for d = 1:dim |
7 | 12 | if rand() > 0.5
|
8 |
| - X(i,d)=1; |
| 13 | + X(i,d) = 1; |
9 | 14 | end
|
10 | 15 | end
|
11 | 16 | end
|
12 |
| -fitR=inf; fit=zeros(1,N); Y=zeros(1,D); Z=zeros(1,D); |
13 |
| -beta=1.5; ub=1; lb=0; t=1; curve=inf; |
14 |
| -%---Iteration start------------------------------------------------------- |
15 |
| -while t <= T |
16 |
| - for i=1:N |
17 |
| - fit(i)=fun(feat,label,X(i,:),HO); |
| 17 | +fitR = inf; |
| 18 | +fit = zeros(1,N); |
| 19 | +Y = zeros(1,dim); |
| 20 | +Z = zeros(1,dim); |
| 21 | + |
| 22 | +curve = inf; |
| 23 | +t = 1; |
| 24 | +%---Iteration start------------------------------------------------- |
| 25 | +while t <= max_Iter |
| 26 | + for i = 1:N |
| 27 | + fit(i) = fun(feat,label,X(i,:),HO); |
18 | 28 | if fit(i) < fitR
|
19 |
| - fitR=fit(i); Xrb=X(i,:); |
| 29 | + fitR = fit(i); |
| 30 | + Xrb = X(i,:); |
20 | 31 | end
|
21 | 32 | end
|
22 |
| - Xm=mean(X,1); |
23 |
| - for i=1:N |
24 |
| - E0=-1+2*rand(); |
25 |
| - E=2*E0*(1-(t/T)); |
| 33 | + X_mu = mean(X,1); |
| 34 | + for i = 1:N |
| 35 | + E0 = -1 + 2 * rand(); |
| 36 | + E = 2 * E0 * (1 - (t / max_Iter)); |
26 | 37 | if abs(E) >= 1
|
27 |
| - q=rand(); |
| 38 | + q = rand(); |
28 | 39 | if q >= 0.5
|
29 |
| - k=randi([1,N]); r1=rand(); r2=rand(); |
30 |
| - for d=1:D |
31 |
| - Xn=X(k,d)-r1*abs(X(k,d)-2*r2*X(i,d)); |
32 |
| - S=1/(1+exp(-Xn)); |
| 40 | + k = randi([1,N]); |
| 41 | + r1 = rand(); |
| 42 | + r2 = rand(); |
| 43 | + for d = 1:dim |
| 44 | + Xn = X(k,d) - r1 * abs(X(k,d) - 2 * r2 * X(i,d)); |
| 45 | + S = 1 / (1 + exp(-Xn)); |
33 | 46 | if rand() < S
|
34 |
| - X(i,d)=1; |
35 |
| - else |
36 |
| - X(i,d)=0; |
| 47 | + X(i,d)= 1; |
| 48 | + else |
| 49 | + X(i,d) = 0; |
37 | 50 | end
|
38 | 51 | end
|
39 | 52 | elseif q < 0.5
|
40 |
| - r3=rand(); r4=rand(); |
41 |
| - for d=1:D |
42 |
| - Xn=(Xrb(d)-Xm(d))-r3*(lb+r4*(ub-lb)); |
43 |
| - S=1/(1+exp(-Xn)); |
| 53 | + r3 = rand(); |
| 54 | + r4 = rand(); |
| 55 | + for d = 1:dim |
| 56 | + Xn = (Xrb(d) - X_mu(d)) - r3 * (lb + r4 * (ub - lb)); |
| 57 | + S = 1 / (1 + exp(-Xn)); |
44 | 58 | if rand() < S
|
45 |
| - X(i,d)=1; |
| 59 | + X(i,d) = 1; |
46 | 60 | else
|
47 |
| - X(i,d)=0; |
| 61 | + X(i,d) = 0; |
48 | 62 | end
|
49 | 63 | end
|
50 | 64 | end
|
51 | 65 | elseif abs(E) < 1
|
52 |
| - J=2*(1-rand()); r=rand(); |
53 |
| - if r >= 0.5 && abs(E) >= 0.5 |
54 |
| - for d=1:D |
55 |
| - DX=Xrb(d)-X(i,d); |
56 |
| - Xn=DX-E*abs(J*Xrb(d)-X(i,d)); |
57 |
| - S=1/(1+exp(-Xn)); |
| 66 | + J = 2 * (1 - rand()); |
| 67 | + r = rand(); |
| 68 | + if r >= 0.5 && abs(E) >= 0.5 |
| 69 | + for d = 1:dim |
| 70 | + DX = Xrb(d) - X(i,d); |
| 71 | + Xn = DX - E * abs(J * Xrb(d) - X(i,d)); |
| 72 | + S = 1 / (1 + exp(-Xn)); |
58 | 73 | if rand() < S
|
59 |
| - X(i,d)=1; |
| 74 | + X(i,d) = 1; |
60 | 75 | else
|
61 |
| - X(i,d)=0; |
| 76 | + X(i,d) = 0; |
62 | 77 | end
|
63 | 78 | end
|
64 |
| - elseif r >= 0.5 && abs(E) < 0.5 |
65 |
| - for d=1:D |
66 |
| - DX=Xrb(d)-X(i,d); |
67 |
| - Xn=Xrb(d)-E*abs(DX); |
68 |
| - S=1/(1+exp(-Xn)); |
| 79 | + elseif r >= 0.5 && abs(E) < 0.5 |
| 80 | + for d = 1:dim |
| 81 | + DX = Xrb(d) - X(i,d); |
| 82 | + Xn = Xrb(d) - E * abs(DX); |
| 83 | + S = 1 / (1 + exp(-Xn)); |
69 | 84 | if rand() < S
|
70 |
| - X(i,d)=1; |
| 85 | + X(i,d) = 1; |
71 | 86 | else
|
72 |
| - X(i,d)=0; |
| 87 | + X(i,d) = 0; |
73 | 88 | end
|
74 | 89 | end
|
75 |
| - elseif r < 0.5 && abs(E) >= 0.5 |
76 |
| - LF=jLevyDistribution(beta,D); |
77 |
| - for d=1:D |
78 |
| - Yn=Xrb(d)-E*abs(J*Xrb(d)-X(i,d)); |
79 |
| - S=1/(1+exp(-Yn)); |
| 90 | + elseif r < 0.5 && abs(E) >= 0.5 |
| 91 | + LF = jLevyDistribution(beta,dim); |
| 92 | + for d = 1:dim |
| 93 | + Yn = Xrb(d) - E * abs(J * Xrb(d) - X(i,d)); |
| 94 | + S = 1 / (1 + exp(-Yn)); |
80 | 95 | if rand() < S
|
81 |
| - Y(d)=1; |
| 96 | + Y(d) = 1; |
82 | 97 | else
|
83 |
| - Y(d)=0; |
| 98 | + Y(d) = 0; |
84 | 99 | end
|
85 |
| - Zn=Y(d)+rand()*LF(d); |
86 |
| - S=1/(1+exp(-Zn)); |
| 100 | + Zn = Y(d) + rand() * LF(d); |
| 101 | + S = 1 / (1 + exp(-Zn)); |
87 | 102 | if rand() < S
|
88 |
| - Z(d)=1; |
| 103 | + Z(d) = 1; |
89 | 104 | else
|
90 |
| - Z(d)=0; |
| 105 | + Z(d) = 0; |
91 | 106 | end
|
92 | 107 | end
|
93 |
| - fitY=fun(feat,label,Y,HO); fitZ=fun(feat,label,Z,HO); |
| 108 | + fitY = fun(feat,label,Y,HO); |
| 109 | + fitZ = fun(feat,label,Z,HO); |
94 | 110 | if fitY <= fit(i)
|
95 |
| - fit(i)=fitY; X(i,:)=Y; |
| 111 | + fit(i) = fitY; |
| 112 | + X(i,:) = Y; |
96 | 113 | end
|
97 | 114 | if fitZ <= fit(i)
|
98 |
| - fit(i)=fitZ; X(i,:)=Z; |
| 115 | + fit(i) = fitZ; |
| 116 | + X(i,:) = Z; |
99 | 117 | end
|
100 |
| - elseif r < 0.5 && abs(E) < 0.5 |
101 |
| - LF=jLevyDistribution(beta,D); |
102 |
| - for d=1:D |
103 |
| - Yn=Xrb(d)-E*abs(J*Xrb(d)-Xm(d)); |
104 |
| - S=1/(1+exp(-Yn)); |
| 118 | + elseif r < 0.5 && abs(E) < 0.5 |
| 119 | + LF = jLevyDistribution(beta,dim); |
| 120 | + for d = 1:dim |
| 121 | + Yn = Xrb(d) - E * abs(J * Xrb(d) - X_mu(d)); |
| 122 | + S = 1 / (1 + exp(-Yn)); |
105 | 123 | if rand() < S
|
106 |
| - Y(d)=1; |
| 124 | + Y(d) = 1; |
107 | 125 | else
|
108 |
| - Y(d)=0; |
| 126 | + Y(d) = 0; |
109 | 127 | end
|
110 |
| - Zn=Y(d)+rand()*LF(d); |
111 |
| - S=1/(1+exp(-Zn)); |
| 128 | + Zn = Y(d) + rand() * LF(d); |
| 129 | + S = 1 / (1 + exp(-Zn)); |
112 | 130 | if rand() < S
|
113 |
| - Z(d)=1; |
| 131 | + Z(d) = 1; |
114 | 132 | else
|
115 |
| - Z(d)=0; |
| 133 | + Z(d) = 0; |
116 | 134 | end
|
117 | 135 | end
|
118 |
| - fitY=fun(feat,label,Y,HO); fitZ=fun(feat,label,Z,HO); |
| 136 | + fitY = fun(feat,label,Y,HO); |
| 137 | + fitZ = fun(feat,label,Z,HO); |
119 | 138 | if fitY <= fit(i)
|
120 |
| - fit(i)=fitY; X(i,:)=Y; |
| 139 | + fit(i) = fitY; |
| 140 | + X(i,:) = Y; |
121 | 141 | end
|
122 | 142 | if fitZ <= fit(i)
|
123 |
| - fit(i)=fitZ; X(i,:)=Z; |
| 143 | + fit(i) = fitZ; |
| 144 | + X(i,:) = Z; |
124 | 145 | end
|
125 | 146 | end
|
126 | 147 | end
|
127 | 148 | end
|
128 |
| - curve(t)=fitR; |
| 149 | + curve(t) = fitR; |
129 | 150 | fprintf('\nIteration %d Best (BHHO)= %f',t,curve(t))
|
130 |
| - t=t+1; |
| 151 | + t = t + 1; |
131 | 152 | end
|
132 |
| -Pos=1:D; Sf=Pos(Xrb==1); Nf=length(Sf); sFeat=feat(:,Sf); |
| 153 | +Pos = 1:dim; |
| 154 | +Sf = Pos(Xrb == 1); |
| 155 | +Nf = length(Sf); |
| 156 | +sFeat = feat(:,Sf); |
133 | 157 | end
|
134 | 158 |
|
135 | 159 |
|
136 |
| -function LF=jLevyDistribution(beta,D) |
137 |
| -nume=gamma(1+beta)*sin(pi*beta/2); |
138 |
| -deno=gamma((1+beta)/2)*beta*2^((beta-1)/2); |
139 |
| -sigma=(nume/deno)^(1/beta); |
140 |
| -u=randn(1,D)*sigma; v=randn(1,D); |
141 |
| -step=u./abs(v).^(1/beta); LF=0.01*step; |
| 160 | +function LF = jLevyDistribution(beta,dim) |
| 161 | +nume = gamma(1 + beta) * sin(pi * beta / 2); |
| 162 | +deno = gamma((1 + beta) / 2) * beta * 2 ^ ((beta - 1) / 2); |
| 163 | +sigma = (nume / deno) ^ (1 / beta); |
| 164 | +u = randn(1,dim) * sigma; |
| 165 | +v = randn(1,dim); |
| 166 | +step = u ./ abs(v) .^ (1 / beta); |
| 167 | +LF = 0.01 * step; |
142 | 168 | end
|
143 | 169 |
|
144 | 170 |
|
0 commit comments