This is the seventh piece in a series of journal entries written about various aspects of artificial intelligence. This piece contains a short discussion of how programming languages deal with constraints.
Constraint satisfaction in artificial intelligence interested me when we went over it in class. I became particularly interested in how to represent a constraint in a programming language. What would be the best way? Clearly one could sometimes easily model a constraint with conventional logic available in any programming environment or language; consider Sudoku, the mathematical puzzle in which a square is divided as thought it is a tic-tac-toe board, with 9 subsquares. Each subsquare is again divided, for a total of 81 squares. The puzzle is partially filled in with integers 1 through 9 in various places, and the player must fill in the correct digits in the correct subsquares such that each row, each column, and each square contains only the digits 1 through 9, and each digit only one time. This kind of constraint-based problem could be easily modeled in nearly any programming language worth its salt.
But what about more complex constraints? I searched around for a bit, examining possible ways to deal with a complex constraint before I found an interesting language named Kaleidoscope, which seems to have constraints built directly into the language specification, probably as a basic type. I wish I could say with more certainty, but few details seem to exist outside of research paper form online, and my subscription to the ACM no longer seems valid.
However, even if you don't feel like using Kaleidoscope, some options exist in more common languages such as C++ and Java, both of which have constraint-satisfaction libraries available.
I have been thinking of an idea for a good final project based on Kaleidoscope. My next journal entry will probably be a project idea fleshed out in full about constraint satisfaction programming,
This is the sixth entry in a series of journals I am writing for my AI class this semester. It concerns some thoughts of mine on the Cyc project, and the usefulness of OpenCyc.
As we learned in class, Cyc is an attempt by the company Cycorp to create a knowledge base of basic, common-sense facts about everyday objects and events that could someday be used to create new assertions about these objects and events, based solely on what has already been added to the ontology and some basic logical inference rules.
I'm going make a bit of a blanket disclaimer before I delve into my feelings about Cyc and OpenCyc: I am extremely interested in AI in general, and knowledge representation in particular. Ever since I had heard of Cyc (sometime back in junior high, I think), I have considered it an excellent idea. With the addition of the OpenCyc program (and the ability to allow the great mass of people able to access the internet to augment the knowledge base), I think the idea has only become more useful.
However, is this really artificial intelligence? I was leafing through an old AI book the other day and was reminded of the Chinese Room gedankenexperiment. The Chinese Room (in case someone other than Wheeler happens to read this!) is a thought experiment in which an English-speaking person is placed in a locked room and passed messages under the door which are written in Chinese, which he has no natural knowledge of. However, he is equipped with a series of books written in English which detail precisely how to respond in Chinese to any given set of characters. So as he receives a message under the door, he examines it, looks up the appropriate response in one of his books, copies the squiggles shown onto a new sheet of paper and passes it out underneath the door to the entity waiting for a response.
Now assuming that the man is a flawless follower of directions, the entities on the other side of the door have no idea that he has absolutely no idea how to write in Chinese. To them, he is perfectly fluent. John Searle, creator of this thought experiment, suggests that this is an excellent model for the way computers deal with knowledge input to them by humans. If we consider the knowledge base of Cyc combined with the logical inference rules Cyc could use as equal to the books of rules the man has in the Chinese Room, isn't Cyc just a Chinese Room simulation? In fact, can't we posit that most knowledge representations just lapse into revisions and variants of the Chinese Room? The computer has no underlying knowledge of the Cyc contents just as the man has no intrinsic knowledge of Chinese.
This kind of made me sad for a little while, as I liked Cyc as a project and wanted to see something good come of it. But then I cogitated a little further, and decided maybe it is exactly how our brains work as well, at least in the beginning. When I began thinking as an infant, I had an inbuilt set of rulebooks in my genes. Without devolving too much into a nature vs. nurture discussion, I think I had a very basic set of rules to allow me to interact on a very primitive basis with the objects around me. And really, how is that different from the rulebooks the man in the Chinese Room is given? After a while, wouldn't the man in the room (as an intelligent being) begin to remember shortcuts about which books to look in? After a long enough amount of time, he might indeed emerge from the room as fluent as if he had been born and raised in Beijing!
So since I have decided to think of Cyc as a very early stage of the rules handed down to me by genetics (assuming nature is indeed dominant over nurture, which is what I suspect), I suggest that Cyc is a very important project indeed. Perhaps one day the knowledge base will grow large enough for the rules of inference to begin making those shortcuts. Once that happens, I think we are in for exciting times indeed!
This is the 4th in a series of AI journals for my class at UNH. The third is missing due to my contracting mono a few weeks ago and spending most of my time actively trying not to die. In the course of events I managed to forget about my journal entry. Well, maybe at the end I will throw another on as a bonus.
Anyway, my timely and topical journal entry will revolve around this piece in recent BBC News, As soon as I saw the headline I started to become extremely skeptical. Only twenty-two years to match human thought capability? Then I noticed the quote's originator: Ray Kurzweil. Ah-ha!
Ray is a borderline-manic future-holic. Having read The Singularity Is Near, I would hardly consider him an unbiased source about the future of technology. However, having considered the source, let us give equal thought to what he is saying. I have no doubt that most, if not all, of what he claims will happen will eventually come true. His visions of nanobots and other nanotechnological marvels are almost certainly in the cards, as well as his suggestions of future man-machine symbiosis. I am even a believer in his suggestions that humans will eventually upload their consciousness into a computer system and live immortally as sentient software. But in the next twenty-two years? It seems highly unlikely.
This started me thinking, though. If twenty-two years aren't long enough, what is? I started thinking about the level of change necessary to move from the current level AI is at compared to where it would need to be to be considered human equivalent. Then I considered the length of time it took AI to go from its inception as a concept to what it is today. Even considering that technological progress as an exponential function over time, I still think it will take more than a few decades to get weakly humanlike AI. But who knows? I could be wrong, and Ray could be right. I hope he is! The AI Winter has lasted far too long in my opinion, and here's hoping Spring is just around the corner...
This is the second entry in my series of articles about my experiences with AI, in and out of the classroom at UNH.
I have been doing some thinking about possible projects, and what I might feel like working on at the end of the year concerning artificial intelligence. One of the most interesting areas of technology for me is the idea of distributed processing. I firmly believe that many, many processors working in harmony to solve a problem is the future of computing. The benefits of more hands working on any particular problem are obvious, but so are the drawbacks. How do you synchronize tens to hundreds of nodes so that no work is repeated?
While we have not discussed in class any intelligent ways of dealing with this problem of many agents working on the same problem without repeating work, I felt as though this was certainly within the realm of artificial intelligence. I did a little searching to see if I could discover the applications of AI to this problem.
And I found some interesting results! I was less interested in artificial intelligence in high school because I felt it was too abstract to be of any use, but if I had known better and done my research, I may have ended up paying more attention to my UMASS Amherst acceptance letter, if only to see the MAS Lab in action. Founded in 1968, they have published a great many papers concerning the many uses of AI to control many hands all working on the same project. Perhaps most interesting to me is their ANTs project, which created some very interesting Autonomous Negotiating Teams. One of the coolest aspects of AI, to me, is definitely autonomy. And to pair autonomy with my interest in control systems made me pretty much pre-destined to write about ANTs! Give the project a read and check out all their other projects if you have an interest in that stuff.
This is the first of a series of journal entries for my AI class, taught by Wheeler Ruml at UNH. Each entry is meant to be a retrospective of sorts about my reactions to the class, and to various interesting parts of artificial intelligence in general.
I was interested to learn about A*, a search algorithm which I had heard much about but never actually investigated. After reading a brief overview about in in Wikipedia, I became curious about some of the other state-space search algorithms that returned admissible results. Some digging around revealed B*, which seems quite similar to A* except for the fact that it uses intervals for each node in the search tree as opposed to single values. I would be curious to see if this is ever faster than A* for a common problem; obviously it must be faster for some cases, but which ones? It would be interesting to run both algorithms on a variety of sets of data to benchmark one versus the other.
I also discovered the Bellman-Ford algorithm, which piqued my interest when I noticed it solved a problem posed by Brad Larsen in class. Brad had noted that negative edge weights often played havoc with some of the algorithms we discussed, so I was pleased to notice the BF algorithm, which is a variant of Dijkstra's shortest-path algorithm which accounts for the possibility of negative edge weights. Instead of choosing the minimum edge weight path to expand, it expands all the paths and adjusts those that are negative until no negative edge weights remain. It seems a little counter-intuitive the way it is described here, and I wonder if it could be better explained. It seems to be used in some forms of routing in that all nodes in a network are constantly examining nodes they can reach, noting the shortest path, and propagating this information about the shortest path outward upon the network. Interesting stuff!