我想通过大坝上游和下游传感器的测量来确定大坝释放的流量。
基本假设:
图比较简单(下图),单向,边没有容量,也没有权重。
我正在使用 NetworkX 来模拟网络图流(但如果您知道更好的方法,请告诉我),但我不太明白模拟流是如何工作的。节点代表流量计,边代表定向流(下图)。
感谢您的投入!
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 的流入量,表明大坝正在拦水。流量的差异要么是被大坝储存,要么可能用于数据中未描述的其他目的(例如发电或引水)。
输出: