Mosaik is a flexible Smart-Grid co-simulation framework.
Project description
Mosaik
Mosaik is a simulation compositor for Smart Grid simulations.
It lets you re-use existing simulators and couple them to simulate large-scale Smart Grid scenarios. Mosaik offers powerful mechanisms to specify and compose these scenarios.
Example
A simple demo scenario with mosaik:
>>> import mosaik >>> >>> sim_config = { ... 'ExampleSim': {'python': 'example_sim.mosaik:ExampleSim'}, ... } >>> >>> def create_scenario(world): ... exsim1 = world.start('ExampleSim') ... exsim2 = world.start('ExampleSim') ... ... a = [exsim1.A(init_val=0) for i in range(3)] ... b = exsim2.B.create(2, init_val=0) ... ... for i, j in zip(a, b): ... world.connect(i, j, ('val_out', 'val_in')) >>> >>> world = mosaik.World(sim_config) >>> create_scenario(world) >>> world.run(until=2) Progress: 25.00% Progress: 50.00% Progress: 75.00% Progress: 100.00%
Installation
Mosaik requires Python >= 3.3. Use pip to install it, preferably into a virtualenv:
$ pip install mosaik
Documentation, Source code and issues
The documentation is available at https://mosaik.readthedocs.org.
Please report bugs and ideas for improvment to our issue tracker.
Changelog
2.0a3 – 2014-06-26
[NEW] Hierarchical entities: Entities can now have a list of child entities (issue #14).
[NEW] The World class now has a get_data() method that allows you to get data from entities while creating a scenario.
[NEW] World.connect(a, b, ('X', 'X')) can now be simplified to World.connect(a, b, 'X').
[NEW] Attribute Entity.full_id which uniquely identifies an entity: '<sid>/<eid>'
[NEW] Attribute ModelFactory.meta which is the meta data dictionary of a simulator.
[NEW] World() now accepts a configuration dictionary which can, e.g., specify the network address for mosaik.
[NEW] Overview section for the docs
[NEW] Description of the mosaik API in the docs
[CHANGE] When you create entities, mosaik checks if the model parameters actually exists and raises an error if not (issue #9).
[CHANGE] The mosaik API’s init() function now receives the simulator ID as first argument (issue #15).
[CHANGE] The behavior of the get_related_entities() RPC that simulators can perform has been changed.
[CHANGE] Various internal improvements
[FIX] issue #18. Improved the error message if a Python simulator could not be imported.
[REMOVED] Attribute Entity.rel.
2.0a2 – 2014-05-05
[NEW] Preliminary documentation and installation instructions (https://mosaik.readthedocs.org)
[NEW] Simulators can now set data to other simulators using the asynchronous request set_data (issue #1).
[NEW] There is now a start timeout for external processes (issue #11).
[CHANGE] Mosaik now raises an error if a simulator uses the wrong API version (issue #4).
[CHANGE] Mosaik prints everything to stdout instead of using the Python logging module (issue #7).
[FIX] issue #2. Scheduling now works properly for processes using async. requests. New keyword argument async_requests for World.connect().
[FIX] issue #3. Local (in-process) Simulators can now also perform async. requests to mosaik (get_progress, get_related_entities, get_data, set_data).
[FIX] issue #8. Cleaned up the code a bit.
[FIX] issue #10. Tests for the sim manager improved.
2.0a1 – 2014-03-26
Mosaik 2 is a complete rewrite of mosaik 1 in order to improve its maintainability and flexibility. It is still an early alpha version and neither feature complete nor bug free.
Removed features:
The mosl DSL (including Eclipse xtext and Java) are now gone. Mosaik now only uses Python.
Mosaik now longer has executables but is now used as a library.
The platform manager is gone.
Mosaik no longer includes a database.
Mosaik no longer includes a web UI.
Mosaik now consists of four core components with the following feature sets:
mosaik API
The API has bean cleaned up and simplified.
Simulators and control strategies share the same API.
There are only four calls from mosaik to a simulator: init, create, step and get_data.
Simulators / processes can make asynchronous requests to mosaik during a step: get_progress, get_related_entities, get_data.
ZeroMQ with JSON is replaced by plain network sockets with JSON.
Scenarios:
Pure Python is now used to describe scenarios. This offers you more flexibility to create complex scenarios.
Scenario creation simplified: Start a simulator to get a model factory. Use the factory to create model instances (entities). Connect entities. Run simulation.
Connection rules are are no based on a primitive connect function that only connects two entities with each other. On top of that, any connection strategy can be implemented.
Simulation Manager:
Simulators written in Python 3 can be executed in process.
Simulators can be started as external processes.
Mosaik can connect to an already running instance of a simulator. This can be used as a replacement for the now gone platform manager.
Simulation execution:
The simulation is now event-based. No schedule and no synchronization points need to be computed.
Simulators can have different and varying step sizes.
Mosaik ecosystem:
A high-level implementation of the mosaik 2 API currently only exists for Python. See https://bitbucket.org/mosaik/mosaik-api-python.
mosaik-web is a simple visualization for mosaik simulations. See https://bitbucket.org/mosaik/mosaik-web.
mosaik-pypower is an adapter for the PYPOWER load flow analysis library. See https://bitbucket.org/mosaik/mosaik-pypower and https://github.com/rwl/PYPOWER.
mosaik-csv and mosaik-householdsim are simple demo simulators that you can use to “simulate” CSV data sets and load-profile based households. See https://bitbucket.org/mosaik/mosaik-csv and https://bitbucket.org/mosaik/mosaik-householdsim.
There is a repository containing a simple demo scenario for mosaik. See https://bitbucket.org/mosaik/mosaik-demo.
You can find information about older versions on the history page
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for mosaik-2.0a3-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4b785df775d834d53d7a87be15f90c5a4598eb542b578df13385565ec4d52e71 |
|
MD5 | 4ad60957204f54770c3ed51fcb76546d |
|
BLAKE2b-256 | d277c0db6d9739b2ef328e7d3cd6e8d77aaac6ace5ebeecf4d824ca911e5a4d9 |