Functional Programming and Intelligent Algorithms

# Exercises

## Week 13: The continuous GA

### 2 Exercises

#### 2.1 Testing

You should test that the continuous GA for string learning works properly on a set of test strings. Create a test module called TestContinuousGA.hs to hold your code:

1module TestContinuousGA where The module should import the GA module: 1import ContinuousGA You should then implement a main function with the necessary steps to verify proper functionality of the GA: 1main :: IO () 2main = do For example, you could do something like the following: 1        -- select a target string 2        -- obtain a PRNG g 3        -- initialise a random population 4        -- print the decoded population (list of candidate strings) 5        -- evolve the population for itMax iterations 6        -- print the decoded evolved population (list of evolved strings) 7        -- print the decoded best chromosome found and its cost 

To help you out, here is an example module implementing the steps listed above:

1module TestContinuousGA where 2 3import ContinuousGA 4import System.Random (newStdGen) 5 6main :: IO () 7main = do 8        g <- newStdGen 9        let (initPop, g’) = randPop g 10        putStr ~Initial population decoded to strings:\n~ 11        print $decodePopulation initPop 12 let newPopEvolved = fst$ evolvePop g’ itMax initPop 13        putStr ~Final population decoded to strings:\n~ 14        print $decodePopulation newPopEvolved 15 putStr ~Target:\n~ 16 print target 17 putStr ~Best solution:\n~ 18 print$ (decodePopulation newPopEvolved) !! 0 19        putStr ~Cost of solution:\n~ 20        print \$ chromCost target (newPopEvolved !! 0) 

Experiment with algorithm settings such as

• population size (number of chromosomes)
• maximum number of iterations
• selection rate
• mutation rate

and discuss how your choice of GA settings affect the following:

• ability to find the correct target string
• cost of the GA-generated string (zero for finding the correct string)
• number of iterations needed
• total runtime

for a number of different test strings, e.g.

• abc123.,;
• descartes: cogito ergo sum
• 2+2 is: 4, 2*2 is: 4; why is _/not/_ 2.2*2.2 equal to 4.4?!

If you modify your cost functions or implement other cost functions, examine the performance of the GA for each of these.

#### 2.2 Solve your own problem

This exercise is about adapting the continuous GA to some other problem. Find a problem that a continuous GA can solve. A suitable problem can be a combinatorial problem such as string learning presented here, or the test functions given in the appendix of ?. You will need to think about how to encode the chromosomes, e.g., the sequence of genes could correspond to optimisation variables. You must also define new cost functions to evaluate the chromosomes. Much of the existing code can be reused.

7th April 2017
Robin T. Bye / robin.t.bye@ntnu.no