8

I'm architecturing a Multi Agent System (MAS) framework to describe Beliefs-Desires-Intents (BDI) agents in Haskell (i.e. agents are concurrent, communicating monadic actions).

I searched on the web throughly but I wasn't able to find any reference on similar works, apart from a technical report of an unfinished work, Specifying and Controlling Agents in Haskell.

Do you know about any existing implementation or research paper dealing with BDI agents that can be defined in Haskell or in any other functional language, please? My aim is to find possible related works, everything that could manage a system of concurrent intelligent agents written in a functional language. I don't need anything specific, I just want to find out whether my work has something in common with existing approaches.

edit: I managed to find a reference to Clojure, a lisp dialect that supports a form of agent programming very close to the actor model, but it's not meant to directly support BDI agents (one should implement another layer on top of it to get the BDI part done I guess).

Riccardo T.
  • 8,907
  • 5
  • 38
  • 78
  • Is the clojure example more or less what you're looking for? Also, can you maybe frame your question in more concrete terms? That way people who might not be familiar with what is meant by "agents" (all the descriptions I just read are very hand-wavy, or tied to some specific semantics) can help. – jberryman Mar 27 '12 at 18:30
  • @jberryman: Yes, Clojure but I wouldn't say that it is more or less what I'm looking for... rather, it is included in what I'm looking for. I did not use more concrete terms because I'm searching for literature and links about everything that could look like a multi-agent system using a functional programming approach. I'm just trying to find out whether my work (an Haskell library/framework for handling MAS) is similar to something already existing. Thanks for helping me in explaining my question more clearly :) – Riccardo T. Mar 27 '12 at 19:13
  • 2
    cool, it sounds like an interesting subject, although I don't have a good feel for what it's all about. Two links that may or may not be relevant for you: I wrote a small library based on actor model concurrency abstraction: http://hackage.haskell.org/packages/archive/simple-actors/0.1.0/doc/html/Control-Concurrent-Actors.html, though it's not a distributed system, but might give you some ideas. See also Cloud Haskell (https://github.com/jepst/CloudHaskell) which is an approach to true distributed computing. – jberryman Mar 28 '12 at 14:06
  • Have you tried looking for the concept of *Actors*, which stems from Erlang, but has migrated over to Scala and also to Haskell. I think you can consider an actor to be an agent. Whether its behaviour adheres to some BDI model or not can be implemented on top of the actor model. – ziggystar May 23 '12 at 13:19
  • @ziggystar: Of course there are possibly many communication libraries (i.e. actor-based as you point out) that one could use to implement bdi-style communicating agents, but at the time of my question I was searching for an already complete system that allowed to specify bdi agents (in order to avoid reinventing the wheel). Now, since I would like to implement such a framework myself, I will surely have a look at the possibilities to reuse some code, thanks for the suggestion. – Riccardo T. May 23 '12 at 14:06
  • Seems like the Clojure agents are just Clojure's version of actors and you list them in your question. And something like "agents are concurrent, communicating monadic actions" can be offered by those actor libraries. Also "everything that could manage a system of concurrent intelligent agents written in a functional language" fits for actors. Maybe you should be more clear about your question. Actors give you a framework of concurrent communicating agents. You only have to supply the BDI part. So I don't understand why you call actors one of "many communication libraries". – ziggystar May 23 '12 at 14:16
  • My bad, I was in a hurry and I hadn't the time to explain myself properly. I wanted to tell that an actor framework like the Clojure's one is not meant to directly write BDI-style agents, but rather it could help one in implementing a BDI layer on top of it. This is why an actor-based framework/libray doesn't address my question, as I'm not seeking for help in building one myself, I just wanted to find out whether there was already something ready. I mentioned Clojure in the question because it is one of the closest things I found, but I recognize it may have been misleading. – Riccardo T. May 23 '12 at 22:51

1 Answers1

5

To sum up, it doesn't seem like there are proposals for BDI-style communicating agents described by means of functional languages, so together with a friend/colleague of mine we collected info about related work, put together some ideas, and we wrote a short position paper that I will present at the DALT2012 workshop. It's a really preliminary work, so do not expect too much from it, but I think in the future it may evolve in something interesting.

Alessandro Solimando, Riccardo Traverso. Designing and Implementing a Framework for BDI-style Communicating Agents in Haskell. DALT 2012, Workshop notes, pages 108--112.

EDIT: I later found this project on GitHub, which uses free monads (whatever that means, I don't know about them) to provide a framework for multi-agent systems: https://github.com/fizruk/free-agent.

Riccardo T.
  • 8,907
  • 5
  • 38
  • 78