T396 Artificial Intelligence for Technology (2005)

Level 3, 30 points.

With real life steadily reducing my free time I decided to stick to 30 points' worth of study this year and chose this course largely because it sounded interesting (and, of course, if fit into the degree plan).

Block 1: Knowledge-Based Systems

The first block of work covered what is an interesting area: how can you codify knowledge so that it can be interpreted by a computer and inferences made from the knowledge that has been explicitly coded? This basically covers the area more commonly known as "expert systems", and moved from basic coding of rules and into various ways of dealing with uncertainty in knowledge, including fuzzy logic and Bayesian updating.

I found all of this very interesting, but there was one problem: the software. To work through the exercises in this block we were given a package called Flex, which supposedly provided a user-friendly front end to a Prolog based inference engine. The documentation was extensive, occasionally accurate and rarely of any real use. The software itself was, frankly, a complete dog, which seemed hell-bent on preventing me from converting my intentions into code and occasionally required Byzantine work-arounds to make the system do what I intended. Maybe if I had made a more thorough study of Flex I might have started to think in the right way to make it do what I wanted, but this was intended to be an easy-to-use piece of software that would help illustrate elements of the course material without getting in the way too much. Instead, I reckon it is probably the most awkward, counter-intuitive and inconsistant programming language I have ever encountered (bar Intercal, but that is to be expected!). Why couldn't they have based the course on the underlying Prolog system?

Rant over.

Block 2: Computational Intelligence

This was a bit of a "not in Kansas any more" bit, as the second block moved into areas where you don't so much program computers as let them program themselves. We first had a quick tour around genetic algorithms and their related techniques of heuristic hill climbing and other similar optimisation techniques, before moving into the meat of the block: neural networks, computer systems which try to mimic the way that real, biological brains operate.

Now, the thing with neural networks is that building them seems to be as close to voodoo as you will get in computer science. There are rules of thumb, guidelines and recipes, but when it comes down to it you just have to jump in there and guess the best layout for a given purpose. I think the idea is that you should be able to build up a feel for what makes a good or bad network. Most of this block, then, was spent mucking about with a piece of software, Neuralworks, trying out various standard network configurations (figured out over painful years of research by far cleverer people than I) and tweaking their parameters to see what happens. I must say that this was quite a lot of fun, if time consuming, and the software, while being a little clunky and a very "retro" feel to it, but it did what it was meant to pretty well and, crucially (and unlike certain other packages I could mention), the documentation seemed to be accurate.

Block 3: The Project

The last time I didn't have an exam at the end of a course was in my first year, on T171. Since then I had got good at doing OU exams and getting good results in them. So the fact that the last couple of months of the course were spent working on a form of project, the report of which would be in lieu of an exam, took me right out of my comfort zone.

Actually, calling this a project was a bit of a stretch. It was a series of semi-guided experiments that fit together as an investigation, in this case, evaluating different approaches to building a computer system to aid in the rescue of oil-soaked guillemots. I kid you not. Basically, the premise is that rescue workers have to decide, based on an initial assessment of a bird's condition, whether to attempt to rescue it or to put it down, and a computer could be used to make this decision based on an analysis of previous successes and failures.

So, guided by course notes, I mucked about with KBSes (with many headaches) and neural networks (with slightly fewer) and wrote up a report. A few weeks later I was selected for an over-the-phone interview to verify that I had actually done the project (during which I mostly ranted about the Flex software), and then I passed. Not an entirely pleasant experience, but a good exercise in time management.


This was a real mixed bag of a course, with some fascinating parts and some elements that made me feel that my time would be more constructively spent banging my head against a wall. To date, it was certainly the most stressful course I have done, but on balance I think it was worth the effort. While I'm at it, I feel a mention should be given to the course text, "Intelligent Systems for Engineers and Scientists" by Adrian A. Hopgood: I found this a nice, clear text providing a pretty decent overview of the subject. It remains on my bookshelf as a first place to look if I want to get my head around an AI concept without getting too far into the detail. Good stuff.

This page last modified: 2008-02-25.