Robot soccer at UofT

One of the few things I didn’t like at UofT’s computer science department was the lack of robotics courses in the undergraduate curriculum. This becomes all the more puzzling if you take into consideration the fact that UofT excels in teaching and researching artificial intelligence: computer vision, check, machine learning, double check, cognitive robotics, check, multi-agent systems, also check. It seems to me that the only thing missing is a couple of professors whose primary focus would be to create the necessary hardware that would provide a testbed for all those research efforts. Until that hardware becomes a reality though, some friends of mine and I thought that it would be a good idea to try out participating in RoboCup’s Simulation League.

RoboCup is a robotics competition whose aim is to promote artificial intelligence by creating robots, either actual moving hardware or just software-simulated agents, that will play soccer against each other. It’s (ambitious) goal is that by the year 2050 a team of humanoid robots will be able to beat the World Cup champions in soccer (say Brazil for instance), proving that the field of artificial intelligence has advanced to the point where machines can beat humans in an activity that requires elaborate motor skills, team strategy, and coordination. Personally, I find the fact that humans are striving to build machines that will beat them in a popular sport quite scary (and pointless) — I think Garry Kasparov won’t disagree. Nonetheless, until (and if) that happens, I believe that it is absolutely worthwhile to participate in RoboCup, simply because one can learn so much by the the engineering and artificial intelligence challenges involved in that effort.

Long story short, we convinced one of our professors, Steve Engels to supervise a fourth-year course whose topic would be the creation of a team for RoboCup’s Simulation League. About fifteen students were interested in taking this (summer) course, some of them for credit and others as volunteers. The students were split into four teams, each of which competes against the others every week. This way provides a way to set a benchmark by which to compare the progress of different teams. We used the official RoboCup soccer simulator and its incredibly detailed and helpful documentation. Fortunately, despite of the lack of previous experience of everyone who is involved, the course is going pretty well. See for example what one of the teams has been up to:

The bulletin board for the course is here and, admittedly, it doesn’t do the course much justice but I’ll do my best to make it a bit more informative. A lot of emails went back and forth discussing documentation, the pluses and minuses of available libraries for C++, Java and Python as well as other issues. Those notes will be very helpful for future teams who are considering the possibility of participating in the competition, so I’ll make sure to include them in the above board. As for the future of the course at UofT, it seems that it has attracted enough interest from students, so it will be continued, at least for another semester in a different format. Greg is working on it.


Natural Language Processing: is this the coolest course ever?

I decided to take CSC401, a course on statistical Natural Language Processing, this term at UofT, after listening to a lot of friends who were saying how fun this course is. I’ve heard things like this many times before: “Oh, you absolutely have to take that course on the ‘Evolution of Ancient Navajo Characters to Modern Navajo Characters‘, it is wicked!” and the result was a course that made watching  grass grow exciting by comparison. So, I took my friends’ (and profs’) suggestions with a grain of salt.

I am glad to say that everyone was right. This is probably one of the best courses I have ever taken in CS, even though I am not going to specialize in it. First of all, it deals with the one thing that Computer Scientists understand best of all: text. Of course, I have to admit that using Python in our assignments makes our tasks very approachable, because we can just think of them from a high-level perspective, instead of worrying about how to tokenize the text, use regular expressions, split strings, store data etc. These things would take a lot of time and effort in C, or in Java for that matter. Second, the assignments are empirical by nature, meaning that there is no right answer you can obtain by a formula, nor an algorithm that will solve your problems optimally. For instance, how can you detect sentence boundaries? “By a period” you say? You obviously haven’t been to St. James, and haven’t walked on Yonge St. See, you are dealing with many parameters that cannot possibly fit in your head, with many exceptions to the rules, and trial-and-error is the only approach that will make you choose some value over others. Apparently, this is how you develop experience in this field.

Speaking of our assignments, our first one is to train a decision tree from 500 articles, each 2000 words long, taken from the Brown corpus. The tree will classify unseen documents from the same corpus according to their literary genre (e.g. is it sci-fi, adventure, reportage, romance, humour?) It’s really cool, or at least it is much cooler than the  “Evolution of Ancient Navajo Characters to Modern Navajo Characters.” So, spread the word and tell your friends about CSC401. It/PRP ‘s/VBZ worth/JJ it/PRP ./, even though POS-tagging is not perfect.

College Puzzle Challenge 2008

Yesterday some of my friends and I took part in Microsoft’s College Puzzle Challenge for our first time, because we thought it was going to be fun and stimulating. We were not disappointed; on the contrary, the event was one of the most fun and well-organized events I have seen, despite the large number of participants (50 teams from UofT, which makes almost 200 people, and another 300 teams all across North America). The 50 teams occupied all the corners and tutorial rooms at Bahen.

