May 28 - June 1
I arrived in Providence over the weekend before work began, rather homesick. Fortunately, the grad students I'm living with are very nice and helpful. Victor, whose room I'm subletting for the summer, is one of my mentor's grad students. He's been a part of Brown's team in the Trading Agent Competition for years now, but is working at HP this summer.
I met a lot of people this week, most of whom are my teammates. They are all so friendly, resourceful, and eager to help (with understanding the code, other technical problems, or just getting to know the area)! Amy and Tyler (another grad student who's been working on our supply chain management (SCM) agent, Botticelli) gave me an overview of how our agent works and I read some papers about the strategies it uses. I was very excited to be able to apply knowledge I've learned in past classes (especially Algorithms and Intro to AI) to understand these papers: Last year our agent used integer linear programming, and this year we're thinking of solving a generalization of the knapsack problem instead.
There are several games in the TAC in which we can choose to participate. I've decided to work on the SCM Prediction Challenge, which is new this year. Aysun, who is from Turkey and has just finished her first semester in the CS Masters program at Brown, will be collaborating with me. I'm hoping to use our solution to the challenge to improve our SCM agent, since this agent needs to do predictions as well. I'm really excited about contributing something useful to our team. Hopefully I won't get discouraged by the great disconnect between ideals and reality (like the difference between clean, elegant-looking code that has a bug and messy, incomprehensible code that actually works).
Speaking of messy, incomprehensible code that actually works, I've been trying to understand how our SCM agent currently predicts component prices. The predictions can be split into two types (see My Project for details), those for component prices (supplier-side) and those for computer prices (which I often refer to as "customer-side," although this is really a misnomer). While one of the papers I read describes how Botticelli's customer-side model works, no one seems to know how the supplier-side model works except for Victor, so I dived into the code for the supplier-side model to find out, and Aysun took the customer-side. Botticelli has existed for several years, with a new wave of people working on it each year. I don't know how many people have touched the supplier-side model, but the code seems very disorganized (and perhaps longer than necessary). For a model deemed so naïve, I'm surprised it is over a thousand lines.
Right now, we have three different possible approaches to the prediction challenge. One is to adapt the models we currently have in the SCM agent to the prediction agent, although I really hope we can improve upon that. Another is to implement an idea from a paper that Amy gave me, which I don't really understand. Both Amy and I think that the authors failed to justify a certain assumption, and there is some mathematical magic above my head (although they mentioned Hidden Markov Models, which I learned about in Intro to AI!). Finally, we could implement a machine learning algorithm. Given enough time, we could do all of these and compare the results.
The prediction agent does not get a lot of information. Every day, there are a few statistics related to the supplier-side/customer-side supply and demand, but they seem too nebulous (to a human) for the specific prices we are supposed to predict. I tried thinking about the intricate relationships among the different variables, and it just became too complicated to hold in my head. There must be some complex analysis a computer can do that arises from simple rules a human can understand though. The question is, how does a human come up with the correct algorithm to take advantage of the power of computers?