CS 372 (Artificial Intelligence) Fall 2004
Week5&6 (Due 10/18) Reactions & Thoughts
Ioana Butoi
I was really interested in state space search since I have used it before but it was not until now that I have fully understood it. I used the A* search algorithm in my last research project because I was told is the best search algorithm, but now I understand why it was the best choice. I can say that now I also have a better understanding of heuristics.I find that taking this course has helped me better comprehend a lot of notions and tools that I have already been using. I think looking at things from a different perspective, and not just using them helps a lot. I am more used to first being presented with a notion and then using it, but lately I have used things first before knowing exactly what they are.
I am looking forward to game playing. I used to write a lot of game programs in highschool but they were all predictable. I am really excited to introduce AI elements into them and make them more random in some ways.
Andrew Cantino
The problem of robotically building maps is interesting, as is the task of using the maps once they are built. I'm fascinated by the use of probability and statistical techniques to generate maps. I would be very interested to find out more about this.
One technique that I learned about in another class was the
kalman filter, which allowed the integration of actual data readings from sensors with a probabilistic model of the sensors' errors and of the world. Is this technique or similar techniques used on robots commonly?
I have a question about our brief discussion of configuration spaces: is it a general property of path searches like that to stick to the edges of objects, or was that just a property of the particular algorithm that we saw in class. The in-class demonstration found the borders of regions in the world where the robot could or could not fit, and then made paths based on connected nodes on these borders. This approach didn't seem to make use of all of the open, available space in the world (which would be presumably safer to traverse without bumping into anything.)
Although we only just started to talk about game playing, I was wondering how easy it would be to make a system that learned the opponent's strategies and style of moving, so that it could better challenge them. In class, we discussed having the computer always assume that the opponent would pick the statistically best move to 'harm' the computer's chances. What if this step was replaced with some sort of learning technique that made the computer learn how the opponent tends to move (either by simply memorizing situations and responses, or by something more advanced?) Looking ahead, I see that this gets addressed to some extent in the book, but I would still enjoy discussing it.
Audrey Flattes
When studying the search functions I keep wondering how I'm going to apply them to a robot. I'm confused about how we will really use them when programming. The reason for this confusion is not that I don't understand the search algorithms, but more because I can't really visualize how a robot will utilize them. When I say utilize I mean that on different level, how will the robot know which algorithm to use. I have a feeling that I'm making this more complicated in my mind than it needs to be or its just one of those things that can't be visualized.After reading chapter 12, I find myself very interested in seeing how all of this will come together. I keep finding myself trying to apply this search technique to the robot projects that we had done so far. Although I'm not sure that can be done. I just keep trying to figure out how exactly this will apply to our robot. Unless of course they're playing a game of tic-tac-toe or checkers, because then it makes perfect since. I can totally understand applying these techniques to a game, but when asking a robot to perform what I'll call everyday tasks such as walking then how do I use this. I think I'm missing something or looking at this from totally a different way, I just don't know what I'm not getting.
Christina Florio
In CS110 we wrote a tic-tac-toe program, but the user always won because it had really no intelligence. I remember thinking about how to write a “mind” for my program, but the best I could come up with was a ton of if statements checking the status of the board – I guess kind of like an S-R agent, only with a lot more restrictions. But all the possible game situations seemed too overwhelming. When discussing how the searches can be applied to such a game, I found it to be very interesting, although still a bit overwhelming because of all the node generations that will be required to play one simple game of tic-tac-toe. I am looking forward to actually writing a game and implementing the searches. And, in turn, I think it will be interesting to see how well the searches perform against a human or even against one another.
Kathleen Maffei
Spending the time in class to go step by step through each of the searches was helpful to understanding how they each worked. In fact, I wouldn't have minded spending yet more time on it than we did. The project was also useful in clarifying the process, too.
Considering our extensive discussions of state-spaces and our brief talk about localization, I decided to see what recent news refers to such problems. I came across a short article which describes new developments in robot technology for the army. In the past, robots were completely controlled by humans. Unfortunately, when the human operator lost contact with the robot, it was useless. They have recently integrated into the robots the ability to map their surroundings as they go, sending the information to a remote computer. This gives them the ability to find their way around without human assistance. It was found that by marking the map with destination points, the robot was better able to navigate the environment than with a human driver.
Sara McCullough
The test on tuesday was very hard for me. I felt like I understood the basic idea of how neural nets, genetic algorithms and the searches work. However, I had a lot of trouble with implementing them in the examples on the test. Especially concerning the neural nets and genetic algorithms. Going over the test on thursday was very helpful in understanding the the details of implementing a neural network. Over the break, I read over my notes on genetic programming from emergence last semester and I feel that I now have a much clearer understanding of how they work. The search assignment we turned in on thursday was very helpful in understanding the various search algorithms. I feel that I have a comprehensive understanding of the searches we covered. I look forward to learning more about the game search trees we began discussing in the last class.Ben Root
I was impressed with the flexibility and power of the search algorithms that were implemented in the search.py and searchqueues.py and eightpuzzlestate.py. The idea which underlies all of it is that you can isolate your solution to be a path between nodes on a graph. All we need is a representation now of our problem which can be fed into applyoperators() and then we can find a solution, even an optimal one.
A friend of mine is always betting on football and basketball games. I am hoping to use either a neural net or a neural net produced by a G.A. to beat him in picking winners. He does pretty well as it is, so if I can win a higher percentage than him I would have a lucrative program on my hands!
This week I was most interested in the beginnings of game playing that you discussed toward the end of the lecture on Thursday. It seems like even with only the brief introduction that you gave to adversarial search we could quickly design an optimal tic tac toe agent. I'm looking forward eagerly to learning more about the famous chess playing computers. Over break I played poker with some friends and I'm wondering whether what kind of A.I. makes the most sense for a game like that where you can't see the other person's "state". I was thinking that a good way to make a poker playing agent would be to use a neural net which was trained on the hand history from a bunch of online poker games. It could reduce the problem to something like "Bet low", "Bet high", "Fold", "Stay". Its inputs would be the number of other players and the amount that they had bet. I might try to tackle it during some spare time.
Sandeep Singh
A few weeks ago, Andrew and I were briefly talking about how a site like Mapquest is able to find a driving route from point A to point B. After this week’s discussions and demonstrations about searches, it has become more evident that tools like Mapquest most likely use some form of search tree. Seeing as how the directions provided by these services tend to be roundabout and often indirect, I think it’s safe to say that they implement a blind search in order to retrieve driving directions. Regardless of what search they may use, these services are very fast and providing directions and driving routes. I could be completely wrong about this assumption. It could be that they use some other technique that we have not yet discussed. Either way, I think such a program could be created using the search methods we have learned.I also found the robot demonstration in which Ben and I were the hands, Andrew the eyes and Ioana the brain, to be very helpful in understanding the point that the programs we are to write should—and can not—be exact in their execution. In the lab exercise from the previous week, I had commented in my lab by saying that I had wanted to somehow use the angles of reflection to determine the degree by which the robot should turn. After this informative—yet comical—example, it has become clearer to me that using such methods is not the goal when it comes to artificial intelligence and programming intelligent agents.
I’m glad we finally started to talk about adversarial search and the role of AI in game playing. I have played with several different chess program over the years and have always been interested in how they work. About a year ago, a friend mentioned that he wanted to write a basic program to play a user in tic-tac-toe. At the time, I didn’t see how he would have been able to do this. After talking about the search algorithms and how static evaluation helps the computer choose the next move, I am now beginning to understand how a basic tic-tac-toe program would work.
I found this site (http://www.research.ibm.com/deepblue/meet/html/d.4.5.a.html) to be somewhat interesting. It’s an interview with Joseph Hoane, who worked on the Deep Blue project and it briefly mentions the fact that Deep Blue goes through millions of positions each second, given the current position. What I found to be the most interesting part of the interview was that the programmer himself admitted to being a poor chess player. So I ask, does this make Deep Blue intelligent? Because it plays chess better than the people who developed it, does that not make it more intelligent? I think Joseph puts it best when he says he’s ‘vicariously playing chess at a world champion level’.
Darby Thompson
The creation of our human robot was hilarious at some points, however it was also an eye-opener. I enjoy writing a program where the outcome is always as expected - a perfect outcome. I seem to always approach writing a brain with the notion that I can account for every possible circumstance - with enough if statements you can make anything work! However this is ofcourse ridiculous and sometimes you just have to write something with enough abstractions that it can behave similarly to the perfect behavior that you have imagined. It is very frustrating to me to try to write a wall-following program since it is impossible to account for all the possible locations of a robot and abnormal sensor readings! Using the example of the human robot it was obvious that there were multiple areas where the program could 'go wrong' and behave unexpectedly. There was miscommunication and plenty of misunderstanding between the brain and the parts of the robot frequently. 'Move a little to the left' was translated into an entirely different action by the parts of the body. What the eyes saw was not always interpreted correctly by the brain, and a memory of the current location and orientation of every part of the robot was very vague. Our 'perfect' robot was infact far from perfect. We all had different ideas of how to tackle the problem and there was a huge lack in precision.
I was excited to hear that we are moving on to some game playing. When I was taking CS110 I thought it would be a great idea to write a tic-tac-toe program that was unbeatable. At that time programming, trees, and searches were completely new to me so I thought that this was such a huge project. I started to write out the entire tree for all possible moves and outcomes. The tree was enormous and I was so pleased that I had finished it! Now, looking at much more complicated games such as chess or even checkers seems so daunting. There are so many possibilities! It now makes sense to use iterative depth first search up to a few moves to figure out the next move that will leave the computer in the best position after say, 5 moves.
I am currently taking a game theory class and a big thing that has come up is that we must assume that both players will act completely rationally with the goal of winning. When you make this assumption there are some great ways to calculate what each players optimal moves should be. This is especially easy in two-player zero-sum games since the outcome of their choices can be represented in a matrix, however if you are trying to write a program to play chess that will win you must take into account that it will be playing a human (if indeed that is what it will be playing). If so maybe it should adapt and use some strategy similar to the one Andrew suggested; adapting to its opponent, learning which choices its opponent tends to make, whether that is the rational choice or not.
