模拟电力网络

一位潜在客户向我推荐了一篇文章:通过快速灵活的网络模拟推动能源转型。文章介绍了一个开源项目 Power Grid Model DS(pgm-ds),其中 DS 代表 Data Science(数据科学)。

PGM DS 标志

pgm-ds 在 Power Grid Model 的基础上扩展而来。根据其文档,“power-grid-model 是一个用于稳态配电系统分析的软件库。” 模型包含以下组件:

  • 节点(Node)
  • 分支(Branch)
  • 电气设备(Appliance)
  • 传感器(Sensor)
  • 故障(Fault)
  • 调节器(Regulator)

等等。它用于建模潮流、状态估计和短路。

Power Grid Model DS 在此基础上提供简洁易用的 API,方便模拟电网的行为。文档解释说,该项目旨在支持与 power-grid-model 有关或使用它的数据科学应用,包括电网分析和模拟。它定义了一个 Grid 数据类,用于维护完整网络的一致性,并支持扩展 Power Grid Model 的数据结构。


运行演示

操作很简单,理解其意义却要花不少功夫。

pgm-ds 确实易于使用。从 Jupyter Notebook 风格的文档改写出一个运行演示的脚本,相对轻松。但要明白眼前的数据到底代表什么,就困难得多了。

软件包提供了基于 Flask WSGI 前端的电网可视化,可以直接在浏览器中查看。图形使用 Dash Cytoscape,一个漂亮又强大的图形可视化引擎,非常适合这类应用。

图形很好看,但真正有信息量的数据以表格形式显示在控制台中。以下是几个例子:

节点

id u_rated node_type feeder_branch_id feeder_node_id u x_coor y_coor
1 10500.0 0 64 61 0.0 125.848.. 245.522..
2 10500.0 0 65 61 0.0 385.322.. 175.70..
61 10500.0 1 -2147483648 -2147483648 0.0 134.732.. 145.515..

线路

id from_node to_node from_status to_status feeder_branch_id feeder_node_id is_feeder r1 x1 c1 tan1 i_n i_from
63 61 12 1 1 63 61 True 0.411.. 0.023.. 0.0 0.0 110.013.. 0.0
74 20 8 1 1 63 61 False 0.585.. 0.000.. 0.0 0.0 227.694.. 0.0
125 96 94 1 1 63 61 False 0.036.. 0.04.. 0.0 0.0 362.904.. 0.0

变压器

id from_node to_node from_status to_status feeder_branch_id feeder_node_id is_feeder u1 u2 sn tap_size uk pk i0 p0 winding_from winding_to clock tap_side tap_pos tap_min tap_max tap_nom
123 5 95 1 1 64 61 False 10500.0 3000.0 30000000.0 0.0 0.203 100000.0 0.0 0.0 0 0 12 0 0 0 0 0
124 12 96 1 1 63 61 False 10500.0 3000.0 30000000.0 0.0 0.203 100000.0 0.0 0.0 0 0 12 0 0 0 0 0

理解数据

配置和运行代码确实容易,但理解输出以及软件能够实现什么,就没有那么简单了。我的背景是 Linux 系统管理和 Python 编程,并没有电气工程的专业知识。

我开始研究数据结构、函数,阅读清晰简洁的 API 文档,并查找相关资料。

过去,我总觉得电网是复杂却基本静态的电路。后来才明白,把它理解成动态的物理系统更合适。电抗、无功功率等电气属性会以不那么直观的方式显著影响系统行为。电网几乎像一个有生命、会呼吸的实体。

演示中有一个值立刻引起我的注意:每公里电抗,在线路属性中表现为 x1。电抗大概是最难让我理解的概念。我最后看了几段 YouTube 视频,还和 ChatGPT 讨论了一番。无功功率是理解电网为什么如此难管理的关键。完整解释超出了本文范围,但要认识系统的行为,就必须了解这个概念。

我没有研究每个属性,只是想弄清这个软件包做什么,以及它如何对应现实世界。


电网建模

当我认识到电网真正有多复杂、多精密时,脑中对它规模的估计立刻扩大了几个数量级。正如前面所说,我有 Linux 工作背景,也曾在 CIBC、Merrill Lynch、Moneris Solutions 和 SiGe Semiconductor 等机构的运维团队工作。我见过那些堆满技术细节、供运维人员使用的大型仪表盘。于是我搜索了 Hydro One(安大略省一家电力公司)的运维仪表盘。

Hydro One 运维界面

这只是系统的一个局部,却足以体现实际操作人员面对的信息密度与复杂性。

pgm-ds 软件允许动态修改电网、添加或删除组件,并报告故障和失效情况。它可以通过冗余连接重新路由电力,还有其他功能。你可以模拟系统变更,尝试预测未来需求以及变更产生的影响。

面对如此复杂的系统,模拟自然成为机器学习的基础。像 pgm-ds 这样的工具能够生成结构化场景,用于预测、异常检测和辅助决策。

扩展和管理电网不仅困难,而且是个推进缓慢的过程。无论建造电厂、水坝、数据中心、工厂还是住宅社区,都需要时间。


结论

这个领域不仅技术上引人入胜,而且具有重要的现实意义。这样的工具不只是在模拟基础设施,也帮助塑造基础设施的发展方向。因此,这项工作既充满智力挑战,也很有价值。


