10
10
import torch
11
11
12
12
from evox .core import Problem
13
+ from evox .problems .numerical .basic import (
14
+ ackley_func ,
15
+ griewank_func ,
16
+ rastrigin_func ,
17
+ rosenbrock_func ,
18
+ zakharov_func ,
19
+ )
13
20
14
21
15
22
class CEC2022 (Problem ):
@@ -141,19 +148,19 @@ def cf_cal(self, x: torch.Tensor, fit: List[torch.Tensor], delta: List[int], bia
141
148
# Problem
142
149
def cec2022_f1 (self , x : torch .Tensor ) -> torch .Tensor :
143
150
"""Zakharov Function"""
144
- return self . zakharov_func (self .sr_func_rate (x , 1.0 , True , True , self .OShift , self .M )) + 300.0
151
+ return zakharov_func (self .sr_func_rate (x , 1.0 , True , True , self .OShift , self .M )) + 300.0
145
152
146
153
def cec2022_f2 (self , x : torch .Tensor ) -> torch .Tensor :
147
154
"""Rosenbrock Function"""
148
- return self . rosenbrock_func (self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift , self .M )) + 400
155
+ return rosenbrock_func (1 + self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift , self .M )) + 400
149
156
150
157
def cec2022_f3 (self , x : torch .Tensor ) -> torch .Tensor :
151
158
"""Schaffer F7 Function"""
152
159
return self .schaffer_F7_func (self .sr_func_rate (x , 1.0 , True , True , self .OShift , self .M )) + 600.0
153
160
154
161
def cec2022_f4 (self , x : torch .Tensor ) -> torch .Tensor :
155
162
"""Step Rastrigin Function (Noncontinuous Rastrigin's)"""
156
- return self . step_rastrigin_func (self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift , self .M )) + 800.0
163
+ return rastrigin_func (self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift , self .M )) + 800.0
157
164
158
165
def cec2022_f5 (self , x : torch .Tensor ) -> torch .Tensor :
159
166
"""Levy Function"""
@@ -167,7 +174,7 @@ def cec2022_f6(self, x: torch.Tensor) -> torch.Tensor:
167
174
168
175
fit0 = self .bent_cigar_func (self .sr_func_rate (y [0 ], 1.0 , False , False , self .OShift , self .M ))
169
176
fit1 = self .hgbat_func (self .sr_func_rate (y [1 ], 5.00e-2 , False , False , self .OShift , self .M ))
170
- fit2 = self . rastrigin_func (self .sr_func_rate (y [2 ], 5.12e-2 , False , False , self .OShift , self .M ))
177
+ fit2 = rastrigin_func (self .sr_func_rate (y [2 ], 5.12e-2 , False , False , self .OShift , self .M ))
171
178
172
179
return fit0 + fit1 + fit2 + 1800.0
173
180
@@ -179,9 +186,9 @@ def cec2022_f7(self, x: torch.Tensor) -> torch.Tensor:
179
186
180
187
fit0 = self .hgbat_func (self .sr_func_rate (y [0 ], 5.00e-2 , False , False , self .OShift , self .M ))
181
188
fit1 = self .katsuura_func (self .sr_func_rate (y [1 ], 5.00e-2 , False , False , self .OShift , self .M ))
182
- fit2 = self . ackley_func (self .sr_func_rate (y [2 ], 1.0 , False , False , self .OShift , self .M ))
183
- fit3 = self . rastrigin_func (self .sr_func_rate (y [3 ], 5.12e-2 , False , False , self .OShift , self .M ))
184
- fit4 = self .schwefel_func (self .sr_func_rate (y [4 ], 10.0 , False , False , self .OShift , self .M ))
189
+ fit2 = ackley_func (20.0 , 0.2 , 2 * torch . pi , self .sr_func_rate (y [2 ], 1.0 , False , False , self .OShift , self .M ))
190
+ fit3 = rastrigin_func (self .sr_func_rate (y [3 ], 5.12e-2 , False , False , self .OShift , self .M ))
191
+ fit4 = self .modified_schwefel_func (self .sr_func_rate (y [4 ], 10.0 , False , False , self .OShift , self .M ))
185
192
fit5 = self .schaffer_F7_func (self .sr_func_rate (y [5 ], 1.0 , False , False , self .OShift , self .M ))
186
193
187
194
return fit0 + fit1 + fit2 + fit3 + fit4 + fit5 + 2000.0
@@ -195,8 +202,8 @@ def cec2022_f8(self, x: torch.Tensor) -> torch.Tensor:
195
202
fit0 = self .katsuura_func (self .sr_func_rate (y [0 ], 5.00e-2 , False , False , self .OShift , self .M ))
196
203
fit1 = self .happycat_func (self .sr_func_rate (y [1 ], 5.00e-2 , False , False , self .OShift , self .M ))
197
204
fit2 = self .grie_rosen_func (self .sr_func_rate (y [2 ], 5.00e-2 , False , False , self .OShift , self .M ))
198
- fit3 = self .schwefel_func (self .sr_func_rate (y [3 ], 10.0 , False , False , self .OShift , self .M ))
199
- fit4 = self . ackley_func (self .sr_func_rate (y [4 ], 1.0 , False , False , self .OShift , self .M ))
205
+ fit3 = self .modified_schwefel_func (self .sr_func_rate (y [3 ], 10.0 , False , False , self .OShift , self .M ))
206
+ fit4 = ackley_func (20.0 , 0.2 , 2 * torch . pi , self .sr_func_rate (y [4 ], 1.0 , False , False , self .OShift , self .M ))
200
207
201
208
return fit0 + fit1 + fit2 + fit3 + fit4 + 2200.0
202
209
@@ -206,8 +213,8 @@ def cec2022_f9(self, x: torch.Tensor) -> torch.Tensor:
206
213
delta = [10 , 20 , 30 , 40 , 50 ]
207
214
bias = [0 , 200 , 300 , 100 , 400 ]
208
215
fit = [
209
- self . rosenbrock_func (
210
- self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift [:, 0 * nx : 1 * nx ], self .M [:, 0 * nx : 1 * nx ])
216
+ rosenbrock_func (
217
+ 1 + self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift [:, 0 * nx : 1 * nx ], self .M [:, 0 * nx : 1 * nx ])
211
218
)
212
219
* 10000
213
220
/ 1e4 ,
@@ -240,11 +247,11 @@ def cec2022_f10(self, x: torch.Tensor) -> torch.Tensor:
240
247
delta = [20 , 10 , 10 ]
241
248
bias = [0 , 200 , 100 ]
242
249
fit = [
243
- self .schwefel_func (
250
+ self .modified_schwefel_func (
244
251
self .sr_func_rate (x , 10.0 , True , False , self .OShift [:, 0 * nx : 1 * nx ], self .M [:, 0 * nx : 1 * nx ])
245
252
)
246
253
* 1.0 ,
247
- self . rastrigin_func (
254
+ rastrigin_func (
248
255
self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
249
256
)
250
257
* 1.0 ,
@@ -267,20 +274,18 @@ def cec2022_f11(self, x: torch.Tensor) -> torch.Tensor:
267
274
)
268
275
* 10000
269
276
/ 2e7 ,
270
- self .schwefel_func (
277
+ self .modified_schwefel_func (
271
278
self .sr_func_rate (x , 10.0 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
272
279
)
273
280
* 1.0 ,
274
- self .griewank_func (
275
- self .sr_func_rate (x , 6.0 , True , True , self .OShift [:, 2 * nx : 3 * nx ], self .M [:, 2 * nx : 3 * nx ])
276
- )
281
+ griewank_func (self .sr_func_rate (x , 6.0 , True , True , self .OShift [:, 2 * nx : 3 * nx ], self .M [:, 2 * nx : 3 * nx ]))
277
282
* 1000
278
283
/ 100 ,
279
- self . rosenbrock_func (
280
- self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift [:, 3 * nx : 4 * nx ], self .M [:, 3 * nx : 4 * nx ])
284
+ rosenbrock_func (
285
+ 1 + self .sr_func_rate (x , 2.048e-2 , True , True , self .OShift [:, 3 * nx : 4 * nx ], self .M [:, 3 * nx : 4 * nx ])
281
286
)
282
287
* 1.0 ,
283
- self . rastrigin_func (
288
+ rastrigin_func (
284
289
self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 4 * nx : 5 * nx ], self .M [:, 4 * nx : 5 * nx ])
285
290
)
286
291
* 10000
@@ -300,12 +305,12 @@ def cec2022_f12(self, x: torch.Tensor) -> torch.Tensor:
300
305
)
301
306
* 10000
302
307
/ 1000 ,
303
- self . rastrigin_func (
308
+ rastrigin_func (
304
309
self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
305
310
)
306
311
* 10000
307
312
/ 1e3 ,
308
- self .schwefel_func (
313
+ self .modified_schwefel_func (
309
314
self .sr_func_rate (x , 10.0 , True , True , self .OShift [:, 2 * nx : 3 * nx ], self .M [:, 2 * nx : 3 * nx ])
310
315
)
311
316
* 10000
@@ -331,17 +336,6 @@ def cec2022_f12(self, x: torch.Tensor) -> torch.Tensor:
331
336
return f + 2700.0
332
337
333
338
# Basic functions
334
- def zakharov_func (self , x : torch .Tensor ) -> torch .Tensor :
335
- """Problem number = 1."""
336
- sum1 = x ** 2
337
- idx = torch .arange (1 , x .size (1 ) + 1 , device = x .device )
338
- sum2 = torch .sum ((0.5 * idx ) * x , dim = 1 )
339
- return torch .sum (sum1 , dim = 1 ) + sum2 ** 2 + sum2 ** 4
340
-
341
- def step_rastrigin_func (self , x : torch .Tensor ) -> torch .Tensor :
342
- """Problem number = 4."""
343
- return torch .sum (x ** 2 - 10.0 * torch .cos (2.0 * torch .pi * x ) + 10.0 , dim = 1 )
344
-
345
339
def levy_func (self , x : torch .Tensor ) -> torch .Tensor :
346
340
"""Problem number = 5."""
347
341
w = 1.0 + x / 4.0
@@ -360,9 +354,6 @@ def hgbat_func(self, x: torch.Tensor) -> torch.Tensor:
360
354
sum_x = torch .sum (tmp , dim = 1 )
361
355
return torch .abs (r2 ** 2 - sum_x ** 2 ) ** (2 * alpha ) + (0.5 * r2 + sum_x ) / x .size (1 ) + 0.5
362
356
363
- def rastrigin_func (self , x : torch .Tensor ) -> torch .Tensor :
364
- return torch .sum (x ** 2 - 10.0 * torch .cos (2.0 * torch .pi * x ) + 10.0 , dim = 1 )
365
-
366
357
def katsuura_func (self , x : torch .Tensor ) -> torch .Tensor :
367
358
nx = x .size (1 )
368
359
tmp1 = 2.0 ** torch .arange (1 , 33 , device = x .device )
@@ -372,12 +363,7 @@ def katsuura_func(self, x: torch.Tensor) -> torch.Tensor:
372
363
f = torch .prod ((1 + temp * tmp3 .unsqueeze (0 )) ** (10.0 / (nx ** 1.2 )), dim = 1 )
373
364
return (f - 1 ) * (10.0 / nx / nx )
374
365
375
- def ackley_func (self , x : torch .Tensor ) -> torch .Tensor :
376
- mean1 = torch .mean (x ** 2 , dim = 1 )
377
- mean2 = torch .mean (torch .cos (2.0 * torch .pi * x ), dim = 1 )
378
- return torch .e - 20.0 * torch .exp (- 0.2 * torch .sqrt (mean1 )) - torch .exp (mean2 ) + 20.0
379
-
380
- def schwefel_func (self , x : torch .Tensor ) -> torch .Tensor :
366
+ def modified_schwefel_func (self , x : torch .Tensor ) -> torch .Tensor :
381
367
nx = x .size (1 )
382
368
tmp1 = x + 420.9687462275036
383
369
tmp2 = - tmp1 * tmp1 .abs ().sqrt ().sin ()
@@ -413,16 +399,6 @@ def grie_rosen_func(self, x: torch.Tensor) -> torch.Tensor:
413
399
tmp = 100.0 * (x ** 2 - y ) ** 2 + (x - 1.0 ) ** 2
414
400
return torch .sum ((tmp ** 2 ) / 4000.0 - torch .cos (tmp ) + 1.0 , dim = 1 )
415
401
416
- def griewank_func (self , x : torch .Tensor ) -> torch .Tensor :
417
- sum_sq = torch .sum (x ** 2 , dim = 1 )
418
- idx = torch .arange (1 , x .size (1 ) + 1 , device = x .device )
419
- prod_cos = torch .prod (torch .cos (x / torch .sqrt (idx )), dim = 1 )
420
- return 1.0 + sum_sq / 4000.0 - prod_cos
421
-
422
- def rosenbrock_func (self , x : torch .Tensor ) -> torch .Tensor :
423
- tmp = x + 1
424
- return torch .sum (100.0 * (tmp [:, :- 1 ] ** 2 - tmp [:, 1 :]) ** 2 + (tmp [:, :- 1 ] - 1.0 ) ** 2 , dim = 1 )
425
-
426
402
def discus_func (self , x : torch .Tensor ) -> torch .Tensor :
427
403
return (10.0 ** 6 ) * x [:, 0 ] ** 2 + torch .sum (x [:, 1 :] ** 2 , dim = 1 )
428
404
0 commit comments