Agent Oriented ProgrammingSource: comp.object, comp.ai
Ian Begg asked:
Yesterday I read a document which was discussing a future modeling/simulation system, and it was recommending the use of "Agent" technology. The claim being made was that this represented a level of abstraction above and beyond the current capabilities of Object Oriented Technology.
The author then gave an example of what an "Agent" in the sense of modeling was. After reading this example I was confused as to why this technology was beyond what OO is capable of.
Mark Baker replied:
The biggest difference, IMHO, between "traditional OO" and agents is coupling. "Traditional OO" has focused on defining interfaces (eg. OMG IDL) for objects. Coupling can be kept to a minimum by good design, but ultimately, one object needs to invoke a specific method with specific arguments on the other object, thereby coupling the two in code.
The same method invocation does of course has to occur for agents, but with one major difference; there's effectively just one method on each agent, with one argument.
All the semantics of the invocation are bundled into that one argument. It's much like human-human communications, where a common language (eg. English) can be used to initiate complex cooperative behaviour. An agent might do the same thing by asking another agent "Tell me your name". The target agent has to parse this using a common knowledge layer to understand that it's being asked to respond with its "name".
So for agents, coupling is entirely in the metadata.
IMO, agents are much better suited for massively distributed computing than traditional objects, since dynamic discovery and late binding are going to be pervasive. Static, even well defined unambiguous interfaces and contracts just can't cut it unless they provide a mechanism to describe themselves in the knowledge layer. And even then, I'm not sure what value there is to doing this since client agents will already have to handle the case where an agent responds with "Huh?". But I suppose these semantic contracts could be used for trading (ala ANSA/CORBA), so it's probably not entirely a bad idea.
Paul Johnson questioned this distinction:
Surely the agent has only a finite number of inquiries it can handle, each of which must be unambiguously identified (I can't see one agent saying to another "I said tell me your name, not your game").
Bill House explained:
This is why agent communications are usually done via a specialized agent-communication language (ACL). The language defines the domain of discourse and implies the logical semantics of the conversation.
Here are some differentiators between agents and objects:
Craig Brozefsky insisted:
Why do you think sendmail is called an MTA (Mail Transfer Agent) in the common lingo of sysadmins everywhere? It operates within a well defined problem domain, with a suitably specified ontology.
Bill House answered:
Still, it's not an agent in the AOP sense. At the very best, it demonstrates some aspects of agency, but every autonomous process in the world is not automatically an AOP agent. At one client site, I wrote a VB3 timer application that polls a SQL Server for tagged transactions to post to the mainframe. They call it the "Batch Agent", but it's not an agent in the AOP sense.
Nevertheless, I agree that it is possible to create some agent systems without a dynamic environment [that allows agents to evolve -YS]. Also, I agree about the criticality ACLs -- FWIW, one of our agent applications (for data mining) has no less than 4 specialized languages: Goal Agent ACL, Filter Agent ACL, Fixup Agent ACL and SmartLisp. Actually, that's one of the things I love about AOP -- rather than trying to fit everything into a single language, in AOP, you're often creating new languages to deal with new problem domains!
Mike Knapik tried to pinpoint the essence of agency:
From very simple email sifters to a semi-autonomous web-crawler to a "Bob" that 'observes' your operational idiosyncrasies to better serve you, all these simple 'agents' exhibit some (low) degree of intelligence. But what we call "Intelligent Agents" in our book use 1 or more advanced techniques or exhibit several of the characteristics, as mentioned above (and many others as explicated in our book). Especially important is the notion that a 'truly' IA would have some learning capacity such that both the ability to gather relevant knowledge (e.g., impromptu collaboration), reorder or change goals and 'invent' methods (e.g., replanning) to achieve them as situations dictate. This takes it out of the realm of being 'simply' or 'just' the programming as initially coded by some designer/programmer.
Stanford CSLI, Agent-Oriented Programming
Stan Franklin and Art Graesser, Is it an Agent, or just a Program?
Santa Fe Institute, Swarm