1010import torch
1111
1212from 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+ )
1320
1421
1522class CEC2022 (Problem ):
@@ -141,19 +148,19 @@ def cf_cal(self, x: torch.Tensor, fit: List[torch.Tensor], delta: List[int], bia
141148 # Problem
142149 def cec2022_f1 (self , x : torch .Tensor ) -> torch .Tensor :
143150 """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
145152
146153 def cec2022_f2 (self , x : torch .Tensor ) -> torch .Tensor :
147154 """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
149156
150157 def cec2022_f3 (self , x : torch .Tensor ) -> torch .Tensor :
151158 """Schaffer F7 Function"""
152159 return self .schaffer_F7_func (self .sr_func_rate (x , 1.0 , True , True , self .OShift , self .M )) + 600.0
153160
154161 def cec2022_f4 (self , x : torch .Tensor ) -> torch .Tensor :
155162 """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
157164
158165 def cec2022_f5 (self , x : torch .Tensor ) -> torch .Tensor :
159166 """Levy Function"""
@@ -167,7 +174,7 @@ def cec2022_f6(self, x: torch.Tensor) -> torch.Tensor:
167174
168175 fit0 = self .bent_cigar_func (self .sr_func_rate (y [0 ], 1.0 , False , False , self .OShift , self .M ))
169176 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 ))
171178
172179 return fit0 + fit1 + fit2 + 1800.0
173180
@@ -179,9 +186,9 @@ def cec2022_f7(self, x: torch.Tensor) -> torch.Tensor:
179186
180187 fit0 = self .hgbat_func (self .sr_func_rate (y [0 ], 5.00e-2 , False , False , self .OShift , self .M ))
181188 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 ))
185192 fit5 = self .schaffer_F7_func (self .sr_func_rate (y [5 ], 1.0 , False , False , self .OShift , self .M ))
186193
187194 return fit0 + fit1 + fit2 + fit3 + fit4 + fit5 + 2000.0
@@ -195,8 +202,8 @@ def cec2022_f8(self, x: torch.Tensor) -> torch.Tensor:
195202 fit0 = self .katsuura_func (self .sr_func_rate (y [0 ], 5.00e-2 , False , False , self .OShift , self .M ))
196203 fit1 = self .happycat_func (self .sr_func_rate (y [1 ], 5.00e-2 , False , False , self .OShift , self .M ))
197204 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 ))
200207
201208 return fit0 + fit1 + fit2 + fit3 + fit4 + 2200.0
202209
@@ -206,8 +213,8 @@ def cec2022_f9(self, x: torch.Tensor) -> torch.Tensor:
206213 delta = [10 , 20 , 30 , 40 , 50 ]
207214 bias = [0 , 200 , 300 , 100 , 400 ]
208215 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 ])
211218 )
212219 * 10000
213220 / 1e4 ,
@@ -240,11 +247,11 @@ def cec2022_f10(self, x: torch.Tensor) -> torch.Tensor:
240247 delta = [20 , 10 , 10 ]
241248 bias = [0 , 200 , 100 ]
242249 fit = [
243- self .schwefel_func (
250+ self .modified_schwefel_func (
244251 self .sr_func_rate (x , 10.0 , True , False , self .OShift [:, 0 * nx : 1 * nx ], self .M [:, 0 * nx : 1 * nx ])
245252 )
246253 * 1.0 ,
247- self . rastrigin_func (
254+ rastrigin_func (
248255 self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
249256 )
250257 * 1.0 ,
@@ -267,20 +274,18 @@ def cec2022_f11(self, x: torch.Tensor) -> torch.Tensor:
267274 )
268275 * 10000
269276 / 2e7 ,
270- self .schwefel_func (
277+ self .modified_schwefel_func (
271278 self .sr_func_rate (x , 10.0 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
272279 )
273280 * 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 ]))
277282 * 1000
278283 / 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 ])
281286 )
282287 * 1.0 ,
283- self . rastrigin_func (
288+ rastrigin_func (
284289 self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 4 * nx : 5 * nx ], self .M [:, 4 * nx : 5 * nx ])
285290 )
286291 * 10000
@@ -300,12 +305,12 @@ def cec2022_f12(self, x: torch.Tensor) -> torch.Tensor:
300305 )
301306 * 10000
302307 / 1000 ,
303- self . rastrigin_func (
308+ rastrigin_func (
304309 self .sr_func_rate (x , 5.12e-2 , True , True , self .OShift [:, 1 * nx : 2 * nx ], self .M [:, 1 * nx : 2 * nx ])
305310 )
306311 * 10000
307312 / 1e3 ,
308- self .schwefel_func (
313+ self .modified_schwefel_func (
309314 self .sr_func_rate (x , 10.0 , True , True , self .OShift [:, 2 * nx : 3 * nx ], self .M [:, 2 * nx : 3 * nx ])
310315 )
311316 * 10000
@@ -331,17 +336,6 @@ def cec2022_f12(self, x: torch.Tensor) -> torch.Tensor:
331336 return f + 2700.0
332337
333338 # 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-
345339 def levy_func (self , x : torch .Tensor ) -> torch .Tensor :
346340 """Problem number = 5."""
347341 w = 1.0 + x / 4.0
@@ -360,9 +354,6 @@ def hgbat_func(self, x: torch.Tensor) -> torch.Tensor:
360354 sum_x = torch .sum (tmp , dim = 1 )
361355 return torch .abs (r2 ** 2 - sum_x ** 2 ) ** (2 * alpha ) + (0.5 * r2 + sum_x ) / x .size (1 ) + 0.5
362356
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-
366357 def katsuura_func (self , x : torch .Tensor ) -> torch .Tensor :
367358 nx = x .size (1 )
368359 tmp1 = 2.0 ** torch .arange (1 , 33 , device = x .device )
@@ -372,12 +363,7 @@ def katsuura_func(self, x: torch.Tensor) -> torch.Tensor:
372363 f = torch .prod ((1 + temp * tmp3 .unsqueeze (0 )) ** (10.0 / (nx ** 1.2 )), dim = 1 )
373364 return (f - 1 ) * (10.0 / nx / nx )
374365
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 :
381367 nx = x .size (1 )
382368 tmp1 = x + 420.9687462275036
383369 tmp2 = - tmp1 * tmp1 .abs ().sqrt ().sin ()
@@ -413,16 +399,6 @@ def grie_rosen_func(self, x: torch.Tensor) -> torch.Tensor:
413399 tmp = 100.0 * (x ** 2 - y ) ** 2 + (x - 1.0 ) ** 2
414400 return torch .sum ((tmp ** 2 ) / 4000.0 - torch .cos (tmp ) + 1.0 , dim = 1 )
415401
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-
426402 def discus_func (self , x : torch .Tensor ) -> torch .Tensor :
427403 return (10.0 ** 6 ) * x [:, 0 ] ** 2 + torch .sum (x [:, 1 :] ** 2 , dim = 1 )
428404
0 commit comments