Tuesday, February 26, 2013

Good Guy Zoav

Well well well!

After all my belly-aching about how there were no good, solid CS sources for information on multi-agent software, I came across Yoav Shoham. The guy's my new hero. He saved me from the legion of terrible, horrible, hand-wave "BUT IT'S LIKE REAL INTELLIGENCE, ONLY IT'S NOT" papers.

I came across him by asking Friend Google about "seminal work on agents", and his name kept on being dropped for his highly-cited paper Agented-Oriented Programming (1993). I stalked him looked him up a little further, and he's running a research group that puts out a respectable amount of research at Stanford, and he's recently (well, relatively recently) put out a great book on the topic: "Multiagent Systems: Algorithmic, Game Theoretic and Logical Foundations". Our local academic library, as much as I love it, takes ages to get new material even if explicitly requested. I put in a request anyway, but with little hope to get the book before my contract at Rhodes expires and I it's no longer useful to me.

I pondered just picking it up for myself (it's really reasonable for a high-quality text), but then...
Good Guy Yoav to the rescue! He generously offers the free ebook for download if you can't afford it or can't get access to it.

I love this guy. I've spent years looking to break into this field, ranging from an inkling of interest to building my own agents of varying scale and ambition.

I've started reading his book, and I just need to say: wow. I'm loving every page! It starts with a solid grounding in algorithms and logic, which is exactly what I wanted to banish my concerns that it was going to be another "we needed a paper at the last moment and Bob can hand-wave well" text. Thank you Yoav, you're my new hero!

Thursday, February 21, 2013

Agent Reading and Progress

So I'm in the middle of getting to grips with AI agents - something I've had an on-again, off-again relationship with for years. Toying with it for a PhD idea, but not really finding the Something Special that's gripping me into putting in the monumental amount of effort that a doctorate would demand.

I've started reading "Developing Intelligent Agent Systems" by Padgham and Winikoff, which seems like a more pragmatic text on the topic - refreshing, given I've spent most of today reading through agonizingly poor conference and journal papers on the topic. It seems that Computer Science has decided to drop the entire field (because let's be honest, Asimov's "I, Robot" showed us that specialized applications of technology beat general-purpose development hands-down), and it's been adopted by Information Systems and Infomatics types - the kind of people who think that "pipes" are an innovative idea, if they could only fit a methodology around using it in their current paradigm, so they could implement a framework *retch*.

Back to the book, though: Padgham & Winikoff use the definition of an agent from Wooldridge (2002), that an agent is a "computer system that is situated in some environment, and that is capable of autonomous action in this environment in order to meet its design objectives". Which is a terrible definition, because it requires an extremely specific interpretation of the terms used, or it could easily describe almost all software.

In any event, it's later qualified by a number of additional attributes that the author hastens to mention change the definition from "software agent" to "intelligent software agent": the software must be pro-active, reactive and social. They continue on to add robust or flexible in the event of a blocked/failed goal.

My interest leans heavily on the social aspect of agents: I've been inspired by the concept of Weavrs, software agents that literally exist with their own social networking accounts. While it is certain that automated software agents have existed before weavrs (spambots, for instance), the idea of creating a persona whose role is to digest, process and then publish information seems quite novel. Weavrs, as far as I know, do not taking social input, but do have a social output.

The idea tickling around at the back of my brain is to take this idea of social agents whose job is to consume, process and publish information and to extend the idea into a logical mesh of agents with a fairly transparent communication medium (ala Twitter). Each agent specializes in certain specifically tooled news sources (an RSS agent, a Twitter agent, a Facebook agent, a specific webservice agent), and they share their information both publically and with each other. They can then interact with a series of more complex agents whose role is to digest that information further, and then make intelligent decisions based on that.

Because the variety of different sources of information will almost certainly be providing non-orthogonal outputs (the news headlines from the RSS news feed will no doubt also be tweeted and linked to on Facebook), the agent net will need to be able to intelligently combine information sources into groups of related news - perhaps akin to unroll.me's mechanism of creating email digests.

If this sounds like a great deal of natural language processing, semantics extraction and quite possibly an impossibly complex piece of engineering, then you're now on the same page as me.

As far as I can see, the best way of starting this project will be to start writing a bunch of parsers for each potential "news input" - once I've got processed raw data to work with, decision-making becomes a tangible possibility. I've started playing around with Facebook and Twitter feed consumers, and when they're working I'll put up some code snippets.