我需要在基本层面上模拟具有冗余的电路,例如这样:
我们有两台发电机、几个配电器和设备。 我正在尝试从设备功率要求开始模拟每个分支上的电流(例如,设备 1 需要 5 安培,设备 2 15,设备 3 ...,)
我的尝试是通过实现一个简单的图表:
现在让我停下来的问题是: 某些设备(配电器)可以从多个父设备获取电力。在这种情况下,正常的解决方案是在父级之间平均分配电力请求,但是,如果其中一个父级无法提供电力(较小的发电机或向许多设备供电),则分配器将向其他父级要求更多。在我看来,如果是这种情况,不可能提前知道,因为需要完全运行上述算法才能知道发电机是否过载,为此,我必须提前选择经销商是否会要求它的父母 50/50 或 30/70 或 ... .
我能想到的唯一解决方案是迭代:以 50/50 的比例应用一次算法。如果一台发电机可以提供 30%,我会记下这一点并再次模拟,要求另一台发电机提供 70%,很好。也许不是......另一个发电机现在无法为另一个分配器提供足够的电力,因此我必须再次模拟更改另一个分配器的 50/50 百分比。 恐怕这可能过于复杂,并且算法永远不会收敛到一个好的结果。 我从来没有遇到过这种问题,经过很多天的沉睡,我仍然找不到最好的解决方案。我想避免不良做法并使用良好的软件设计。 有没有人有针对此类问题的通用解决方案来指点我?
谢谢大家
PS:语言不是问题(这是算法问题),但如果相关的话我用 C++ 编写它
这是一个流量问题。
这里是计算流量问题的算法:
使用 Dijkstra 算法找到从源到目的地的路径
查找路径上任何链路的最小容量
将路径上所有链路的容量减少最小容量
删除现在容量为零的任何链接
重复上述步骤,直到找不到更多路径。
您需要将发电机的链路容量设置为它们可以生成的最大功率,并将设备的链路容量设置为设备的功率需求。
这里有一些实现此功能的 C++ 代码https://github.com/JamesBremner/PathFinder/blob/7b98a412398e1aea8934a8002822e1ccef9b888a/src/GraphTheory.cpp#L755-L859。此文档位于 https://github.com/JamesBremner/PathFinder/wiki/Flows,完整的应用程序位于 https://github.com/JamesBremner/PathFinder