Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package epla
- import java.lang.Math._
- object fitnessFunctions {
- object Ackley {
- def domain = 32.0
- def function(X: List[Double]): Double = {
- val n = X.length
- -20.0 * exp(-0.2 * sqrt(X.map(x => x * x).sum) / n) - exp(X.map(x => cos(2.0 * PI * x)).sum / n) + 20.0 + exp(1)
- }
- }
- object Griewank {
- def domain = 600.0
- def function(X: List[Double]): Double = {
- val n = X.length
- val Xi = X zip (1 to n).toList
- (1.0 / 4000.0) * X.map(x => x * x).sum - Xi.map({ case (x: Double, i: Int) => cos(x / sqrt(i)) }).product + 1
- }
- }
- object Quartic {
- def domain = 1.28
- def function(X: List[Double]): Double = {
- val n = X.length
- val Xi = X zip (1 to n).toList
- Xi.map({ case (x: Double, i: Int) => i * x * x * x * x }).sum + random
- }
- }
- object Rastrigin {
- def domain = 5.12
- def function(X: List[Double]): Double = {
- val n = X.length
- (10.0 * n) * X.map(x => (x * x) - (10.0 * cos(2.0 * PI * x))).sum
- }
- }
- object Rosenbrock {
- def domain = 30.0
- def function(X: List[Double]): Double = {
- val n = X.length
- val Xx = X zip (X drop 1)
- Xx.map({ case (x0: Double, x1: Double) => 100.0 * ((x1 - (x0 * x0)) * (x1 - (x0 * x0))) + ((x0 - 1.0) * (x0 - 1.0)) }).sum
- }
- }
- object Schwefel1_2 {
- def domain = 100.0
- def function(X: List[Double]): Double = {
- val n = X.length
- val Xj = (1 to n).toList.map(x => X take x)
- Xj.map(x => x.sum * x.sum).sum
- }
- }
- object Schwefel2_2_1 {
- def domain = 100.0
- def function(X: List[Double]): Double = X.map(x => abs(x)).max
- }
- object Schwefel2_2_2 {
- def domain = 10.0
- def function(X: List[Double]): Double = X.map(x => abs(x)).sum + X.map(x => abs(x)).product
- }
- object Sphere {
- def domain = 100.0
- def function(X: List[Double]): Double = X.map(x => x * x).sum
- }
- object Step {
- def domain = 100.0
- def function(X: List[Double]): Double = X.map(x => floor(x + 0.5)).sum
- }
- def specimenPrint(s: List[Double]): Unit = {
- print("Genes: ")
- for(gen <- s){
- print(f"$gen%2.2f ")
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement