views:

225

answers:

1

Coming from an academic background in mutli-agent systems (developed in Java using JADE) I have only been peripherally aware of the Actor concurrency paradigm. Now that I've started exploring Scala I couldn't help but be struck by the similarities between the Agent and Actor approaches.

I'm very tempted to use Scala's Actor library for my next research project rather than simply calling the JADE libraries as this would force me to get to deeper grips with the language. Furthermore JADE's focus on defining everything in terms of behaviours isn't very appropriate to my problem.

Is there something fundamentally different between a highly autonomous Actor and an Agent that I am missing?

+5  A: 

Yes, there are differences. For very simple agents, actors and agents might be the same thing. However, by "autonomous agents" one, or, at least, I, usually assume something like, for example, a Belief-Desire-Intention model, where the agent models internally an abstraction of the environment it finds itself in, and the agents it interacts with, so that it can make plans on how to interact with that environment to achieve it's goals.

While an actor can sure have all this, a single agent might just as well be composed of multiple actors, acting jointly to handle different parts of the BDI framework. An actor is, for all intents, a scheduling unit. If your agents are essentially linear and single-thread, they fit. If they do parallel work internally, you want multiple actors for each agent.

So, what do actors and agents have in common?

  • They both communicate by passing messages.

  • They both (usually) have an internal state -- even if implicit in the execution state.

  • They both are expected not to share state with other actors/agents.

  • They both are expected to be scheduled independently of other actors/agents.

What do agents have more than actors?

  • Agents usually follow models that dictate an agent's behavior -- such as, for example, BDI -- and actors usually don't. Reactive agents, though, are similar to actors in this respect.

  • Agents may have more than one internal unit of scheduling. Agents that do not, though, are similar to actors in this respect.

What do actors have more than agents?

  • Nothing that I can think of, though Scala actors can share state.
Daniel
I would definately not agree with equating BDI and autonomous agents. BDI is simply one possible architecture for one class of agents. There are agent architectures with explicit environmental models which are not BDI e.g. reflex agents in partially observable environmentsI do believe that the second portion of your answer has merit. An actor is not an agent in the same way that a thread is not an agent. However either may be used in order to realise the goal of creating an autonomous agent. Case in point, JADE's Agents sit on top of Java Threads. Thank you for your help though.
DuncanACoulter
Ah I see you were updateing your answer as I was writing my comment... I think your new answer addresses my question nicely.
DuncanACoulter
Sorry, I had no intention at all of equating autonomous agents with BDI. I meant only to use BDI as an example. I'm not entirely sure how to rephrase my answer, but I have improved it a bit.
Daniel