dimas
DiMAS - A framework for building Distributed Multi Agent Systems
⚠️ WARNING ⚠️ : DiMAS is under active development,
so expect gaps between implementation and documentation.
A distributed multi agent system is a set of independant agents that are widely distributed but somehow connected. They are designed in a way that they can solve complex tasks by working together.
The system is characterised by
- a somewhat large and complex environment
- containing a set of (non agent) objects that can be perceived, created, moved, modified or destroyed by the agents
- that changes over time due to external rules
with multiple agents operating in that environment which
- can perceive the environment to a limited extent
- have the possibility to communicate with some or all of the other agents
- have certain capabilities to influence the environment
This crate is available on crates.io.
DiMAS follows the semantic versioning principle with the enhancement, that until version 1.0.0 each new minor version has breaking changes, while patches are non breaking changes but may include enhancements.
Usage
' ' uses the tokio runtime, you have to define your main function as an
async function. The declaration of tokio crate is not necessary, unless you use
tokio functionality within your implementations.
So include dimas runtime in the dependencies section of
your Cargo.toml.
Your Cargo.toml should include:
[]
= "0.5"
It makes sense to return a Result, as most DiMAS Agents functions return one.
DiMAS errors are of type Box<dyn core::error::Error> and must be thread safe.
DiMAS provides a type definition Result<T> to make life easier
DiMAS also provides a main attribute macro to create the runtime environment
and a prelude to import most used declarations.
A suitable main program skeleton may look like:
use *;
async
Example
A very simple example consist at least of two agents, a publisher publishing messages
and a subscriber that is listening to those messages.
The Cargo.toml for this publisher/subscriber example should include
[]
= version = "0.5"
Publisher
The publisher.rs should look like this:
use *;
use Duration;
/// The Agent's properties
async
Subscriber
The subscriber.rs should look like this:
use *;
/// The Agent's properties
async
async
More examples
You can find some simple examples in dimas-fw/dimas/examples and more complex examples in dimas-fw/examples
Features
- unstable: Enables the unstable features.
License
Licensed with the fair use "NGMC" license, see license file
Contribution
Any contribution intentionally submitted for inclusion in the work by you, shall be licensed with the same "NGMC" license, without any additional terms or conditions.