Power grid research requires testing in realistic, large-scale, electric networks. However, in light of security threats, most information on the actual power grids is considered sensitive and therefore not available to the general public. So far, most power transmission studies have been carried using a few publicly available test grids. Still, these test grids are too small to capture the complexity of real grids. With this in mind, there has recently been a strong concentrated effort in developing methodologies for building realistic synthetic grids, based only on publicly available information. These synthetic grids are supposed to be based on some real example and to present analogous properties โ€” such as geographic load/generation distribution, total load and generator types โ€” while not actually presenting potentially sensitive information about the real grid.

This module provides an open source suite for generating synthetic grids based on real data openly available to the public. Power grids constructed via the SyntheticGrids module can be easily exported to pandapower for running optimum power flow calculations. Currently, information is limited to the USA region, but the framework can be readily applied to any other region, provided there are data sources available. We leverage the works published by Overbye's group and Soltan and Zussman, providing a direct implementation of their methods. For more details on the approaches adopted, please see Model.


Detailed documentation

Current functionalities

Basic Usage

grid = Grid()

Create new (empty) grid

place_loads_from_zips!(grid, latitude limits, longitude limits)

Build load buses from zipcodes

place_gens_from_data!(grid, latitude limits, longitude limits)

Build generation buses from data (buses may also be placed manually)


Generate node connections

cluster!(grid, nloads, nboth, ngens)

Build substations by clustering nodes (optional)


Build transmission lines from connection topology

Exporting network to pandapower

This module makes use of PyCall in order to interface with pandapower. Since the reference charts in pandapower do not contain transmission lines and transformer parameters for several voltages, currently, this module places all loads at 110kV and all generation at 380kV in order to have the proper parameters. Transformers are automatically placed every time two connected buses operate at different voltages. In order to obtain a pandapower object from a SynGrid instance, simply run the command:


This returns a PyObject. A path can be optionally passed as well in order to obtain a file saved in the native pandapower format. These files can later be imported via the loadppgrid command.

Current issues