Skip to content

Commit 9ae96ff

Browse files
authored
Add files via upload
1 parent eb8260c commit 9ae96ff

File tree

8 files changed

+130
-105
lines changed

8 files changed

+130
-105
lines changed

FS/de.py

+12-8
Original file line numberDiff line numberDiff line change
@@ -64,17 +64,16 @@ def jfs(xtrain, ytrain, opts):
6464

6565
# Fitness at first iteration
6666
fit = np.zeros([N, 1], dtype='float')
67+
Xgb = np.zeros([1, dim], dtype='float')
6768
fitG = float('inf')
69+
6870
for i in range(N):
6971
fit[i,0] = Fun(xtrain, ytrain, Xbin[i,:], opts)
7072
if fit[i,0] < fitG:
71-
Xgb = X[i,:]
72-
fitG = fit[i,0]
73-
Gbin = Xbin[i,:]
73+
Xgb[0,:] = X[i,:]
74+
fitG = fit[i,0]
7475

7576
# Pre
76-
V = np.zeros([N, dim], dtype='float')
77-
U = np.zeros([N, dim], dtype='float')
7877
curve = np.zeros([1, max_iter], dtype='float')
7978
t = 0
8079

@@ -83,7 +82,10 @@ def jfs(xtrain, ytrain, opts):
8382
print("Best (DE):", curve[0,t])
8483
t += 1
8584

86-
while t < max_iter:
85+
while t < max_iter:
86+
V = np.zeros([N, dim], dtype='float')
87+
U = np.zeros([N, dim], dtype='float')
88+
8789
for i in range(N):
8890
# Choose r1, r2, r3 randomly, but not equal to i
8991
RN = np.random.permutation(N)
@@ -112,16 +114,16 @@ def jfs(xtrain, ytrain, opts):
112114

113115
# Binary conversion
114116
Ubin = binary_conversion(U, thres, N, dim)
117+
115118
# Selection
116119
for i in range(N):
117120
fitU = Fun(xtrain, ytrain, Ubin[i,:], opts)
118121
if fitU <= fit[i,0]:
119122
X[i,:] = U[i,:]
120123
fit[i,0] = fitU
121124
if fitU < fitG:
122-
Xgb = U[i,:]
125+
Xgb[0,:] = U[i,:]
123126
fitG = fitU
124-
Gbin = Ubin[i,:]
125127

126128

127129
# Store result
@@ -132,6 +134,8 @@ def jfs(xtrain, ytrain, opts):
132134

133135

134136
# Best feature subset
137+
Gbin = binary_conversion(Xgb, thres, 1, dim)
138+
Gbin = Gbin.reshape(dim)
135139
pos = np.asarray(range(0, dim))
136140
sel_index = pos[Gbin == 1]
137141
num_feat = len(sel_index)

FS/ga.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,14 @@ def jfs(xtrain, ytrain, opts):
4646

4747
# Fitness at first iteration
4848
fit = np.zeros([N, 1], dtype='float')
49+
Xgb = np.zeros([1, dim], dtype='float')
4950
fitG = float('inf')
51+
5052
for i in range(N):
5153
fit[i,0] = Fun(xtrain, ytrain, X[i,:], opts)
5254
if fit[i,0] < fitG:
53-
Xgb = X[i,:]
54-
fitG = fit[i,0]
55+
Xgb[0,:] = X[i,:]
56+
fitG = fit[i,0]
5557

5658
# Pre
5759
curve = np.zeros([1, max_iter], dtype='float')
@@ -103,8 +105,8 @@ def jfs(xtrain, ytrain, opts):
103105
for i in range(2 * Nc):
104106
Fnew[i,0] = Fun(xtrain, ytrain, Xnew[i,:], opts)
105107
if Fnew[i,0] < fitG:
106-
Xgb = Xnew[i,:]
107-
fitG = Fnew[i,0]
108+
Xgb[0,:] = Xnew[i,:]
109+
fitG = Fnew[i,0]
108110

109111
# Store result
110112
curve[0,t] = fitG
@@ -123,8 +125,9 @@ def jfs(xtrain, ytrain, opts):
123125

124126

125127
# Best feature subset
128+
Gbin = Xgb.reshape(dim)
126129
pos = np.asarray(range(0, dim))
127-
sel_index = pos[Xgb == 1]
130+
sel_index = pos[Gbin == 1]
128131
num_feat = len(sel_index)
129132
# Create dictionary
130133
ga_data = {'sf': sel_index, 'c': curve, 'nf': num_feat}

FS/gwo.py

+27-22
Original file line numberDiff line numberDiff line change
@@ -51,28 +51,31 @@ def jfs(xtrain, ytrain, opts):
5151
lb = lb * np.ones([1, dim], dtype='int')
5252

