Advertisement
Guest User

epla_fitness

a guest
Jun 12th, 2014
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.39 KB | None | 0 0
  1. package epla
  2. import java.lang.Math._
  3.  
  4. object fitnessFunctions {
  5.     object Ackley {
  6.         def domain = 32.0
  7.         def function(X: List[Double]): Double = {
  8.             val n = X.length
  9.             -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)
  10.         }
  11.     }
  12.     object Griewank {
  13.         def domain = 600.0
  14.         def function(X: List[Double]): Double = {
  15.             val n = X.length
  16.             val Xi = X zip (1 to n).toList
  17.             (1.0 / 4000.0) * X.map(x => x * x).sum - Xi.map({ case (x: Double, i: Int) => cos(x / sqrt(i)) }).product + 1
  18.         }
  19.     }
  20.     object Quartic {
  21.         def domain = 1.28
  22.         def function(X: List[Double]): Double = {
  23.             val n = X.length
  24.             val Xi = X zip (1 to n).toList
  25.             Xi.map({ case (x: Double, i: Int) => i * x * x * x * x }).sum + random
  26.         }
  27.     }
  28.     object Rastrigin {
  29.         def domain = 5.12
  30.         def function(X: List[Double]): Double = {
  31.             val n = X.length
  32.             (10.0 * n) * X.map(x => (x * x) - (10.0 * cos(2.0 * PI * x))).sum
  33.         }
  34.     }
  35.     object Rosenbrock {
  36.         def domain = 30.0
  37.         def function(X: List[Double]): Double = {
  38.             val n = X.length
  39.             val Xx = X zip (X drop 1)
  40.             Xx.map({ case (x0: Double, x1: Double) => 100.0 * ((x1 - (x0 * x0)) * (x1 - (x0 * x0))) + ((x0 - 1.0) * (x0 - 1.0)) }).sum
  41.         }
  42.     }
  43.     object Schwefel1_2 {
  44.         def domain = 100.0
  45.         def function(X: List[Double]): Double = {
  46.             val n = X.length
  47.             val Xj = (1 to n).toList.map(x => X take x)
  48.             Xj.map(x => x.sum * x.sum).sum
  49.         }
  50.     }
  51.     object Schwefel2_2_1 {
  52.         def domain = 100.0
  53.         def function(X: List[Double]): Double = X.map(x => abs(x)).max
  54.     }
  55.     object Schwefel2_2_2 {
  56.         def domain = 10.0
  57.         def function(X: List[Double]): Double = X.map(x => abs(x)).sum + X.map(x => abs(x)).product
  58.     }
  59.     object Sphere {
  60.         def domain = 100.0
  61.         def function(X: List[Double]): Double = X.map(x => x * x).sum
  62.     }
  63.     object Step {
  64.         def domain = 100.0
  65.         def function(X: List[Double]): Double = X.map(x => floor(x + 0.5)).sum
  66.     }
  67.    
  68.     def specimenPrint(s: List[Double]): Unit = {
  69.         print("Genes: ")
  70.         for(gen <- s){
  71.             print(f"$gen%2.2f ")
  72.         }
  73.     }
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement