Another Aquaponics Rose
My little basement aquaponics setup has given me another miniature rose!!!
一位潜在客户向我推荐了一篇文章:通过快速灵活的网络模拟推动能源转型。文章介绍了一个开源项目 Power Grid Model DS(pgm-ds),其中 DS 代表 Data Science(数据科学)。

pgm-ds 在 Power Grid Model 的基础上扩展而来。根据其文档,“power-grid-model 是一个用于稳态配电系统分析的软件库。” 模型包含以下组件:
等等。它用于建模潮流、状态估计和短路。
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(安大略省一家电力公司)的运维仪表盘。

这只是系统的一个局部,却足以体现实际操作人员面对的信息密度与复杂性。
pgm-ds 软件允许动态修改电网、添加或删除组件,并报告故障和失效情况。它可以通过冗余连接重新路由电力,还有其他功能。你可以模拟系统变更,尝试预测未来需求以及变更产生的影响。
面对如此复杂的系统,模拟自然成为机器学习的基础。像 pgm-ds 这样的工具能够生成结构化场景,用于预测、异常检测和辅助决策。
扩展和管理电网不仅困难,而且是个推进缓慢的过程。无论建造电厂、水坝、数据中心、工厂还是住宅社区,都需要时间。
这个领域不仅技术上引人入胜,而且具有重要的现实意义。这样的工具不只是在模拟基础设施,也帮助塑造基础设施的发展方向。因此,这项工作既充满智力挑战,也很有价值。
My little basement aquaponics setup has given me another miniature rose!!!
Some of you may have read my Git Battles post, where I talked about how I developed and a documented a Git workflow.
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...
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...
I run an NFS server on my network. I use two large drives and a cron job to rsync the data to provide basic data protection. This solution will not save you ...
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...
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...
The Bear & Moose GeoIP Project provides an easy-to-use GeoIP service for your applications and for interactive lookups.
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...
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...
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. ...
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...
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…
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 ...
A potential client pointed me to Empowering the Energy Transition Through Fast and Flexible Network Simulation. The article describes an Open Source project,...
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...
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...
A Rosebud, a Few Guppies, and a Quiet Little Ecosystem
I setup an Etsy Storefront to sell high quality, museum grade prints of some of my artwork.
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 is an interactive reinforcement learning sandbox for experimenting with AI agents in a classic Snake Game environment — featuring a live Textual...
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…
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...
This week, I introduced 15 raccoon tiger shrimp—plus a surprise 2 bonus—to my aquarium. After a proper acclimatization, I released them into the tank… and ju...
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...
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...
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...
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 ...
I’ve been deep in the trenches with my Db4E project — pulling together Monero mining infrastructure, MongoDB integration, and a bunch of orchestration magic....
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...
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...
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...
It’s been a while since I started and then abandoned this blog. My last post was in June of 2024!!
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 ...
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!).
The XMR Mining Farm complete with this eye-popping chart The Bear and Moose Knowledge Base My resume MyZODB - A Place to Store Everything