Giter Site home page Giter Site logo

evoplex / evoplex Goto Github PK

View Code? Open in Web Editor NEW
129.0 12.0 22.0 6.15 MB

Evoplex is a fast, robust and extensible platform for developing agent-based models and multi-agent systems on networks. It's available for Windows, Linux and macOS.

Home Page: https://evoplex.org

CMake 8.93% C++ 90.64% Shell 0.22% AppleScript 0.21%
multi-agent agent graph cross-platform evolutionary-game-theory evolutionary-computation evolutionary-algorithms evolution-simulator monte-carlo-simulation agent-based-simulation

evoplex's Introduction

Chat CI: Linux & MacOS CI: Windows Testing Testing Testing Testing


Evoplex is a fast, robust and extensible platform for developing agent-based models (ABM) and multi-agent systems (MAS) on networks. Each agent is represented as a node and interacts with its neighbors, as defined by the network structure.

Evoplex 0.2.0

Wait, another multi-agent system? Why not using something like MASON or NetLogo? Yes, there are hundreds of options out there, but I bet none of them can do what Evoplex does!

In fact, most of the existing pieces of software are not good enough. Main issues include: really old technologies, unmaintained code, inflexibility, poor performance and others. Thus, over the last years, people often prefer to develop their own solutions from scratch. However, we know that reinventing the wheel is always time-consuming, expensive and usually a terrible strategy.

In this way, we decided to create Evoplex! An extremely fast, multi-threaded, user-friendly, cross-platform and truly modular application.

Evoplex was originally developed to tackle problems in the field of Evolutionary Computation and Complex Systems, and that's why we call it Evoplex. However, it has been used in a wide range of scenarios, including:

Give us a star on GitHub!

Getting Started

Evoplex is cross-platform and is available for Linux, Windows and macOS.

Getting Involved

As an open-source project, we welcome new contributions from the community. There are many ways you can participate in the project, for example:

  • Review the documentation and make pull requests for anything from typos to new content
  • Report bugs and submit feature requests
  • Review source code changes
  • Add a new feature or change an existing one
  • Showcase your plugins

Please see the CONTRIBUTING file for details. Be aware that by contributing to the code base, you are agreeing that Evoplex may redistribute your work under our LICENSE. Please see also our Code of Conduct.

Feedback

How to cite

If you use Evoplex in your publication, you can cite it as:

Cardinot, M., O’Riordan, C., Griffith, J., & Perc, M. (2019). Evoplex: A platform for agent-based modeling on networks. SoftwareX, 9, 199-204. https://doi.org/10.1016/j.softx.2019.02.009

@article{Evoplex,
author = "Marcos Cardinot and Colm O’Riordan and Josephine Griffith and Matjaž Perc",
title = "Evoplex: A platform for agent-based modeling on networks",
journal = "SoftwareX",
volume = "9",
pages = "199 - 204",
year = "2019",
issn = "2352-7110",
doi = "10.1016/j.softx.2019.02.009",
url = "http://www.sciencedirect.com/science/article/pii/S2352711018302437"
}

License

The EvoplexCore library is licensed under the Apache License 2.0.

The EvoplexGUI library is licensed under the GNU General Public License v3.0.

evoplex's People

Contributors

afsza avatar cardinot avatar codacy-badger avatar ethanpadden avatar sedictious 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  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  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  avatar  avatar

evoplex's Issues

Don't overwrite projects by default

When saving projects, Evoplex always silently overwrites them by default.

Steps to reproduce:

  1. create a new project
  2. add an experiment
  3. save as projectA and close it
  4. create a new project
  5. add an experiment
  6. save as projectA
    Expected: inform that exists a projectA; show a message box asking for an action (cancel, overwrite)
    Actual: projectA is overwritten without notice

Experiment Designer: vertical scrollbar is hiding the buttons and fields

System info:

  • Evoplex Version: 0.2.1
  • Operating System: Windows10 64bit

Bug description:
Some UI elements disappear when the Experiment Designer is minimized

Additional info:

  • Qt Version: 5.12.2

Steps to reproduce:

  1. Open the experiment designer
  2. Minimize its width

Expected behavior
Some buttons are missing and/or misplaced as indicated bellow:

Attributes generator crashes with integer as input

System info:

  • Evoplex Version: 0.2.1
  • OS: all

Bug description:
Evoplex crashes when passing an integer into the attrs generator (nodes or edges).

Steps to reproduce:
Steps to reproduce the behavior (if applicable, add screenshots to help explain your problem):

  1. Create a new project
  2. Create a new experiment with 1 node (integer)
  3. Evoplex crashes

Hint for people interested in fixing it:
Look at AttrsGenerator::parse

Attribute range could accept empty spaces

The attr ranges could accept strings with empty spaces. The attr ranges are mainly used by the plugins to define their attributes, e.g., see the attributes of this plugin.

The examples below could be supported:
"string{aaa, bbb, ccc}"
"int[1, 10]"
"int{ 1, 2, 10}"

For people interested in implementing it (hints):

  • given the initial attr range string, remove all empty spaces after/before commas and brackets before parsing
  • code is at AttributeRange::parse

Script engine

In many scenarios, the user may want to create simple scripts to run smaller sets of experiments. In those cases, performance might not be an issue and having to compile a proper plugin to perform simple tasks might be painful.

So, we should have a script engine to allow users to create models or graph generators scripts that would behave just like a compiled plugin.

GUI should support directed graphs and multigraphs

Currently, the graph widget draws all graphs as a simple and undirected graph.

It would be nice to have a way to distinguish simple graphs, digraphs and multigraphs.

For instance, a digraph should show the arrows to indicate the direction of the links as in the example below:

However, we should keep in mind that any change in the way how we draw things can drastically affect the performance of the GUI.

For instance, in the case of a multigraph, in order to change the style of a second edge, we'd have to keep track of the first edge, or "predict" that two or more edges will have to be drawn etc. So, we need to ensure that those operations do not add an extra and unnecessary cost to the simplest and most common scenario, i.e., simple undirected graph. On the contrary case, we could extend the base classes and implement an optimized version for multigraphs. Then, in the GUI, the user could choose which widget they wish to open, i.e., undirected graph style, directed style or multigraph style 😃

Thanks @Sedictious for raising this issue.

Delete Experiment

We should add a feature to delete experiments without having to edit the .csv file.

Windows Help Feature

Windows automatically adds a question mark to the top of the "Nodes Generator" and "Output Creator" windows, which currently does nothing when clicked.

Graph designer

We should have a tool to allow for drawing graphs.

Initial requirements:

  • Initialize graph from a Graph Generator plugin (or empty canvas)
  • Create/delete nodes (and edges) using the mouse
  • Drag'nDrop nodes
  • Add/delete nodes (and edges) attributes
  • Export the graph to CSV format

Change the Edge ID

Currently node IDs are added incrementally, which while not a problem for generating one-time graphs with non-variable attributes, could prove to be problematic in the long run. The main problem is you can't easily infer the specific edge given it's ID. Moreover, you could theoretically have the same edge with distinct IDs.

I propose to change the way an edge's ID is generated, by providing some meaningful information about the nodes it connects, thus achieving constant-time random access. We could replace all IDs with a simple string (node1, node2), or some range-encoded integer.

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.