What am I doing?!
As many of you know, I study Computer Science at the Delft University of Technology. Since I’ve already spent 6 years there, it’s time to finish up my Masters degree, and start off my career. Before I’m doing this however, it’s important to kick some Computer Science ass with an interesting project and the corresponding thesis. So what exactly am I doing?
Let’s start with defining the topics of interest. I’m doing my thesis project at the university, with the Embedded Software group (http://www.es.ewi.tudelft.nl/), a term that encompasses 2 terms: embedded and software, so what does this mean? The “embedded” part implies that we’re not talking about vanilla computers, but… yeah, other devices. Embedded devices are typically MP3 players, mobile phones and modern TV’s, but in our case mostly small robots, yes ROBOTS.
Now don’t get propelled out of your seat. When I say robots, I mean small computers that are able to fulfill tasks alone or in cooperation with other robots. Note that this definition of robots does not require taking out the garbage, but some robots might be able to move, and adjust their environment.
As you may have noticed, the future that is portrayed in science fiction books and movies has not really arrived yet, and that is not only due to our ability as humans to understate the current state of technology (not true? see the comic below), but also due to the fact that programming robots is a humongous PITA in terms of complexity. Obviously this is even more true when we want robots to cooperate and do something useful together.
Without understating my own abilities I can honestly say that this subject is too big for me to tackle on my own, so the best thing I can do is to take a piece of the ginormous pie, understand the difficulties and make things better. So what is this thing that is my piece of the pie…?
Basically I will try to use the principles of evolution to let two parent programs create a new baby program. In combination with having random mutations in programs this will generate a wide range of different programs. By doing this, we can breed a lot of different programs that may or may not serve a certain purpose. Because, like a teacher of mine once said, “Computers are very good at doing very stupid things very fast”, we can generate a lot of programs in a very short time, and judge them by their abilities in a simulator. By picking out the ones that perform best, and having them make baby programs, we can generate programs that are very good at specific tasks. To keep this description the size of a nutshell, we can then load this program on a robot and we’re done, yay!
While this may sound rather easy, the problems involved are scattered across a wide range of computer science problems. To name a few: Genetic Algorithms, Tree-Based Genetic Programming, Agent-based models, Graph Theory, Machine learning, and a lot of different subjects.
So that is in essence what I’m currently doing. As you can see it is multidisciplinary, and hence it is sometimes difficult to explain to outsiders, but I hope this gives you an idea of what I’m doing :)
Cheers!
