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.
Version: 2.5.2
License: LGPL
Status
Example
A simple demo scenario with mosaik:
>>> import mosaik >>> >>> sim_config = { ... 'ExampleSim': {'python': 'example_sim.mosaik:ExampleSim'}, ... } >>> >>> def create_scenario(world): ... simulator_1 = world.start('ExampleSim') ... simulator_2 = world.start('ExampleSim') ... ... a_set = [simulator_1.A(init_val=0) for i in range(3)] ... b_set = simulator_2.B.create(2, init_val=0) ... ... for i, j in zip(a_set, b_set): ... world.connect(i, j, ('val_out', 'val_in')) >>> >>> world = mosaik.scenario.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.4. 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.io.
Please report bugs and ideas for improvement to our issue tracker.
Changelog
2.5.2 - 2019-11-01
[NEW] Special characters are now allowed in path names
[NEW] Compatible to the new versions of networkx
[CHANGE] python 3.6, 3.7 and 3.8 are currently supported, python 3.4 and 3.5 not anymore.
[FIX] Various minor internal changes
[FIX] Various documentation updates and fixes
2.5.1 - 2018-11-29
[NEW] When calling the world.start() command for a simulator, users can now set a predefined value for the posix flag (e.g. True) to prevent automatic detection of the operating system. This facilitates the creation of some co-simulation cases across OS (e.g. Windows and Linux).
2.5.0 - 2018-09-05
[NEW] Connection option “time_shifted” added as alternative to async_requests. This will make creating cyclic data dependencies between simulators more usable since usage of set_data with an API implementation will no longer be needed.
2.4.0 - 2017-12-06
[NEW] Compatible to the new versions of networkx, simpy and simpy.io
[CHANGE] python 3.4, 3.5 and 3.6 are currently supported python 3.3 is no longer supported
[FIX] Various bug fixes
2.3.0 - 2016-04-26
[NEW] Allow passing environment vars to sup processes
[FIX] Fixed a bug in the version validation which raised an error when using a floating point for the version
2.2.0 - 2016-02-15
[NEW] API version 2.2: Added an optional “setup_done()” method.
[CHANGE] API version validation: The API version is no longer an integer but a “major.minor” string. The major part has to match with mosaik’s major version. The minor part may be lower or equal to mosaik’s minor version.
[FIX] Various minor fixes and stability improvements.
[FIX] Various documentation updates and fixes.
2.1.2 – 2014-10-29
[FIX] World.shutdown() now checks if the socket still exists before attempting to close it.
[FIX] Fixed a bug that made the last extra method of a simulator shadow all previous ones.
2.1.1 – 2014-10-28
[NEW] World.run() now prints a warning if you forget to connect a simulator’s entities.
[FIX] Fixed some problems with the data-flow cache.
2.1 – 2014-10-24
[NEW] Mosaik can now perform real-time simulations. Before, this functionality needed to be implemented by simulators. Now it’s just World.run(until=x, rt_factor=y), where rt_factor defines the simulation speed relative to the wall-clock time (issue #24).
[NEW] Simulators can now expose extra methods via their API that can be called from a mosaik scenario. This allows you to, e.g., store static data in a data base. These extra API methods need to be specified in the simulator’s meta data (issue #26).
[NEW] util.connect_many_to_one() helper function.
[NEW] More and better documentation:
Tutorial for integrating simulators, control strategies and for creating scenarios.
Sim API description
Scenario API description
Sim Manager documentation
Scheduler documentation
Discussion of design decisions
Logo, colors, CI
[NEW] Added util.sync_call() which eases calling proxied methods of a simulator synchronously.
[CHANGE] The rel attribute in the entity description returned by create() is now optional.
[CHANGE] Moved proxied methods from SimProxy to SimProxy.proxy in order to avoid potential name clashes with other attributes.
[CHANGE] Check a simulator’s models and extra API methods for potential name clashes with the built-in API methods.
[CHANGE] The argument execution_graph of World was renamed to debug. The execution graph now also stores the time after a simulation step (in addition to the time before the step).
[FIX] issue #22: The asynchronous requests get_data() and set_data() now check if the async_requests flag was set in World.connect().
[FIX] issue #23: finalize() is now called for in-process Python simulators.
[FIX] issue #27: Dramatically improved simulation performance (30 times as fast in some cases) if simulators use different step sizes (e.g. 1 minute and 1 hour) by improving some internal data structures.
2.0 – 2014-09-22
Mosaik 2 is a complete rewrite of mosaik 1 in order to improve its maintainability and flexibility.
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.
The database is now a separate package, see mosaik-hdf5.
The old web UI is gone.
Mosaik now consists of four core components with the following feature sets:
mosaik Sim 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, set_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 exists for Python and Java.
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 Distributions
Built Distribution
Hashes for mosaik.Core_SemVer-2.5.3rc20220428000723-py2.py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | f0bbdc24ab3714badef28a0375f5ead3e1184f57e91275073e352e47d2ccce2d |
|
MD5 | c991db302b54616675aeca236500279b |
|
BLAKE2b-256 | 27c5a2af2b50b574287e137238e2da13c80bc3f7d202a060636e12c02960c790 |