Fundamental to the understanding and implementation of massively
parallel, distributed computational systems is an investigation of
the behavior and self-organization of a variety of systems in
which useful work emerges from the interaction of many simple
agents. The question we address is: How should a multitude
of independent computational (or robotic) agents cooperate in
order to process information and achieve their goals, in a way
that is efficient, self-optimizing, adaptive, and robust in the
face of changing needs, damage, and attack?

Fortunately, nature provides many models from which we can
learn. In this course we will discuss natural computational
systems that solve some of the same problems that we want to
solve, including adaptive path minimization by ants, wasp and
termite nest building, army ant raiding, fish schooling and bird
flocking, pattern formation in animal coats, coordinated
cooperation in slime molds, synchronized firefly flashing, soft
constraint satisfaction in spin glasses, evolution by natural
selection, game theory and the evolution of cooperation,
computation at the edge of chaos, and information processing in
the brain.

You will learn about specific computational applications of these
ideas, including artificial neural networks, simulated annealing,
cellular automata, ant colony optimization, artificial immune
systems, particle swarm optimization, and genetic algorithms and
other evolutionary computation systems. These techniques are
also used in computer games and computer animation.

Since the goal of this goal of this course is for you to gain an
intuitive understanding of adaptive and self-organizing
computational systems, the lectures make extensive use of videos,
simulations, and other computer demonstrations. Your grade
will be based on about six or seven moderate-sized projects, and I
will consider group projects (but they will have to be more
ambitious!).

Prerequisites

This is a project-oriented course and therefore all students will be
expected to have basic programming skills; for undergraduate CS
students, the recommended
minimum background is completion of the core courses. Since
this is a senior/graduate-level CS course, I will expect you to
be competent programmers and to have the general background of
a senior in CS. For non-EECS students (e.g., those in biology,
ecology, psychology, etc.) I will provide alternate non-programming
assignments. If you have any questions about whether you should take
this course, please send me
mail.

Grading

Your grade will be based on the projects, in which you will
conduct and write up experiments using either off-the-self
software or software that you program yourself. (Non-EECS
students can do alternative, non-programming assignments.)

Students taking COSC 427 and COSC 527 will be expected to do
specified additional work beyond what is required for COSC 420.

If you meet all the requirements of a project, you will generally
get a B on it. Higher grades (B+, A–, A) are awarded for exemplary
work. If you do not meet the project requirements, or your project
is late, you will get a grade lower than B on that project.

Late Policy:
There will be a 10% deduction for each day late, up to 3 days;
after that your grade will be an F. No exceptions!

There will be occasional pop quizzes, which together will count
no more than one project.

NetLogo Programs
You are supposed to be able to run NetLogo programs as Java
applets. To do this, click on their name below.
However, Java requires a 64-bit browser browsers (e.g., Firefox,
Safari, or Chrome 39 or later). Also beware that if you
are running NetLogo over a slow connection, it will have to
download the NetLogoLite jar (3.3MB). If you have
downloaded a NetLogo system, you can also download the programs
(.nlogo files) directly from the NetLogo
directory.

The following are NetLogo 3.1.5 programs. If you want to
run these on your own computer, you will have to download the
NetLogo 3.1.5 system, which is not the latest version.
Soon I will put the NetLogo 4.0 versions of these programs
on the website, which will run under the latest version of
NetLogo.