5353
# Initialize position & velocity
54-
X = init_position(lb, ub, N, dim)
54+
X = init_position(lb, ub, N, dim)
5555

5656
# Binary conversion
57-
Xbin = binary_conversion(X, thres, N, dim)
57+
Xbin = binary_conversion(X, thres, N, dim)
5858

5959
# Fitness at first iteration
6060
fit = np.zeros([N, 1], dtype='float')
61+
Xalpha = np.zeros([1, dim], dtype='float')
62+
Xbeta = np.zeros([1, dim], dtype='float')
63+
Xdelta = np.zeros([1, dim], dtype='float')
6164
Falpha = float('inf')
6265
Fbeta = float('inf')
6366
Fdelta = float('inf')
67+
6468
for i in range(N):
6569
fit[i,0] = Fun(xtrain, ytrain, Xbin[i,:], opts)
6670
if fit[i,0] < Falpha:
67-
Xalpha = X[i,:]
68-
Falpha = fit[i,0]
69-
Gbin = Xbin[i,:]
71+
Xalpha[0,:] = X[i,:]
72+
Falpha = fit[i,0]
7073
if fit[i,0] < Fbeta and fit[i,0] > Falpha:
71-
Xbeta = X[i,:]
72-
Fbeta = fit[i,0]
74+
Xbeta[0,:] = X[i,:]
75+
Fbeta = fit[i,0]
7376
if fit[i,0] < Fdelta and fit[i,0] > Fbeta and fit[i,0] > Falpha:
74-
Xdelta = X[i,:]
75-
Fdelta = fit[i,0]
77+
Xdelta[0,:] = X[i,:]
78+
Fdelta = fit[i,0]
7679

7780
# Pre
7881
curve = np.zeros([1, max_iter], dtype='float')
@@ -86,24 +89,25 @@ def jfs(xtrain, ytrain, opts):
8689
while t < max_iter:
8790
# Coefficient decreases linearly from 2 to 0
8891
a = 2 - t * (2 / max_iter)
92+
8993
for i in range(N):
9094
for d in range(dim):
9195
# Parameter C (3.4)
9296
C1 = 2 * rand()
9397
C2 = 2 * rand()
9498
C3 = 2 * rand()
9599
# Compute Dalpha, Dbeta & Ddelta (3.5)
96-
Dalpha = abs(C1 * Xalpha[d] - X[i,d])
97-
Dbeta = abs(C2 * Xbeta[d] - X[i,d])
98-
Ddelta = abs(C3 * Xdelta[d] - X[i,d])
100+
Dalpha = abs(C1 * Xalpha[0,d] - X[i,d])
101+
Dbeta = abs(C2 * Xbeta[0,d] - X[i,d])
102+
Ddelta = abs(C3 * Xdelta[0,d] - X[i,d])
99103
# Parameter A (3.3)
100104
A1 = 2 * a * rand() - a
101105
A2 = 2 * a * rand() - a
102106
A3 = 2 * a * rand() - a
103107
# Compute X1, X2 & X3 (3.6)
104-
X1 = Xalpha[d] - A1 * Dalpha
105-
X2 = Xbeta[d] - A2 * Dbeta
106-
X3 = Xdelta[d] - A3 * Ddelta
108+
X1 = Xalpha[0,d] - A1 * Dalpha
109+
X2 = Xbeta[0,d] - A2 * Dbeta
110+
X3 = Xdelta[0,d] - A3 * Ddelta
107111
# Update wolf (3.7)
108112
X[i,d] = (X1 + X2 + X3) / 3
109113
# Boundary
@@ -116,15 +120,14 @@ def jfs(xtrain, ytrain, opts):
116120
for i in range(N):
117121
fit[i,0] = Fun(xtrain, ytrain, Xbin[i,:], opts)
118122
if fit[i,0] < Falpha:
119-
Xalpha = X[i,:]
120-
Falpha = fit[i,0]
121-
Gbin = Xbin[i,:]
123+
Xalpha[0,:] = X[i,:]
124+
Falpha = fit[i,0]
122125
if fit[i,0] < Fbeta and fit[i,0] > Falpha:
123-
Xbeta = X[i,:]
124-
Fbeta = fit[i,0]
126+
Xbeta[0,:] = X[i,:]
127+
Fbeta = fit[i,0]
125128
if fit[i,0] < Fdelta and fit[i,0] > Fbeta and fit[i,0] > Falpha:
126-
Xdelta = X[i,:]
127-
Fdelta = fit[i,0]
129+
Xdelta[0,:] = X[i,:]
130+
Fdelta = fit[i,0]
128131

