Support water distribution

This commit is contained in:
WQY\qiong
2023-04-30 14:04:07 +08:00
parent 45296960e7
commit e30c81a891
6 changed files with 618 additions and 50 deletions

View File

@@ -5732,6 +5732,490 @@ class TestApi:
self.leave(p)
# 34 water_distribution
def test_distribute_demand_to_nodes(self):
p = 'test_distribute_demand_to_nodes'
read_inp(p, f'./inp/net3.inp', '3')
open_project(p)
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
nodes = vds[0]['nodes']
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
distribute_demand_to_nodes(p, 100.0, nodes, DISTRIBUTION_TYPE_ADD)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
distribute_demand_to_nodes(p, -100.0, nodes, DISTRIBUTION_TYPE_ADD)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
distribute_demand_to_nodes(p, 100.0, nodes, DISTRIBUTION_TYPE_OVERRIDE)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
distribute_demand_to_nodes(p, -100.0, nodes, DISTRIBUTION_TYPE_OVERRIDE)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == -17.357291284684024
assert demands[1] == -22.112211221122113
assert demands[2] == -6.466202175773133
assert demands[3] == -8.232489915658233
assert demands[4] == -4.180418041804181
assert demands[5] == -7.260726072607261
assert demands[6] == -3.862608483070529
assert demands[7] == -6.466202175773133
assert demands[8] == -5.738907224055739
assert demands[9] == -0.892311453367559
assert demands[10] == -3.9665077618873
assert demands[11] == -2.9275149737195942
assert demands[12] == -2.1391027991688056
assert demands[13] == -2.9275149737195942
assert demands[14] == -5.469991443588803
self.leave(p)
def test_distribute_demand_to_nodes_op(self):
p = 'test_distribute_demand_to_nodes'
read_inp(p, f'./inp/net3.inp', '3')
open_project(p)
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
nodes = vds[0]['nodes']
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
cs = distribute_demand_to_nodes(p, 100.0, nodes, DISTRIBUTION_TYPE_ADD).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_undo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
demands.reverse()
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
cs = execute_redo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = distribute_demand_to_nodes(p, 100.0, nodes, DISTRIBUTION_TYPE_OVERRIDE).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_undo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
demands.reverse()
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_redo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
self.leave(p)
def test_distribute_demand_to_region(self):
p = 'test_distribute_demand_to_region'
read_inp(p, f'./inp/net3.inp', '3')
open_project(p)
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
nodes = vds[0]['nodes']
boundary = calculate_boundary(p, nodes)
boundary = inflate_boundary(p, boundary, 0.1)
add_region(p, ChangeSet({'id': 'r', 'boundary': boundary}))
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
distribute_demand_to_region(p, 100.0, 'r', DISTRIBUTION_TYPE_ADD)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
distribute_demand_to_region(p, -100.0, 'r', DISTRIBUTION_TYPE_ADD)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
distribute_demand_to_region(p, 100.0, 'r', DISTRIBUTION_TYPE_OVERRIDE)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
distribute_demand_to_region(p, -100.0, 'r', DISTRIBUTION_TYPE_OVERRIDE)
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands[0] == -17.357291284684024
assert demands[1] == -22.112211221122113
assert demands[2] == -6.466202175773133
assert demands[3] == -8.232489915658233
assert demands[4] == -4.180418041804181
assert demands[5] == -7.260726072607261
assert demands[6] == -3.862608483070529
assert demands[7] == -6.466202175773133
assert demands[8] == -5.738907224055739
assert demands[9] == -0.892311453367559
assert demands[10] == -3.9665077618873
assert demands[11] == -2.9275149737195942
assert demands[12] == -2.1391027991688056
assert demands[13] == -2.9275149737195942
assert demands[14] == -5.469991443588803
self.leave(p)
def test_distribute_demand_to_region_op(self):
p = 'test_distribute_demand_to_region_op'
read_inp(p, f'./inp/net3.inp', '3')
open_project(p)
vds = calculate_virtual_district(p, ['107', '139', '267', '211'])['virtual_districts']
nodes = vds[0]['nodes']
boundary = calculate_boundary(p, nodes)
boundary = inflate_boundary(p, boundary, 0.1)
add_region(p, ChangeSet({'id': 'r', 'boundary': boundary}))
demands = []
for node in nodes:
if not is_junction(p, node):
continue
ds = get_demand(p, node)['demands']
demands.append(ds[0]['demand'])
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
cs = distribute_demand_to_region(p, 100.0, 'r', DISTRIBUTION_TYPE_ADD).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_undo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
demands.reverse()
assert demands == [0.0, 189.95, 133.2, 135.37, 54.64, 231.4, 141.94, 52.1, 117.71, 176.13, 0.0, 0.0, 0.0, 0.0, 0.0]
cs = execute_redo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = distribute_demand_to_region(p, 100.0, 'r', DISTRIBUTION_TYPE_OVERRIDE).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_undo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
demands.reverse()
assert demands[0] == 17.357291284684024
assert demands[1] == 212.0622112211221
assert demands[2] == 139.66620217577312
assert demands[3] == 143.60248991565823
assert demands[4] == 58.82041804180418
assert demands[5] == 238.66072607260728
assert demands[6] == 145.80260848307051
assert demands[7] == 58.566202175773135
assert demands[8] == 123.44890722405573
assert demands[9] == 177.02231145336756
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
cs = execute_redo(p).operations
demands = []
for value in cs:
ds = value['demands']
demands.append(ds[0]['demand'])
assert demands[0] == 17.357291284684024
assert demands[1] == 22.112211221122113
assert demands[2] == 6.466202175773133
assert demands[3] == 8.232489915658233
assert demands[4] == 4.180418041804181
assert demands[5] == 7.260726072607261
assert demands[6] == 3.862608483070529
assert demands[7] == 6.466202175773133
assert demands[8] == 5.738907224055739
assert demands[9] == 0.892311453367559
assert demands[10] == 3.9665077618873
assert demands[11] == 2.9275149737195942
assert demands[12] == 2.1391027991688056
assert demands[13] == 2.9275149737195942
assert demands[14] == 5.469991443588803
self.leave(p)
# 37 virtual_district
def test_virtual_district(self):