链接

公司与组织

Power Grid Model DS

API 文档

GitHub 仓库

核心概念

2026

Git Automation

Some of you may have read my Git Battles post, where I talked about how I developed and a documented a Git workflow.

My blog in Simplified Chinese

I recently built MyCount to track website visitors to my projects. I found that that over 40% of my visitors were from China, and that 35% of those used a Ch...

MyCount: Website Analytics & Marketing

I have a future project in mind which will require a Dynamic DNS service. I created BMDynIP for that purpose. After building the service, I wanted a simple a...

Animating Ax3l Playing Snake

I’ve been tinkering with various incarnations of Patrick Loeber’s Train an AI to Play Snake tutorial for a while now. It’s my relaxing goto project that’s fu...

Dynamic DNS Service

This project started as a cron job and a flatfile and -honestly- that would work perfectly well for a small home setup. Say, two or three machines. I’m curre...

Local GeoIP Database

The Bear & Moose GeoIP Project provides an easy-to-use GeoIP service for your applications and for interactive lookups.

An LLM to organize my Movies

Our first TV was a small black-and-white thing where, on rare occasions, we’d watch Animal Kingdom. Then Beta and VHS came along, and you could watch them at...

From Prototype to Product (4/4)

Fr3d worked: It could talk to the Snake Lab, propose changes to the RNN configuration, run experiments, look at the results, and try again. It proved the ide...

Prompt Engineering 101 (3/4)

The Snake Lab had become a proper server, with a ZeroMQ API, configuration validation, a database, and a way to run experiments independently of the client. ...

The Evolution of Snake Lab (2/4)

In my last post, I setup a locally hosted LLM running on an old HP Z440 and wrote a crude little conversation loop. I generated random numbers, fed them to t...

Local LLM Writes Haikus (1/4)

This is part one of a four part blog series. In this post, I download, install and setup some software to prompt a local LLM to write haikus…

From Seed to Signal: AI FX

In the first post, AI FX was still mostly a seed: a repo, a PyPI package, and an idea about using automated FOREX tooling as a learning lab. Since then, the ...

Simulating the Power Grid

A potential client pointed me to Empowering the Energy Transition Through Fast and Flexible Network Simulation. The article describes an Open Source project,...

Delphi in a Day

I have a prospective client who runs a small group of technology businesses, at least one of which integrates with clients using the Delphi programming lan...

A Small Experiment: AI FX

I’ve spent some time around trading systemsL At Merrill Lynch, I supported the Order Audit Trail System (OATS), a compliance system required by NASDAQ. Its p...

Back to top ↑

2025

My Art on Etsy

I setup an Etsy Storefront to sell high quality, museum grade prints of some of my artwork.

Python systemctl Wrapper

I’ve been working on Db4E, my Monero deployment, operations and analytics platform. It uses Linux systemd to spin up manage Monero, P2Pool and XMRig instance...

AI Snake Lab

AI Snake Lab is an interactive reinforcement learning sandbox for experimenting with AI agents in a classic Snake Game environment — featuring a live Textual...

The Power of Pictures

You know that saying, “A picture is worth a thousand words.”? In programming, I’d argue it can be worth a thousand lines of code…

Caring About Constants

This post is about using constants in your code. Why it matters, what the benefits are and how you can do it well. I’m sad to say, I learned this the hard wa...

Why I Built Db4E

When I first started experimenting with Monero mining and self-hosted infrastructure, I did what everyone else does: I downloaded the Monero software, the P2...

Releasing with Git

Let me be honest: Git has punched me in the face more times than I can count. Every time I think I’ve got a smooth release flow down, Git yells, “Not so fast...

Documentation Matters

I was burned by opaque documentation: I’ve been building a modern terminal UI in Python using the excellent Textual framework. It’s sharp, fast, and honestly...

Textual Replaces ApexCharts

The original reporting system was a set of static dashboards built using GitHub Pages, JavaScript, and ApexCharts. It pulled data from my mining setup — via ...

Pivot to Textual

I’ve been deep in the trenches with my Db4E project — pulling together Monero mining infrastructure, MongoDB integration, and a bunch of orchestration magic....

Released Db4E SystemD

I recently published a small Python module to PyPI and GitHub: db4e-systemd, a lightweight wrapper around systemctl that lets you control services (start, st...

NIKU Farms

I received my order from NIKU Farms, YAY! It’s a meat delivery that my sister, Corinna Ghaznavi, gifted me this Christmas. Every two months I receive this am...

The Main Website

As part of my goal to be more visible in the world, I setup this domain i.e. https://osoyalce.com. I use it to publish information about the projects I’m wor...

Reviving the Blog

It’s been a while since I started and then abandoned this blog. My last post was in June of 2024!!

Changing the Blog Site’s Layout

I decided that I didn’t like the way that the main blog page looks. I am using GitHub to host the website and am using a fork of the jekyll/minima theme. My ...

Back to top ↑

2024

Aquaponics Update #1

It’s in the construction phase. I need to complete the water circulation process. I bought a fiber glass kit for this (and also to fix my kitchen sink!).

What I’m working on

The XMR Mining Farm complete with this eye-popping chart The Bear and Moose Knowledge Base My resume MyZODB - A Place to Store Everything

Back to top ↑