    function over a non - convex set . 


 Test problem # 1 from Deb , K. ( 2000 ) . An efficient constraint 
 handling method for genetic algorithms . Computer methods in applied 
 mechanics and engineering ,  ) , 311 - 338 . 

 Unconstrained optimum : ( 3,2 ) 
 Constrained optimum : ( 2.246826 , 2.381865 ) 

 Running and visualizing in bash / zsh : 

 N=100 ; ghc --make cp_himmelblau & & ./cp_himmelblau -b -d -g $ N > output.txt & & ( gnuplot -persist < < < " set view map ; unset key ; set isosamples 100 ; set logscale cb ; splot [ 0:6][0:6 ] ( x**2 + y - 11)**2 + ( x + y*y - 7)**2 w pm3d , ' output.txt ' u 1:2:(0 ) w p lc 2 pt 4 ; set  ' x ' ; set ylabel ' y ' ; set title ' generation $ N ' ; replot " ; head -1 output.txt ) 





Test problem #1 from Deb, K. (2000). An efficient constraint
handling method for genetic algorithms. Computer methods in applied
mechanics and engineering, 186(2), 311-338.

Unconstrained optimum: (3,2)
Constrained optimum: (2.246826, 2.381865)

Running and visualizing in bash/zsh:

N=100 ; ghc --make cp_himmelblau && ./cp_himmelblau -b -d -g $N > output.txt && ( gnuplot -persist <<< "set view map; unset key ; set isosamples 100 ; set logscale cb ; splot [0:6][0:6] (x**2 + y - 11)**2 + (x + y*y - 7)**2 w pm3d, 'output.txt' u 1:2:(0) w p lc 2 pt 4; set xlabel 'x' ; set ylabel 'y' ; set title 'generation $N' ; replot " ; head -1 output.txt)


-}


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


import ExampleMain


import Data.Function (on)


f :: [Double] -> Double
f [x, y] = (x**2 + y - 11)**2 + (x + y**2 - 7)**2
xvar [x,_] = x
yvar [_,y] = y
g1 [x,y] = 4.84 - (x-0.05)**2 - (y-2.5)**2
g2 [x,y] = x**2 + (y-2.5)**2 - 4.84


constraints = [ 0 .<= xvar <=. 6
              , 0 .<= yvar <=. 6
              , g1 .>=. 0
              , g2 .>=. 0 ]


popsize = 100
initialize = getRandomGenomes popsize [(0,6),(0,6)]
select = withFitnessSharing (distance2 `on` takeGenome) 0.025 1 Minimizing $
         withConstraints constraints (degreeOfViolation 1.0 0.0) Minimizing $
         tournamentSelect Minimizing 2 popsize
step = withFinalDeathPenalty constraints $
       nextGeneration Minimizing f select 0
       (simulatedBinaryCrossover 0.5)
       (gaussianMutate 0.05 0.025)



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

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


-- 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 100) step)
  print . head . bestFirst Minimizing $ results

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

make cp_himmelblau & & ./cp_himmelblau -b -d -g $ N > output.txt & & ( gnuplot -persist < < < " set view map ; unset key ; set isosamples 100 ; set logscale cb ; splot [ 0:6][0:6 ] ( x**2 + y - 11)**2 + ( x + y*y - 7)**2 w pm3d , ' output.txt ' u 1:2:(0 ) w p lc 2 pt 4 ; set  ' x ' ; set ylabel ' y ' ; set title ' generation $ N ' ; replot " ; head -1 output.txt ) 
make cp_himmelblau && ./cp_himmelblau -b -d -g $N > output.txt && ( gnuplot -persist <<< "set view map; unset key ; set isosamples 100 ; set logscale cb ; splot [0:6][0:6] (x**2 + y - 11)**2 + (x + y*y - 7)**2 w pm3d, 'output.txt' u 1:2:(0) w p lc 2 pt 4; set xlabel 'x' ; set ylabel 'y' ; set title 'generation $N' ; replot " ; head -1 output.txt)
 exampleMain takes care of command line options and pretty printing . 
 If you do n't need that , a bare bones main function looks like this : 
 exampleMain takes care of command line options and pretty printing.
 If you don't need that, a bare bones main function looks like this:
    function over a non - convex set . 


 Test problem # 1 from Deb , K. ( 2000 ) . An efficient constraint 
 handling method for genetic algorithms . Computer methods in applied 
 mechanics and engineering ,  ) , 311 - 338 . 

 Unconstrained optimum : ( 3,2 ) 
 Constrained optimum : ( 2.246826 , 2.381865 ) 

 Running and visualizing in bash / zsh : 






Test problem #1 from Deb, K. (2000). An efficient constraint
handling method for genetic algorithms. Computer methods in applied
mechanics and engineering, 186(2), 311-338.

Unconstrained optimum: (3,2)
Constrained optimum: (2.246826, 2.381865)

Running and visualizing in bash/zsh:



-}


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


import ExampleMain


import Data.Function (on)


f :: [Double] -> Double
f [x, y] = (x**2 + y - 11)**2 + (x + y**2 - 7)**2
xvar [x,_] = x
yvar [_,y] = y
g1 [x,y] = 4.84 - (x-0.05)**2 - (y-2.5)**2
g2 [x,y] = x**2 + (y-2.5)**2 - 4.84


constraints = [ 0 .<= xvar <=. 6
              , 0 .<= yvar <=. 6
              , g1 .>=. 0
              , g2 .>=. 0 ]


popsize = 100
initialize = getRandomGenomes popsize [(0,6),(0,6)]
select = withFitnessSharing (distance2 `on` takeGenome) 0.025 1 Minimizing $
         withConstraints constraints (degreeOfViolation 1.0 0.0) Minimizing $
         tournamentSelect Minimizing 2 popsize
step = withFinalDeathPenalty constraints $
       nextGeneration Minimizing f select 0
       (simulatedBinaryCrossover 0.5)
       (gaussianMutate 0.05 0.025)




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



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

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