Skip to content

Commit 10ac721

Browse files
committed
print out directory info for output functions
- output_columns(), output_link_performance(), output_agent_paths(), _output_accessibility(), and _output_accessibility_aggregated(); - rename _check_connectivity() to _are_od_connected(); - if _are_od_connected() returns false, do not set up the volume for the corresponding OD pair.
1 parent 236eb49 commit 10ac721

File tree

3 files changed

+64
-22
lines changed

3 files changed

+64
-22
lines changed

path4gmns/accessibility.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import os
12
import csv
23
import threading
34

@@ -73,6 +74,14 @@ def _output_accessibility(min_travel_times, output_dir='.'):
7374
line = [k[0], '', k[1], '', v, '']
7475
writer.writerow(line)
7576

77+
if output_dir == '.':
78+
print('\ncheck accessibility.csv in '
79+
+os.getcwd()+' for accessibility matrix')
80+
else:
81+
print('\ncheck accessibility.csv in '
82+
+os.path.join(os.getcwd(), output_dir)
83+
+' for accessibility matrix')
84+
7685

7786
def _output_accessibility_aggregated(min_travel_times, interval_num,
7887
zones, ats, output_dir='.'):
@@ -115,6 +124,14 @@ def _output_accessibility_aggregated(min_travel_times, interval_num,
115124
line.extend(counts)
116125
writer.writerow(line)
117126

127+
if output_dir == '.':
128+
print('\ncheck accessibility_aggregated.csv in '
129+
+os.getcwd()+' for aggregated accessibility matrix')
130+
else:
131+
print('\ncheck accessibility_aggregated.csv in '
132+
+os.path.join(os.getcwd(), output_dir)
133+
+' for aggregated accessibility matrix')
134+
118135

119136
def evaluate_accessibility(ui, multimodal=True, output_dir='.'):
120137
base = ui._base_assignment

path4gmns/utils.py

Lines changed: 44 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import csv
21
import os
2+
import csv
33
import threading
44

55
from .classes import Node, Link, Network, Column, ColumnVec, VDFPeriod, \
@@ -47,17 +47,24 @@ def _update_dest_zone(dz_id):
4747
_zone_degrees[dz_id] = 3
4848

4949

50-
def _check_connectivity(oz_id, dz_id):
50+
def _are_od_connected(oz_id, dz_id):
51+
connected = True
52+
5153
# at least one node in O must have outgoing links
5254
if _zone_degrees[oz_id] == 0 or _zone_degrees[oz_id] == 2:
53-
print(f'WARNING! {oz_id} has no outgoing links to route volume'
55+
connected = False
56+
print(f'WARNING! {oz_id} has no outgoing links to route volume '
5457
f'between OD: {oz_id} --> {dz_id}')
5558

5659
# at least one node in D must have incoming links
5760
if _zone_degrees[dz_id] == 0 or _zone_degrees[dz_id] == 1:
58-
print(f'WARNING! {dz_id} has no incoming links to route volume'
61+
if connected:
62+
connected = False
63+
print(f'WARNING! {dz_id} has no incoming links to route volume '
5964
f'between OD: {oz_id} --> {dz_id}')
6065

66+
return connected
67+
6168

6269
def _convert_str_to_int(str):
6370
"""
@@ -400,7 +407,7 @@ def read_links(input_dir,
400407
from_node.add_outgoing_link(link)
401408
to_node.add_incoming_link(link)
402409
links.append(link)
403-
410+
404411
# set up zone degrees
405412
# 0: isolated, has neither outgoing links nor incoming links
406413
# 1: has at least one outgoing link
@@ -456,20 +463,20 @@ def read_demand(input_dir,
456463
if volume is None:
457464
continue
458465

466+
if volume == 0:
467+
continue
468+
469+
# precheck on connectivity of each OD pair
470+
if not _are_od_connected(oz_id, dz_id):
471+
continue
472+
459473
# set up volume for ColumnVec
460474
if (at, dp, oz_id, dz_id) not in column_pool.keys():
461475
column_pool[(at, dp, oz_id, dz_id)] = ColumnVec()
462476
column_pool[(at, dp, oz_id, dz_id)].od_vol += volume
463477

464-
if volume == 0:
465-
continue
466-
467478
total_agents += int(volume + 1)
468479

469-
# precheck on connectivity of each OD pair
470-
_check_connectivity(oz_id, dz_id)
471-
472-
473480
print(f"the number of agents is {total_agents}")
474481

475482

@@ -799,6 +806,14 @@ def output_columns(ui, output_geometry=True, output_dir='.'):
799806

800807
writer.writerow(line)
801808

809+
if output_dir == '.':
810+
print('\ncheck agent.csv in '
811+
+os.getcwd()+' for path finding results')
812+
else:
813+
print('\ncheck agent.csv in '
814+
+os.path.join(os.getcwd(), output_dir)
815+
+' for path finding results')
816+
802817

803818
def output_link_performance(ui, output_dir='.'):
804819
with open(output_dir+'/link_performance.csv', 'w', newline='') as fp:
@@ -843,6 +858,14 @@ def output_link_performance(ui, output_dir='.'):
843858

844859
writer.writerow(line)
845860

861+
if output_dir == '.':
862+
print('\ncheck link_performance.csv in '
863+
+os.getcwd()+' for link performance')
864+
else:
865+
print('\ncheck link_performance.csv in '
866+
+os.path.join(os.getcwd(), output_dir)
867+
+' for link performance')
868+
846869

847870
def output_agent_paths(ui, output_geometry=True, output_dir='.'):
848871
with open(output_dir+'/agent_paths.csv', 'w', newline='') as f:
@@ -902,4 +925,12 @@ def output_agent_paths(ui, output_geometry=True, output_dir='.'):
902925
base.get_agent_link_path(agent_id, True),
903926
geometry]
904927

905-
writer.writerow(line)
928+
writer.writerow(line)
929+
930+
if output_dir == '.':
931+
print('\ncheck agent_paths.csv in '
932+
+os.getcwd()+' for unique agent paths')
933+
else:
934+
print('\ncheck agent_paths.csv in '
935+
+os.path.join(os.getcwd(), output_dir)
936+
+' for unique agent paths')

tests/demo.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,8 @@ def test_column_generation_py():
5656
print('\nstart column generation\n')
5757
st = time()
5858

59-
iter_num = 10
60-
column_update_num = 10
59+
iter_num = 20
60+
column_update_num = 20
6161
pg.perform_network_assignment(1, iter_num, column_update_num, network)
6262

6363
print(f'processing time of column generation: {time()-st:.2f} s'
@@ -69,8 +69,6 @@ def test_column_generation_py():
6969
pg.output_columns(network)
7070
pg.output_link_performance(network)
7171

72-
print('\npath finding results can be found in agent.csv')
73-
7472

7573
def test_column_generation_dtalite():
7674
""" validation using DTALite """
@@ -113,8 +111,6 @@ def test_loading_columns():
113111
pg.output_columns(network)
114112
pg.output_link_performance(network)
115113

116-
print('\npath finding results can be found in agent.csv')
117-
118114

119115
def test_accessibility():
120116
load_demand = False
@@ -127,8 +123,6 @@ def test_accessibility():
127123

128124
print('complete accessibility evaluation.\n')
129125
print(f'processing time of accessibility evaluation: {time()-st:.2f} s')
130-
print('accessibility matrices can be found in accessibility.csv '
131-
'and accessibility_aggregated.csv\n')
132126

133127
# get accessible nodes and links starting from node 1 with a 5-minitue
134128
# time window for the default mode auto (i.e., 'p')
@@ -171,4 +165,4 @@ def demo_mode(mode):
171165

172166
if __name__=="__main__":
173167

174-
demo_mode(3)
168+
demo_mode(6)

0 commit comments

Comments
 (0)