Although the bots don't usually complete their task of moving blocks from distribution areas to bins, we feel we have made some significant achievements this semester. Apart from the obvious improvements over Version 1 of BOTSsim, which was released at the end of August, our knowledge of genetic programming concepts has been substantially enhanced.
Our biggest challenge was finding a fitness function that would help bots achieve their task. The results were poor at first, but we eventually saw bots getting at least halfway there: finding blocks and picking them up. With more time, we would probably have found the kind of function we needed eventually, but such time was limited. We believed a more lateral approach was required.
We call the approach we followed Mirroring. This is based on Mark's observation that the second stage of the bot's task--finding a bin and putting a block down--is similar to the first stage, finding a block and picking it up. We simply programmed BOTSsim to take the rule set that achieves the first stage, and "mirror" it so it could achieve the second. This only worked in rare instances, but it was still an interesting experiment in genetic programming.
The fitness functions we tried are discussed in section 3.2 on page 11 of this document, and the mirroring approach is documented in section 3.3 on page 13.
We should note that occasionally bots do achieve their set task. This was first demonstrated at the University's Open Day. That occasion was a fluke, however--it was based on a very primitive fitness function, and has not been repeated since. We have also developed bots that achieve their task by writing the rule set ourselves. However, such bots only work in very simple instances, and when they share an environment with other bots, they often do not perform at all.
Genetic Programming aside, we have also made BOTSsim better for users. They are now able to quickly find the bot with the highest fitness, and display that bot working in the environment. The bots are labelled as they work within the environment window, and their rule sets can be displayed instantly in a user-friendly format. The overall performance of bots can be viewed using the BOTSsim histograms, and we have written Perl scripts that can analyse the log files generated, and generate data useful for statistics. The context-sensitive help is up-to-date, and any problems are explained in a user-friendly manner.
This document contains all information about the BOTS project, except for BOTSsim User Documentation, which is in a separate document. Programmer documentation commences on page 14, testing information starts on page 98, and minutes from client and group meetings start on page 126. We also have some ideas about what could be done to improve BOTSsim, and these are documented on page 123.
We had intended to write another program, BOTSstat, to enable the user to do this easily. Time restraints prevented us from completing this, however, and it was not part of the original user wish list.