# aivika: A multi-paradigm simulation library

Versions | 0.1, 0.2, 0.3, 0.4, 0.4.1, 0.4.2, 0.4.3, 0.5, 0.5.1, 0.5.4, 0.6, 0.6.1, 0.7, 1.0, 1.1, 1.2, 1.2.1, 1.3, 1.4, 2.0, 2.1, 3.0, 3.1, 4.0, 4.0.1, 4.0.3, 4.1, 4.1.1, 4.2, 4.3, 4.3.1, 4.3.2, 4.3.3, 4.3.4, 4.3.5, 4.5, 4.6, 5.0.1, 5.1, 5.2, 5.3, 5.3.1, 5.4, 5.5 |
---|---|

Dependencies | array (>=0.3.0.0), base (>=4.5.0.0 && <6), containers (>=0.4.0.0), mtl (>=2.1.1), random (>=1.0.0.3) [details] |

License | BSD-3-Clause |

Copyright | (c) 2009-2014. David Sorokin <david.sorokin@gmail.com> |

Author | David Sorokin |

Maintainer | David Sorokin <david.sorokin@gmail.com> |

Category | Simulation |

Home page | http://github.com/dsorokin/aivika |

Uploaded | by DavidSorokin at Tue Feb 4 05:05:34 UTC 2014 |

Distributions | NixOS:5.5 |

Downloads | 13634 total (163 in the last 30 days) |

Rating | 2.0 (votes: 1) [estimated by rule of succession] |

Your Rating | |

Status | Docs available [build log] Successful builds reported [all 1 reports] Hackage Matrix CI |

Aivika is a multi-paradigm simulation library which has the following features:

allows defining recursive stochastic differential equations of System Dynamics (unordered as in maths via the recursive do-notation);

has a basic support of the event-driven paradigm of the Discrete Event Simulation (DES);

has a basic support of the process-oriented paradigm of DES with an ability to resume, suspend and cancel the discontinuous processes;

allows working with the resources (you can define your own behaviour or use the predefined queue strategies);

allows customizing the queues (you can define your own behaviour or use the predefined queue strategies);

allows defining an infinite stream of data based on the process-oriented computation (designed but not tested in anyway - please be very careful when using it);

allows defining processors (actually, the Haskell arrows) that operate on infinite streams of data (designed but not tested in anyway - please be very careful when using them);

supports the activity-oriented paradigm of DES;

supports the basic constructs for the agent-based modeling;

allows creating combined discrete-continuous models;

the arrays of simulation variables are inherently supported (this is mostly a feature of Haskell itself);

supports the Monte-Carlo simulation;

the simulation model can depend on external parameters;

uses extensively the signals to notify the model about changing the reference and variable values;

allows gathering statistics in time points;

hides the technical details in high-level simulation monads (three of them support the recursive do-notation).

Aivika itself is a light-weight engine with minimal dependencies. However, it has additional packages Aivika Experiment [1] and Aivika Experiment Chart [2] that offer the following features:

automating the simulation experiments;

saving the results in CSV files;

plotting the deviation chart by rule 3-sigma, histogram, time series, XY chart;

collecting the summary of statistical data;

parallel execution of the Monte-Carlo simulation;

have an extensible architecture.

All three libraries were tested on Linux, Windows and OS X.

Please read the PDF document An Introduction to Aivika Simulation Library [3] for more details (a little outdated). This document is included in the distributive of Aivika but you can usually find a more recent version by the link provided.

P.S.

Two items, streams and processors, are not yet tested. This is a goal for the future version of Aivika. The main reason why I ever uploaded my three packages is that the Aivika Experiment Chart package was broken in its dependencies, namely, when using the charting library. So, I decided to provide the compilable packages again.

Although I would like to say that the mentioned streams and processors will be the main improvement in the future version as they actually allow defining some DES models on a very high level as you would define them with help of diagrams.

Also the queues and server are not tested carefully. Use at your own risk. At least, the infinite queue seems to be working.

[1] http://hackage.haskell.org/package/aivika-experiment

[2] http://hackage.haskell.org/package/aivika-experiment-chart

[3] https://github.com/dsorokin/aivika/blob/master/doc/aivika.pdf

## Modules

*Simulation*- Simulation.Aivika
- Simulation.Aivika.Agent
- Simulation.Aivika.Cont
- Simulation.Aivika.DoubleLinkedList
- Simulation.Aivika.Dynamics
- Simulation.Aivika.Event
- Simulation.Aivika.Generator
- Simulation.Aivika.Parameter
- Simulation.Aivika.PriorityQueue
- Simulation.Aivika.Process
- Simulation.Aivika.Processor
- Simulation.Aivika.Queue
- Simulation.Aivika.QueueStrategy
- Simulation.Aivika.Ref
- Simulation.Aivika.Resource
- Simulation.Aivika.Server
- Simulation.Aivika.Signal
- Simulation.Aivika.Simulation
- Simulation.Aivika.Specs
- Simulation.Aivika.Statistics
- Simulation.Aivika.Stream
- Simulation.Aivika.SystemDynamics
- Simulation.Aivika.Table
- Simulation.Aivika.Task
- Simulation.Aivika.Unboxed
- Simulation.Aivika.Var
- Simulation.Aivika.Vector

- Simulation.Aivika

[Index]

## Downloads

- aivika-1.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)