
A highly configurable, open-source, discrete-event simulator for Delay-Tolerant Networks (DTNs).
Explore the docs »
View Demo
·
Report Bug
·
Request Feature
Table of Contents
Chronos is an extremely configurable, discrete-event simulator for testing Delay Tolerant Network implementations. Chronos is built with modular components that can be easy extended to support your own custom protocols and algorithms. Almost all parts of the simulation loop can be customized to fit your needs simply by extending few base classes.Easily view simulation results and restore from previos simulations along with the ability to step forward and step backward in time. Chronos also generates detailed graphs about numerous metrics such as message delivery ratio, message latency, and more.
- Highly Configurable: Almost all parts of the simulation loop can be customized to fit your needs simply by extending few base classes.
- Fully Compatible: Chronos itself does not care about the underlying network protocol, allowing you to test any DTN protocol.
- Easy to Use Interface: Beautiful and intuitive user interface to configure simulation parameters.
- Live Preview: View simulation results in real-time with an efficient and optimized rendering system.
- Custom Grids: Easily create custom grids with different node spawning algorithms.
- Custom Nodes: Configure how you want each of your nodes to behave by simply implementing the
send_message
andreceive_message
methods. - Custom Message Types: Easily create custom message types by extending the
Message
class allowing for you to test different payload sizes and types. - Extensive Graphs: Generate detailed graphs about numerous metrics such as message delivery ratio, message latency, and more.
- Simulation Restore: Easily restore from previous simulations along with the ability to step forward and step backward in time.
- Concurrent Simulation: Run multiple simulations at once to generate less biased results. Chronos exports all individual simulation results as well as the combined results.
- Multi-Processing: Utilize all of your CPU cores to run simulations faster.
- Multi-Platform: Chronos is built with Kivy, allowing it to run on Windows, MacOS, and Linux.
Chronos was built using the following technologies:
Run the following commands to get a local copy up and running.
git clone [email protected]:Chronos-Network-Simulator/ChronosSim.git
cd ChronosSim
pipenv install
pipenv run python main.py
Chronos is broken down into numerous modules. Each module contains a BaseClass
that can be used to extend the functionality of that particular module in Chronos.
- Grids: Grids are used to spawn nodes in a specific pattern. You can create your own custom grids by extending the
BaseGrid
class. - Nodes: Nodes are the entities that send and receive messages. You can create your own custom nodes by extending the
BaseNode
class. - Messages: Messages are the data that nodes send and receive. You can create your own custom messages by extending the
BaseMessage
class. - Message Spawners: Message spawners are used to spawn messages in the simulation. You can create your own custom message spawners by extending the
BaseMessageSpawner
class. - Target Spawners: Target spawners are used to mark nodes as targets. You can create your own custom target spawners by extending the
BaseTargetSpawner
class.
Please refer to each specific BaseClass Docstrings for more information on each property and method.
Chronos exposes certain settings of the simulation loop itself for your configuration. These are:
- Node Count: The number of nodes in the simulation. Future support will be added for Grids to be able to determin the number of nodes to be spawned and allow for dynamic node count.
- Simulation Steps: The number of steps the simulation will run for.
- Simulation Count: The number of simulations to run. This is useful for generating less biased results.
- Simulation Delay: The delay between each simulation step in seconds. Use this to get a better visual understanding of what is going on in the simulation.
Chronos splits the user interface into five major zones. Each zone is responsible for a different task and are logically separated.
-
Sidebar:
The sidebar will be your most used area. It contains the controls that allow you to configure the simulation and all its modules. When extending a base Module you can add your own custom properties with just one line and they will be automatically added to the sidebar.
-
Bottombar:
The bottombar contains the controls that allow you to interact with the simulation. You can start, pause, and stop the simulation from here. You can also step through the simulation one by one.
-
Topbar:
The topbar contains controls related to active simulations. You can view the current simulation step out of the total simulation steps. You can also switch between the differnet concurrent simulations to view their current status. The topbar also allowss you to export graphs and simulation results. [TEMPORARY]
-
GridView:
The gridview is where the simulation is rendered. Dark grey nodes are nodes that have almost no messages. Bright red nodes have the heightest number of messages. The color of the node is determined by the number of messages it has relative to the other nodes. Green nodes are target nodes.
-
StatusSideBar (Coming Soon):
The status sidebar will contain detailed information about the current simulation. This view will be configurable and will allow you to set what properties of your model you want to track and show here as a live preview.
- Add Support for more Graphs
- Add More Grid Types
- Add More Node Types
- Add More Message Types
- Add More Message Spawners
- Add More Target Spawners
- Add a proper Settings page with theme settings, output directory settings, graph settings, grid live view settings etc.
- Allow for node count to be handled by the grid rather than the simulation itself
- Implement the StatusSideBar
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature
) - Commit your Changes (
git commit -m 'Add some AmazingFeature'
) - Push to the Branch (
git push origin feature/AmazingFeature
) - Open a Pull Request
Note: This Project was created for a University Thesis. Not all features will be able to be merged due to plagiarism concerns. Please keep this in mind when contributing.
Distributed under the MIT License. See LICENSE.txt
for more information.
Guhan SenSam - @GSenSam - [email protected]
Developer Website: https://guhansensam.com
Project Link: https://github.com/Chronos-Network-Simulator/ChronosSim