CSU 670
Software Development
Fall 2008
Karl Lieberherr

The course covers software development from requirements to
implementation and deployment in an artificial market.
The students develop trading robots for the Specker
Derivative Game (SDG), a multiplayer game based on
constraint satisfaction.
The requirements for the game create an artificial world 
of financial derivatives, raw materials and finished products.

The students learn how to break the SDG trading robot down into subtasks
and how to make a plan to implement those subtasks.
Key ingredients of the algorithmic player are
the creation agent, the buying agent, the raw material agent
and the finished product agent.

Competitions are held throughout the semester to test the fitness
of the SDG algorithmic players. 
Students are given a game shell which they need to test
against the requirements.
As the course progresses,
the students put more and more intelligence into their 
algorithmic players. After a competition.
the players are sorted by the amount of 
money they make after a predetermined number of rounds.
The team that makes the most money, wins the competition.
But the SDG players are also graded based on their design quality.

The students are taught about risk analysis of the derivatives
using elementary probability arguments (linearity of expectations).
This analysis gives clues about how the agents should be organized.
The basic algorithm is based on a very simple recurrence relation 
and basic mathematics like maximizing a polynomial of degree 3.

The students design the communication language between the robots
and the central administrator that maintains the store 
of the game.

The software architecture we use is based on a blackboard architecture
and an implicit invocation architecture based on the visitor design pattern.
The software architecture is geared towards programming an entire family
of SDG based games.

The students perform requirements, design and code reviews.
Requirement reviews take the form of playing the game in class
and writing refined requirement documents.
In design and code reviews, students justify their design
and implementation decisions.

The final exam in the course is a code review where the students
present their players and respond to questions about how
requirements changes would affect their algorithmic players.