Skip to content
Snippets Groups Projects
Commit ae508fdb authored by Egli Adrian (IT-SCI-API-PFI)'s avatar Egli Adrian (IT-SCI-API-PFI)
Browse files

generate of realisitc railway network

parent 7f745158
No related branches found
No related tags found
No related merge requests found
...@@ -140,7 +140,7 @@ def realistic_rail_generator(num_cities=5, ...@@ -140,7 +140,7 @@ def realistic_rail_generator(num_cities=5,
station_slots[city_loop].append(connection[int(np.floor(len(connection) / 2))]) station_slots[city_loop].append(connection[int(np.floor(len(connection) / 2))])
station_slots_cnt += 1 station_slots_cnt += 1
if len(connection) - 3 > 0: if len(connection) - 3 > 0:
idxs = np.random.choice(len(connection) - 2, 1 + np.random.choice(len(connection) - 3), False) idxs = np.random.choice(len(connection) - 3, 1 + np.random.choice(len(connection) - 3), False)
for idx in idxs: for idx in idxs:
switch_slots[city_loop].append(connection[idx + 1]) switch_slots[city_loop].append(connection[idx + 1])
...@@ -162,10 +162,24 @@ def realistic_rail_generator(num_cities=5, ...@@ -162,10 +162,24 @@ def realistic_rail_generator(num_cities=5,
def connect_stations(rail_trans, rail_array, start_nodes_added, end_nodes_added, nodes_added, def connect_stations(rail_trans, rail_array, start_nodes_added, end_nodes_added, nodes_added,
inter_max_number_of_connecting_tracks, do_random_connect_stations): inter_max_number_of_connecting_tracks, do_random_connect_stations):
x = np.arange(len(start_nodes_added)) x = np.arange(len(start_nodes_added))
random_city_idx = np.random.choice(x, len(x), False) if do_random_connect_stations:
random_city_idx = np.random.choice(x, len(x), False)
else:
a = [[] for i in x]
b = []
for yLoop in x:
for xLoop in x:
v = get_norm_pos(subtract_pos(start_nodes_added[xLoop][0], end_nodes_added[yLoop][0]))
if v > 0:
v = np.inf
a[yLoop].append(v)
for i in range(len(a)):
b.append(np.argmin(a[i]))
random_city_idx = np.argsort(b)
for city_loop in range(len(random_city_idx) - 1): for city_loop in range(len(random_city_idx) - 1):
idx_a = random_city_idx[city_loop] idx_a = random_city_idx[city_loop + 1]
idx_b = random_city_idx[city_loop + 1] idx_b = random_city_idx[city_loop]
s_nodes = start_nodes_added[idx_a] s_nodes = start_nodes_added[idx_a]
e_nodes = end_nodes_added[idx_b] e_nodes = end_nodes_added[idx_b]
...@@ -300,11 +314,12 @@ for itrials in range(100): ...@@ -300,11 +314,12 @@ for itrials in range(100):
np.random.seed(int(time.time())) np.random.seed(int(time.time()))
env = RailEnv(width=70, env = RailEnv(width=70,
height=70, height=70,
rail_generator=realistic_rail_generator(num_cities=np.random.choice(40) + 2, rail_generator=realistic_rail_generator(num_cities=20,
city_size=np.random.choice(10) + 10, city_size=10,
allowed_rotation_angles=[0, 90], allowed_rotation_angles=[90],
max_number_of_station_tracks=np.random.choice(6) + 4, max_number_of_station_tracks=1,
max_number_of_connecting_tracks=4, max_number_of_connecting_tracks=1,
do_random_connect_stations=False,
# Number of cities in map # Number of cities in map
seed=int(time.time()) # Random seed seed=int(time.time()) # Random seed
), ),
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment