CS 5970 Programming Assignment 2 — Genetic Algorithms

Due Wednesday, October 21, 2015

1. Motivation

Evolutionary computation is often used for optimization. Some
optimization problems have a single optimum and a smooth optimization
landscape that allows even the simplest local search procedure to quickly
find the optimum. Others have complicating features such as multiple local
optima that are inferior to the global optimum, valleys, plateaus, and
ridges that cause difficulties for local search approaches. For these
problems, an evolutionary computation approach can be superior.

Moreover, when we create a particular evolutionary computation
implementation, we need to decide on particulars for the replicators,
replication mechanisms, and selection mechanisms we will use, among
others. Some of the questions we need to answer to create our
implementations are:

What will the replicators be? Bits? Floats? Strings?
Something else?

How will they be organized? In an array? Multiple arrays? A
tree? Etc.

Etc.

All of these decisions need to be made in the context of the
particular problem to which evolutionary computation will be applied
(for example, the replicators in combination must be able to represent
solutions to the problem in question). These decisions will also
effect the unfolding of the evolutionary process (e.g., how quickly it
converges to a solution).

2. Goals

The goals of this assignment are:

to give you baseline experience with implementing a evolutionary
computation system,

to give you experience with genetic algorithms (GAs) in
particular,

to familiarize you with some of the options facing evolutionary
computation implementors,

to give you experience with observing the evolutionary
process, and

to allow you to compare evolutionary computation with a simple
local search optimization procedure.

3. Assignment Overview

You will design, program, and run a simple GA to find the global maxima
of two different functions, one with a single maximum and the other with
one global maximum but also several local maxima separated by valleys. You
will compare the performance of your GA on these functions to that of a
simple local search optimization procedure known as hill
climbing. The functions are as follows:

f(x,y)=arctan(x)+arctan(y)+sin(x)+sin(y); -2 ≤ x, y ≤ 4

f(x,y)=arctan(x)+arctan(y)+sin(x)+sin(y); -10 ≤ x, y ≤ 10

You will also turn in written material regarding the design and
implementation choices you made regarding the GA and an analysis of the
results you will collected from your runs.

4. Assignment Details

Carry out the following steps. Underlined steps require a
written response, those in code require you to write
software, and those in italics require you to collect data.
Written responses, code, and data will be
turned in for grading

Consider the choices one needs to make regarding the design
and implementation of any evolutionary computation system.

List the choices that need to be made when designing an
evolutionary computation system that have already been made for you
in this assignment.

For each of these choices, list which option I chose for you
in making this assignment.

List the choices you need to make regarding the design of your
GA. (Note, these do not include purely implementation choices such
as programming language.) Between those I chose for you and those you
chose yourself, you should be able to list at least nine.

Choose an option that seems reasonable to you for each of
these design choices and explain why it seems reasonable to
you. If you do not have a good reason for your chosen option,
say so.

Implement your GA.

Now that you have implemented your GA, you are likely to have
recognized more choices that you needed to make along the way.
List the choices you needed to make regarding the design of your
GA. Including the choices you listed previously, your list
should now contain at least ten choices.

For each of these design choices, list the option you chose, and
explain why it seems reasonable to you. If you do not have a good
reason for your chosen option, say so.

Consider the choices one needs to make regarding the design
and implementation of a hill climber.

List the choices that need to be made when designing an hill
climber that have already been made for you in this
assignment.

For each of these choices, list which option I chose for you
in making this assignment.

List the choices you need to make regarding the design of your
hill climber. (Note, these do not include purely implementation
choices such as programming language.) Between those I chose for you and
those you chose yourself, you should be able to list at least four.

Choose an option that seems reasonable to you for each of these
design choices and explain why it seems reasonable to you. If you
do not have a good reason for your chosen option, say so.

Implement your hill climber.

Now that you have implemented your hill climber, you are likely to
have recognized more choices that you needed to make along the way.
List the choices you needed to make regarding the design of your hill
climber. Including the choices you listed previously, your list
should now contain at least five choices.

For each of these design choices, list the option you chose, and
explain why it seems reasonable to you. If you do not have a good
reason for your chosen option, say so.

Answer the following questions about data collection,
reporting, and conclusions so that you are ensured of collecting
the appropriate data. Attempt to justify your answers to these
questions.
As you do so, keep in mind that what you want is a data set that allows
you to understand the workings of your GA and your hill climber as
optimization tools and you want to report the minimum amount that allows
your reader to thoroughly understand what you have learned. Note that
you may lack a justification for your answers to some of these questions
at this time. That is acceptable since this is your first evolutionary
computation programming assignment in this course. However, you should
keep all of these questions in your mind as the course progresses and be
able to give good, justified answers to similar questions for your large
project.

How many times will you run your GA and your hill climber? Once?
Ten times? Twenty times? 100 times?

If you run your GA and your hill climber more than once, what will
you change from run to run? What will you keep the same?

What data will you collect? Performance data such as success
or failure at reaching the global maximum or fitness at every time
step? (What constitutes a time step in your GA?) Population
statistics such as diversity of the population? (How would you
measure diversity?)

What data will you report? Everything? Best performance?
Worst performance? Averages? If averages, what will be averaged
together? Average population fitness at a given time step during
a single run? Averages over multiple runs?

How will you fairly compare GA performance to hill climber
performance>

How will you report this data? Text? Numbers? Graphs? What
form will these take?

What conclusions will you be able to draw from your results?

Run your GA and your hill climber on the given functions.

Report your results and conclusions regarding the application
of your GA and your hill climber to the given functions.

5. What to Turn In

Write Up

You will turn in both an electronic copy of your write up. Your
write-up should be a coherent document that covers all of the
underlined steps from the assignment above. Note that selected
data in a digested form (such as tables or graphs) should be included in
your writeup; however, your raw data should not be included here.

Code

You will turn in an electronic copy of your code. You will turn in
the source code you have written for both your GA and your hill climber.
Your source code should be well structured and well commented. It should
conform to good coding standards (e.g., no memory leaks).

Data

You will turn in an electronic copy of your data. This may be in a
single file or multiple files. You will also need to include a brief
writeup on how the data is organized.

6. Notes on this Assignment

You may write your program from scratch or may start from programs for
which the source code is freely available (such as on the web or from
friends or student organizations). If you do not start from scratch, you
must give a complete and accurate accounting of where all of your
code came from and indicate which parts are original or changed, and which
you got from which other source. Similarly, for the written components of
this assignment you may follow the format or content of other written works
but you must give a complete and accurate accounting of who deserves
credit for all parts of your documents. You will be graded on the
contribution you make to your project; in other words, to earn the points
possible for this assignment, you must make your own substantial
contributions to the completion of this assignment above and beyond what
you obtain from others. Failure to give credit where credit is due is
academic fraud and will be dealt with accordingly. Please see the University's
web pages on academic integrity.