Coder Social home page Coder Social logo

fmichel / madkit Goto Github PK

View Code? Open in Web Editor NEW
37.0 10.0 11.0 17.96 MB

MultiAgent Development Kit - version 5

Home Page: http://www.madkit.net

License: Other

Java 99.81% HTML 0.18% PHP 0.01%
multi-agent simulation agent java artificial-intelligence agent-based agent-based-simulation

madkit's Introduction

MultiAgent Development Kit - MaDKit 5

Maven Central

MaDKit is an open source multiagent-based software written in Java.

MaDKit 5 is designed as a lightweight Java library for developing distributed applications and simulations using the multiagent paradigm.

Features

  • Artificial agents creation and life cycle management
  • An organizational infrastructure for communication between agents, structuring the application
  • High heterogeneity in agent architectures: No predefined agent model
  • Multi-Agent based simulation and simulator authoring tools
  • Multi-agent based distributed application authoring facilities

Approach

In contrast to conventional approaches, which are mostly agent-centered, MaDKit follows an organization-centered approach (OCMAS): There is no predefnied agent model in MaDKit.

Especially, MaDKit does not enforce any consideration about the internal structure of agents, thus allowing a developer to freely implements its own agent architectures.

So, MaDKit is built upon the AGR (Agent/Group/Role) organizational model: Agents play roles in groups and thus create artificial societies.

Programming with MaDKit

Programming with MaDKit can be done by either :

For instance, with Gradle:

implementation "io.github.fmichel:MaDKit:5.x.y"

JDK 8+ is required.

More information

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Added some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request

madkit's People

Contributors

fmichel avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

madkit's Issues

Multiple schedulers sharing the same simulation time

Hi,
My colleagues and I are currently developing an application on top of Madkit and we have questions about having multiple schedulers in the same simulation.

Context

For now we have a working simulation with several agents and a customized scheduler. Each agent "schedules" a bunch of actions at each tick. To do so, we created a custom ActionActivator, which is an activator that rather executing a method on all agents in a CGR location, executes an action (one activator per action).

The problem we are facing is that only the scheduler is executing the actions, decreasing performances (agents threads are idle).

If I understand well the threading model of Madkit:

  • one thread per agent
  • the activation of a behavior with an Activator can be distributed on several threads

The first point is fine when you have concurrent agents working at different speed, the second is designed for tick/date-based simulations. We can of course mix both.

Problem

To address our performance issue, we came up with several ideas:

  1. Use the Activator#useMulticore capability. Unfortunately, given the fact that each activator executes only one action, we won't be able to distribute it.
  2. Modify our action execution process: rather than scheduling actions on the scheduler, each agent manages its own actions. Then the scheduler send "top" messages to all agents, which execute scheduled actions for the current tick. This solution is good, but requires a bit of work to address agent synchronization.
  3. Rather than having one scheduler, we could have multiple schedulers (up to one per regular agent). This solution could avoid us rewriting the action execution process, but is it feasible with Madkit ? I mean of course we can deploy several schedulers, but will they be synchronized ? Can they share a global simulation time ?

Thanks a lot for your time !
Pierre

TickBasedTime#setCurrentTick(double) throws UnsupportedOperationException

Hi !

I have found an issue in Scheduler.TickBasedTime. I was trying to reset the simulation time in a tick-based simulation. To do so, I used Scheduler.SimulationTime#setCurrentTick(double) operation but I got an UnsupportedOperationException.

It turns out that contrary to what the documentation says, it is not a "shortcut of setCurrentTick(BigDecimal.valueOf(value))". I would have expected something like this as the body:

public default void setCurrentTick(double value){
    return setCurrentTick(BigDecimal.valueOf(value));
}

Since it is not the case, it is not enough to override setCurrentTick(BigDecimal) to have setCurrentTick(double value) working. Unfortunately, Scheduler.TickBasedTime only overrides the BigDecimal version :(

I switched back to the BigDecimal version in my code but could be great to fix it ;)

Best regards
Pierre

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.