cec2020: implement LunacekBiRastrigin func
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
cf176f054e
commit
9d4f0f730c
@ -48,7 +48,42 @@ func Schwefel(x []float64) float64 {
|
||||
}
|
||||
|
||||
// LunacekBiRastrigin is the "Shifted and Rotated Lunacek bi-Rastrigin Function" of CEC2020.
|
||||
func LunacekBiRastrigin(x []float64) float64 { return 0 }
|
||||
func LunacekBiRastrigin(x []float64) float64 {
|
||||
var sum0 float64
|
||||
|
||||
var sum1 float64
|
||||
|
||||
var sum2 float64
|
||||
|
||||
nx := len(x)
|
||||
fnx := float64(nx)
|
||||
s := 1 - (1 / ((2 * math.Sqrt(fnx+20)) - 8.2))
|
||||
d := 1.0
|
||||
mu0 := 2.5
|
||||
mu1 := -math.Sqrt((math.Pow(mu0, 2) - d) / s)
|
||||
xhat := make([]float64, nx)
|
||||
xopt := newXopt(nx, mu0)
|
||||
|
||||
for i := range x {
|
||||
xhat = append(xhat, 2*x[i])
|
||||
|
||||
if xopt[i] < 0 {
|
||||
xhat[i] *= -1
|
||||
}
|
||||
}
|
||||
|
||||
for i := range x {
|
||||
sum0 += math.Pow(xhat[i]-mu0, 2)
|
||||
|
||||
sum1 += math.Pow(xhat[i]-mu1, 2)
|
||||
|
||||
zi := math.Pow(100, 0.5*((float64(i)-1)/fnx-1)) * xhat[i]
|
||||
|
||||
sum2 += (1 - math.Cos(2*math.Pi*zi))
|
||||
}
|
||||
|
||||
return math.Min(sum0, (d*fnx)+(s*sum1)) + 10*sum2
|
||||
}
|
||||
|
||||
// RosenbrockGriewank is the "Expanded Rosenbrock's plus Griewank's Function"
|
||||
// of CEC2020.
|
||||
|
@ -9,3 +9,8 @@ package cec2020
|
||||
#define E 2.7182818284590452353602874713526625
|
||||
#define PI 3.1415926535897932384626433832795029
|
||||
*/
|
||||
|
||||
const (
|
||||
searchRangeMin = -100
|
||||
searchRangeMax = 100
|
||||
)
|
||||
|
@ -3,7 +3,14 @@
|
||||
|
||||
package cec2020
|
||||
|
||||
import "math"
|
||||
import (
|
||||
"math"
|
||||
"time"
|
||||
|
||||
"golang.org/x/exp/rand"
|
||||
|
||||
"gonum.org/v1/gonum/stat/distuv"
|
||||
)
|
||||
|
||||
// void hf01 (double *, double *, int, double *,double *, int *,int, int); // Hybrid Function 1
|
||||
// void hf02 (double *, double *, int, double *,double *, int *,int, int); // Hybrid Function 2
|
||||
@ -112,3 +119,26 @@ func Asy(x []float64, beta float64) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func newXopt(n int, mu0 float64) []float64 {
|
||||
gaussDist := &distuv.Uniform{
|
||||
Src: rand.NewSource(uint64(time.Now().UnixNano())),
|
||||
Min: searchRangeMin,
|
||||
Max: searchRangeMax,
|
||||
}
|
||||
|
||||
tmpvec := make([]float64, n)
|
||||
xopt := make([]float64, n)
|
||||
|
||||
for i := 0; i < n; i++ {
|
||||
tmpvec = append(tmpvec, gaussDist.Rand())
|
||||
|
||||
xopt = append(xopt, 0.5*mu0)
|
||||
|
||||
if tmpvec[i] < 0 {
|
||||
xopt[i] *= -1
|
||||
}
|
||||
}
|
||||
|
||||
return xopt
|
||||
}
|
||||
|
@ -3,7 +3,14 @@
|
||||
|
||||
package cec2020
|
||||
|
||||
import "git.dotya.ml/wanderer/math-optim/bench"
|
||||
|
||||
/*
|
||||
extern double *OShift,*M,*y,*z,*x_bound;
|
||||
extern int ini_flag,n_flag,func_flag,*SS;
|
||||
*/
|
||||
|
||||
var Functions = map[string]func([]float64) float64{}
|
||||
|
||||
// SearchRange specifies the CEC2020 search range.
|
||||
var SearchRange = bench.NewfuncParams(searchRangeMin, searchRangeMax)
|
||||
|
Loading…
Reference in New Issue
Block a user