Question

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?

Was it helpful?

Solution

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.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top