packages feed

moo-1.0: examples/schaffer2.hs

{- Schaffer function #2. Minimium at (0,0), equal to 0. -}

import Moo.GeneticAlgorithm.Continuous
import Moo.GeneticAlgorithm.Constraints


import Data.Function (on)


import ExampleMain


schafferN2 :: [Double] -> Double
schafferN2 [x,y] = 0.5 + (sin(x*x-y*y)**2 - 0.5)/(1+0.001*(x*x+y*y))**2
xvar [x,_] = x
yvar [_,y] = y


popsize = 100
initialize = getRandomGenomes popsize (replicate 2 (-100,100))
select = withFitnessSharing (distance2 `on` takeGenome) 1.0 1 Minimizing $
         tournamentSelect Minimizing 2 popsize
crossover = unimodalCrossoverRP
mutate = gaussianMutate 0.05 0.1
step = nextSteadyState (popsize `div` 100) Minimizing schafferN2
       select crossover mutate


{-
-- exampleMain takes care of command line options and pretty printing.
-- If you don't need that, a bare bones main function looks like this:

main = do
  results <- runGA initialize (loop (Generations 1000) step)
  print . head . bestFirst Minimizing $ results

-}
main = exampleMain (exampleDefaults { numGenerations = 1000 })
       Minimizing initialize step