This is a list of potential project ideas that students may be interested in. It may be that they will be a starting point for ideas that you might develop further yourself. I would be happy to supervise projects in these areas or to discuss variants on these ideas.
Develop an application which will help visualise the algorithms of the CA318 module. In particular, this applications should show the algorithms DFS, BFS, Iterative Deepening DFS and A* and how they would solve the 8 Puzzle. It should be possible to select heuristics where appropriate and to dynamilcally show the progress of the algorithm. It would be possible to see the nodes and the open and closed lists would be indicated by colour coding the relevant nodes.
This program should allow a user to solve a Sudoku problem. The user should be able to select different algorithms and to vary algorithm parameters. This will help to demo the effect of modifying parameters. In addition, the program should display how the program is working and display measurements (e.g. total positions examined etc.) to show how it is performing so that different algorithms can be compared.
Timetable generation is an optimisation problem. Develop a program to allow users to enter timetable constraints and generate a timetable which satisfies those constraints.
Ideally, your program should allow a user to choose different optimisation strategies, e.g hill climbing, simulated annealing, genetic algorithms, exhaustive search and different parameters for those search strategies.
Using AI and heuristics, write a program to solve the game solitaire. Here are some more details
Google Earth has a useful markup langauge called Keyhole Markup Language, or kml. This allows you to develop an annotated view of google earth. Using this language you can record tracks, photos and comments on google earth and generally make a very useful digital diary. The project idea is to combine GPS data and digital camera data and make a KML editor to ease the creation of such a digital diary.
Develop a program that will take a standard Ebook and speak it out using a voice synthesiser. It should present chapter information properly and allow you to easily move back and forward in the book. Incorporate voice recognition to make it easier to move about the text.
Build a graphical viewer that models object creation and interaction in a running Java program.
This would allow you to see how the objects of your program interacted. A user of this project would run a Java program and be able to see how the objects interacted; which objects created other objects; where objects were created and destroyed. The project would be able to display the dynamics of a running Java program at the object level.
The project would be especially useful to researchers in Design Patterns. The project would be developed in Java, using Java 3D for the graphics (and optionally Java sound for effects) and would use the debugging API to interact with a running Java program.
API = Application Programmers Interface; MIDI = Musical Instrument Device Interface.
Many introductory programming courses use a graphics library to make it easier to access Java graphics facilities. The idea was to stimulate the students. Sound and Music might also interest students. The idea of this project would be to create a corresponding library to make it easier to access the sound API in Java. This would allow students to use the sound facilities of the without getting bogged down in the details of generating MIDI.
The project should also include example programs to demonstrate the API.
Write a program that can parse a C++ or Java program and identify if it conforms to a specific style with regard to indentation, variable names, method/function usage etc.
Convert program source code into a flowchart. Allow the resulting program to be executed with the relevant sections of the flowchart being highlighted.
Normally you can only see a web site a page at a time. The idea of this project is that you could point your explorer at a web site and it would work out the directory structure of the web site and allow you to explore the files as you would your own file system. This would also allow you to copy all or part of the file structure of a remote web site should you so wish.
The Web File Explorer would use the http protocol to get details of files. It would initialy explore the site by downloading pages and using recursive algorithms to build up a representation of the files and directories and then present them in a standard tree like structure.
The project would use Mime types to allow a user to activate appropriate programs for the different types of files.
A variation on this project would be to represent the web site as a graph of links between pages; to display the graph and to allow a user to browse the web site in this way.