129132
curve[0,t] = Falpha
130133
print("Iteration:", t + 1)
@@ -133,6 +136,8 @@ def jfs(xtrain, ytrain, opts):
133136

134137

135138
# Best feature subset
139+
Gbin = binary_conversion(Xalpha, thres, 1, dim)
140+
Gbin = Gbin.reshape(dim)
136141
pos = np.asarray(range(0, dim))
137142
sel_index = pos[Gbin == 1]
138143
num_feat = len(sel_index)

FS/hho.py

+29-29
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,9 @@ def jfs(xtrain, ytrain, opts):
7474

7575
# Pre
7676
fit = np.zeros([N, 1], dtype='float')
77+
Xrb = np.zeros([1, dim], dtype='float')
7778
fitR = float('inf')
78-
Y = np.zeros([1, dim], dtype='float')
79-
Z = np.zeros([1, dim], dtype='float')
79+
8080
curve = np.zeros([1, max_iter], dtype='float')
8181
t = 0
8282

@@ -88,18 +88,18 @@ def jfs(xtrain, ytrain, opts):
8888
for i in range(N):
8989
fit[i,0] = Fun(xtrain, ytrain, Xbin[i,:], opts)
9090
if fit[i,0] < fitR:
91-
Xrb = X[i,:]
92-
fitR = fit[i,0]
93-
Gbin = Xbin[i,:]
94-
95-
# Mean position of hawk (2)
96-
X_mu = np.mean(X, axis=0)
97-
91+
Xrb[0,:] = X[i,:]
92+
fitR = fit[i,0]
93+
9894
# Store result
9995
curve[0,t] = fitR
10096
print("Iteration:", t + 1)
10197
print("Best (HHO):", curve[0,t])
10298
t += 1
99+
100+
# Mean position of hawk (2)
101+
X_mu = np.zeros([1, dim], dtype='float')
102+
X_mu[0,:] = np.mean(X, axis=0)
103103

104104
for i in range(N):
105105
# Random number in [-1,1]
@@ -126,7 +126,7 @@ def jfs(xtrain, ytrain, opts):
126126
r4 = rand()
127127
for d in range(dim):
128128
# Update Hawk (1)
129-
X[i,d] = (Xrb[d] - X_mu[d]) - r3 * (lb[0,d] + r4 * (ub[0,d] - lb[0,d]))
129+
X[i,d] = (Xrb[0,d] - X_mu[0,d]) - r3 * (lb[0,d] + r4 * (ub[0,d] - lb[0,d]))
130130
# Boundary
131131
X[i,d] = boundary(X[i,d], lb[0,d], ub[0,d])
132132

@@ -139,31 +139,36 @@ def jfs(xtrain, ytrain, opts):
139139
if r >= 0.5 and abs(E) >= 0.5:
140140
for d in range(dim):
141141
# Delta X (5)
142-
DX = Xrb[d] - X[i,d]
142+
DX = Xrb[0,d] - X[i,d]
143143
# Position update (4)
144-
X[i,d] = DX - E * abs(J * Xrb[d] - X[i,d])
144+
X[i,d] = DX - E * abs(J * Xrb[0,d] - X[i,d])
145145
# Boundary
146146
X[i,d] = boundary(X[i,d], lb[0,d], ub[0,d])
147147

148148
# {2} hard besiege
149149
elif r >= 0.5 and abs(E) < 0.5:
150150
for d in range(dim):
151151
# Delta X (5)
152-
DX = Xrb[d] - X[i,d]
152+
DX = Xrb[0,d] - X[i,d]
153153
# Position update (6)
154-
X[i,d] = Xrb[d] - E * abs(DX)
154+
X[i,d] = Xrb[0,d] - E * abs(DX)
155155
# Boundary
156156
X[i,d] = boundary(X[i,d], lb[0,d], ub[0,d])
157157

158158
# {3} Soft besiege with progressive rapid dives
159159
elif r < 0.5 and abs(E) >= 0.5:
160160
# Levy distribution (9)
161161
LF = levy_distribution(beta, dim)
162+
Y = np.zeros([1, dim], dtype='float')
163+
Z = np.zeros([1, dim], dtype='float')
164+
162165
for d in range(dim):
163166
# Compute Y (7)
164-
Y[0,d] = Xrb[d] - E * abs(J * Xrb[d] - X[i,d])
167+
Y[0,d] = Xrb[0,d] - E * abs(J * Xrb[0,d] - X[i,d])
165168
# Boundary
166169
Y[0,d] = boundary(Y[0,d], lb[0,d], ub[0,d])
170+
171+
for d in range(dim):
167172
# Compute Z (8)
168173
Z[0,d] = Y[0,d] + rand() * LF[d]
169174
# Boundary
@@ -179,25 +184,24 @@ def jfs(xtrain, ytrain, opts):
179184
if fitY < fit[i,0]:
180185
fit[i,0] = fitY
181186
X[i,:] = Y
182-
Xbin[i,:] = Ybin
183187
if fitZ < fit[i,0]:
184188
fit[i,0] = fitZ
185-
X[i,:] = Z
186-
Xbin[i,:] = Zbin
187-
if fit[i,0] < fitR:
188-
Xrb = X[i,:]
189-
fitR = fit[i,0]
190-
Gbin = Xbin[i,:]
189+
X[i,:] = Z
191190