This year’s theme was to solve the mystery behind the stolen Rosetta Stone through a series of 30 puzzles which kept us busy for 12 straight hours –thank God food was provided– We managed to solve the easy puzzles, half of the moderately hard, and a couple of hard ones. We got really excited in the first three hours because we solved every puzzle we attempted, but we had a stream of dead-ends from 3:00pm to 7:00pm. What we learned from yesterday’s contest that will definitely be valuable the next time we try out was that:

  • We should have written a program that accepts a grid of characters as an input and finds all the words that are hidden in the grid horizontally, vertically and diagonally by using Word’s or Excel’s spell checker.
  • We should have known how to use Live Maps, I’m not kidding 🙂 This helps very much for solving some of the puzzles that give locations of airports or cities and paths between them. We needed to plot the components of the graph on the map to see a word formed. In particular, make sure you know how to create a collection of locations (you gotta have a hotmail account and login before you do this) and how to draw straight lines between them. Sounds trivial, but when was the last time you needed to do this on something like Live Maps or Google Maps?
  • We should have read Harry Potter. At least three puzzles contained direct references to the seven books of the series.
  • We should have treated Wikipedia as our bible; you can get many ideas and avoid many dead-ends as long as you find the proper Wikipedia article.
  • And last, but certainly not least, we should have asked more questions. As newbies in the contest, we thought that asking for hints from the organizers was something that few people would do and only after they had tried everything they could to solve the puzzle. That turned out to be strategically wrong on our part because we had at least 5 puzzles whose solutions we had figured out by 80% and all we needed was a connecting thread. We shyly asked our first question around 7:00pm and by midnight we had asked 5 more questions. It turns out that the remaining 349 teams all across North America had asked 6000 questions in total, i.e. 15 questions per team! Lesson learned 🙂

We had a great deal of fun, and we enjoyed the event very much, so if you haven’t taken part in the College Puzzle Challenge, do so and you won’t regret it.


I am super excited because I figured out the answer to my question about how to offer back to the community around me: I decided to join UTFIRST and UofT’s Robotics Club. The teams that seem to interest me the most in that club are the Autonomous Rover team and the Soccer Robots team; both of them will participate in competitions around June 2009. UTFIRST is a program that connects university students who might know a thing or two about engineering/science with high school students who will be preparing for their own competitions in May. If everything goes well, I am going to learn about embedded systems and AI and be a mentor for high school students. W00t!

On a similar note, today I attended a presentation given by Raffaello D’Andrea here at UofT. Perhaps you have seen his robotic chair, or heard of his achievements at RoboCup. His work combines engineering, computer science, mathematics and physics… ah ETH Zurich, you are a very lucky university.

Community service?

One of the things I have been thinking this summer, while being away from my parents, girlfriend and friends back in Toronto is how much time have I spent doing any form of community service since the day I arrived in Canada? I say with great regret that the answer is “one day.” The time I have spent to improve the community in which I live can be counted in hours, and it was last year when I volunteered for UofT’s Outreach Day and I planted trees near the Etobicoke river, back in September 2007. That is truly sad…

I am not saying that giving back to my community should take precedence over my studies; that is a trap that I won’t fall into. Besides, before one becomes a good teacher one has to become a good student. However, I do think that I should reserve some of my free time to do things that will make the community around me a little bit better. Why? For the same reason that you’d offer some help to an old lady carrying heavy bags out of the supermarket: it’s the right thing to do. The fact that my studies demand all my attention doesn’t mean that I will alienate myself from my peers, like I have done many times in the past.

Inevitably, I started thinking what defines my community and who exactly are my peers? Unfortunately, I do not live in a residence, so my notion of community does not expand to a dorm. Are my parents my entire community? Of course not, I’m not that antisocial, I do have friends, good friends. So, are my parents + friends my community? Well, not exactly, because I do care about other issues whose scope is greater than that. Here are a few of them, in order of precedence:

One of the things that literally eats me inside is that people my age back in Albania do not have access to modern textbooks, unless they download them from the Internet, simply because they are so expensive. If $90 for a usual textbook is deemed expensive for students in Canada, then how expensive will it be for a student in a country like Albania? They also do not have professors who can guide them, especially when it comes to Computer Science, but they cannot download that from the Internet, can they? I wonder if someone has told them about books such as Programming Pearls by Jon Bentley, the Algorithm Design Manual by Steven Skiena, or Learning GNU Emacs by Eric Raymond et al. That’s all it takes some times, just to point out the right path and many people will follow it. For the ones who study CS, I wonder if their degrees will be equivalent to western universities’ degrees when they try to apply for grad studies or work. I fear that they will have the same fate the previous generations have had, that of non-recognized degrees when they go to another country.

Another one is how inaccessible computers seem to people in their fourties and fifties, who might be quite well-educated in a specific area, but are completely computer-illiterate, to the point where browsing through the Web or filling out an online form seems like a challenge. Be careful here: they are not stupid or under-educated; they just haven’t used computers before, probably because in their countries records were kept on dead trees. They never needed computers, so when they go to a country like Canada, people think they are stupid just because they don’t know how to use Word and Excel… The neat thing is that they can pick this knowledge up very fast if they are systematically taught by an instructor.

The third one has to do with the student experience at UofT. The interns I have met this summer at Google come from a variety of backgrounds and from many different schools ranging from MIT, to universities in New Zealand, to…you name it. The ones who study in American universities usually have a thing in common: they are part of fraternities, sororities, they live with other people, they know how to socialize and share, and (very generally speaking) are people who try to improve the community around them. They participate actively in their universities’ events and they still manage to do very well academically. In other words, they are people who I admire.

To answer the question I asked myself some paragraphs ago: my community is all the people I interact with and all the things I care for.

Here’s the challenge: how can I offer some time back to my community, spend more time with other people, join my fellow students, improve my student experience and that of others, without impacting my studies negatively in this very critical 4th year? Can I do something like that, or is it beyond my abilities? Am I again overestimating what I can do? Also, is it possible to use what I have learned so far in CS to improve my community? Are there ways to do that in UofT?