如何使用 NetworkX 计算节点的期望值

问题描述 投票:0回答:1

我想通过大坝上游和下游传感器的测量来确定大坝释放的流量。

  • 水坝 = 节点 6
  • 流入滞留湖的上游河流: -- 河流 1 = 节点 1-2,2 流入 1 -- 河流 2 = 节点 3-5,5 流入 4 流入 3
  • 下游河流:节点7-8,7流入8

基本假设

  • 如果节点 7-8 测得的流量低于节点 1 + 3,则大坝正在蓄水。
  • 如果节点 7-8 测得的流量高于节点 1 + 3,则大坝正在泄水。

图比较简单(下图),单向,边没有容量,也没有权重。

  • 输入节点为 n° 2 和 5(上游河流 1 和 2)
  • 输出节点为 n° 8
  • 中间节点中待确定的节点6。

我正在使用 NetworkX 来模拟网络图流(但如果您知道更好的方法,请告诉我),但我不太明白模拟流是如何工作的。节点代表流量计,边代表定向流(下图)。

感谢您的投入!

python-3.x networkx prediction
1个回答
0
投票

import pandas as pd

# Generate a sample dataset with the same schema
data = {
    'Node2': [150, 160],   # Flow rates at node 2 (upstream of River 1)
    'Node5': [500, 520],   # Flow rates at node 5 (upstream of River 2)
    'Node7': [600, 610],   # Flow rates at node 7 (downstream of the dam)
    'Node8': [900, 910]    # Flow rates at node 8 (downstream)
}

# Create DataFrame
df = pd.DataFrame(data)

# Define a function to calculate the flow rate at the dam (Node6)
def calculate_flow_at_dam(row):
    inflow = row['Node2'] + row['Node5']
    outflow = row['Node7']
    # If outflow is less than inflow, dam is holding back water
    if outflow < inflow:
        dam_flow = inflow - outflow
    # If outflow is greater than inflow, dam is releasing water
    elif outflow > inflow:
        dam_flow = outflow - inflow
    # If they are equal, the flow is steady and dam is neither holding back nor releasing
    else:
        dam_flow = 0
    return dam_flow

# Apply the function to each row to calculate the flow rate at the dam
df['Node6'] = df.apply(calculate_flow_at_dam, axis=1)

print(df[['Node2', 'Node5', 'Node6', 'Node7', 'Node8']])

输出是一个 DataFrame,显示两个不同实例(或时间步长)在不同节点的计算流量:

Node2和Node5分别是上游河流1和2输入节点的流量。 Node6 是计算的大坝流量。 Node7和Node8是下游节点的流量。 对于每一行:

第0行解释:

在 Node2 处,流量为 150 单位。 在 Node5 处,流量为 500 个单位。 Node2 和 Node5 的流入量之和为 650 个单位。 在节点 7 处,流量为 600 单位,这表明大坝(节点 6)可能会滞留水,因为流出量小于流入量。 计算得出的大坝(Node6)流量为 50 个单位。这意味着大坝将保留或释放 50 单位的水,以平衡此时间步流入(650 单位)和流出(600 单位)之间的差异。 在Node8处,流量为900单位,不直接参与大坝流量的计算,但可用于下游的进一步分析。 第 1 行解释:

在节点 2,流量增加到 160 单位。 在 Node5 处,流量增加到 520 个单位。 Node2 和 Node5 的流入量之和为 680 个单位。 在节点 7 处,流量为 610 个单位,这再次表明大坝(节点 6)可能会滞留水,因为流出量小于流入量。 计算得出的大坝(Node6)流量为 70 个单位。这意味着大坝将保留或释放 70 单位的水,以平衡此时间步流入(680 单位)和流出(610 单位)之间的差异。 在节点8,流量为910单位,再次提供下游数据,但不影响大坝的流量计算。 总之,在两个时间步长,大坝(节点 6)的流量均小于节点 2 和节点 5 的流入量,表明大坝正在拦水。流量的差异要么是被大坝储存,要么可能用于数据中未描述的其他目的(例如发电或引水)。

输出:

© www.soinside.com 2019 - 2024. All rights reserved.