192191
# {4} Hard besiege with progressive rapid dives
193192
elif r < 0.5 and abs(E) < 0.5:
194193
# Levy distribution (9)
195194
LF = levy_distribution(beta, dim)
195+
Y = np.zeros([1, dim], dtype='float')
196+
Z = np.zeros([1, dim], dtype='float')
197+
196198
for d in range(dim):
197199
# Compute Y (12)
198-
Y[0,d] = Xrb[d] - E * abs(J * Xrb[d] - X_mu[d])
200+
Y[0,d] = Xrb[0,d] - E * abs(J * Xrb[0,d] - X_mu[0,d])
199201
# Boundary
200202
Y[0,d] = boundary(Y[0,d], lb[0,d], ub[0,d])
203+
204+
for d in range(dim):
201205
# Compute Z (13)
202206
Z[0,d] = Y[0,d] + rand() * LF[d]
203207
# Boundary
@@ -213,18 +217,14 @@ def jfs(xtrain, ytrain, opts):
213217
if fitY < fit[i,0]:
214218
fit[i,0] = fitY
215219
X[i,:] = Y
216-
Xbin[i,:] = Ybin
217220
if fitZ < fit[i,0]:
218221
fit[i,0] = fitZ
219222
X[i,:] = Z
220-
Xbin[i,:] = Zbin
221-
if fit[i,0] < fitR:
222-
Xrb = X[i,:]
223-
fitR = fit[i,0]
224-
Gbin = Xbin[i,:]
225223

226224

227225
# Best feature subset
226+
Gbin = binary_conversion(Xrb, thres, 1, dim)
227+
Gbin = Gbin.reshape(dim)
228228
pos = np.asarray(range(0, dim))
229229
sel_index = pos[Gbin == 1]
230230
num_feat = len(sel_index)

FS/pso.py

+7-5
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def jfs(xtrain, ytrain, opts):
7979

8080
# Pre
8181
fit = np.zeros([N, 1], dtype='float')
82+
Xgb = np.zeros([1, dim], dtype='float')
8283
fitG = float('inf')
8384
Xpb = np.zeros([N, dim], dtype='float')
8485
fitP = float('inf') * np.ones([N, 1], dtype='float')
@@ -95,10 +96,9 @@ def jfs(xtrain, ytrain, opts):
9596
if fit[i,0] < fitP[i,0]:
9697
Xpb[i,:] = X[i,:]
9798
fitP[i,0] = fit[i,0]
98-
if fit[i,0] < fitG:
99-
Xgb = X[i,:]
100-
fitG = fit[i,0]
101-
Gbin = Xbin[i,:]
99+
if fitP[i,0] < fitG:
100+
Xgb[0,:] = Xpb[i,:]
101+
fitG = fitP[i,0]
102102

103103
# Store result
104104
curve[0,t] = fitG
@@ -111,7 +111,7 @@ def jfs(xtrain, ytrain, opts):
111111
# Update velocity
112112
r1 = rand()
113113
r2 = rand()
114-
V[i,d] = w * V[i,d] + c1 * r1 * (Xpb[i,d] - X[i,d]) + c2 * r2 * (Xgb[d] - X[i,d])
114+
V[i,d] = w * V[i,d] + c1 * r1 * (Xpb[i,d] - X[i,d]) + c2 * r2 * (Xgb[0,d] - X[i,d])
115115
# Boundary
116116
V[i,d] = boundary(V[i,d], Vmin[0,d], Vmax[0,d])
117117
# Update position
@@ -121,6 +121,8 @@ def jfs(xtrain, ytrain, opts):
121121

122122

123123
# Best feature subset
124+
Gbin = binary_conversion(Xgb, thres, 1, dim)
125+
Gbin = Gbin.reshape(dim)
124126
pos = np.asarray(range(0, dim))
125127
sel_index = pos[Gbin == 1]
126128
num_feat = len(sel_index)

0 commit comments

Comments
 (0)