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

generator

parent a057b2ae
No related branches found
No related tags found
No related merge requests found
...@@ -670,26 +670,17 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -670,26 +670,17 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
np.random.seed(seed + num_resets) np.random.seed(seed + num_resets)
max_n_track_seg = np.random.choice([3, 4, 5, 6]) + int(two_track_back_bone) max_n_track_seg = np.random.choice([3, 4, 5]) + int(two_track_back_bone)
x_offsets = np.arange(0, height, max_n_track_seg).astype(int) x_offsets = np.arange(0, height, max_n_track_seg).astype(int)
agents_positions_forward = [] agents_positions = []
agents_directions_forward = [] agents_directions = []
agents_positions_backward = []
agents_directions_backward = []
agents_targets = [] agents_targets = []
idx_forward = []
idx_backward = []
idx_target = 0
for off_set_loop in range(len(x_offsets)): for off_set_loop in range(len(x_offsets)):
off_set = x_offsets[off_set_loop] off_set = x_offsets[off_set_loop]
# second track # second track
data = np.arange( data = np.arange(3, width - 4, 3)
int((width - 4 - 2 * int(
two_track_back_bone) - max_n_track_seg) / max_n_track_seg)) * max_n_track_seg + 4 + int(
two_track_back_bone)
n_track_seg = np.random.choice(max_n_track_seg) + 1 n_track_seg = np.random.choice(max_n_track_seg) + 1
track_2 = False track_2 = False
...@@ -732,6 +723,13 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -732,6 +723,13 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
two_track_back_bone_loop)) two_track_back_bone_loop))
new_path = connect_rail(rail_trans, rail_array, start_track, goal_track) new_path = connect_rail(rail_trans, rail_array, start_track, goal_track)
if (goal_track[1] - start_track[1]) > 1:
add_pos = (
int((start_track[0] + goal_track[0]) / 2), int((start_track[1] + goal_track[1]) / 2))
agents_positions.append(add_pos)
agents_directions.append(([1, 3][off_set_loop % 2]))
agents_targets.append(add_pos)
add_rail(width, height, grid_map, add_rail(width, height, grid_map,
(x_offsets[off_set_loop - 1] + int(two_track_back_bone_loop), (x_offsets[off_set_loop - 1] + int(two_track_back_bone_loop),
width - 2 - int(two_track_back_bone_loop)), width - 2 - int(two_track_back_bone_loop)),
...@@ -776,6 +774,13 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -776,6 +774,13 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
int(two_track_back_bone_loop)) int(two_track_back_bone_loop))
new_path = connect_rail(rail_trans, rail_array, start_track, goal_track) new_path = connect_rail(rail_trans, rail_array, start_track, goal_track)
if (goal_track[1] - start_track[1]) > 1:
add_pos = (
int((start_track[0] + goal_track[0]) / 2), int((start_track[1] + goal_track[1]) / 2))
agents_positions.append(add_pos)
agents_directions.append(([1, 3][off_set_loop % 2]))
agents_targets.append(add_pos)
add_rail(width, height, grid_map, add_rail(width, height, grid_map,
(x_offsets[off_set_loop - 1] + int(two_track_back_bone_loop), (x_offsets[off_set_loop - 1] + int(two_track_back_bone_loop),
1 + int(two_track_back_bone_loop)), 1 + int(two_track_back_bone_loop)),
...@@ -833,50 +838,39 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -833,50 +838,39 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
make_switch_w_e(width, height, grid_map, c) make_switch_w_e(width, height, grid_map, c)
add_pos = (int((start[0] + goal[0]) / 2), int((start[1] + goal[1]) / 2)) add_pos = (int((start[0] + goal[0]) / 2), int((start[1] + goal[1]) / 2))
if nbr_track_loop % 2 == 0: agents_positions.append(add_pos)
agents_positions_forward.append(add_pos) agents_directions.append(([1, 3][off_set_loop % 2]))
agents_directions_forward.append(([1, 3][off_set_loop % 2])) add_pos = (int((start[0] + goal[0]) / 2), int((2 * start[1] + goal[1]) / 3))
idx_forward.append(idx_target)
else:
agents_positions_backward.append(add_pos)
agents_directions_backward.append(([1, 3][off_set_loop % 2]))
idx_backward.append(idx_target)
add_pos = (int((start[0] + goal[0]) / 2), int((2 * start[1] + goal[1]) / 3), idx_target)
agents_targets.append(add_pos) agents_targets.append(add_pos)
idx_target += 1
for pos_y in np.random.choice(np.arange(width - 7) + 3, min(width - 7, add_max_dead_end), False): pos_ys = np.random.choice(np.arange(width - 7) + 3, min(width - 7, add_max_dead_end), False)
for pos_y in pos_ys:
pos_x = off_set + 1 + int(two_track_back_bone) pos_x = off_set + 1 + int(two_track_back_bone)
if pos_x < height - 1: if pos_x < height - 1:
ok = True ok = True
for k in range(6): for k in range(4):
c = (pos_x - 1, pos_y - k + 1) if two_track_back_bone:
ok &= grid_map.grid[c[0]][c[1]] == 1025 c = (pos_x - 1, pos_y - k + 1)
ok &= grid_map.grid[c[0]][c[1]] == 1025
c = (pos_x, pos_y - k + 1) c = (pos_x, pos_y - k + 1)
ok &= grid_map.grid[c[0]][c[1]] == 0 ok &= grid_map.grid[c[0]][c[1]] == 0
if ok: if ok:
if np.random.random() < 0.5: if np.random.random() < 0.95:
start_track = (pos_x, pos_y) start_track = (pos_x, pos_y)
goal_track = (pos_x, pos_y - 2) goal_track = (pos_x, pos_y - 2)
new_path = connect_rail(rail_trans, rail_array, start_track, goal_track) new_path = connect_rail(rail_trans, rail_array, start_track, goal_track)
if len(new_path) > 0: if len(new_path) > 0:
c = (pos_x - 1, pos_y - 1) c = (pos_x - 1, pos_y - 1)
make_switch_e_w(width, height, grid_map, c) make_switch_e_w(width, height, grid_map, c)
if np.random.random() < 0.5: add_pos = (
add_pos = ( int((goal_track[0] + start_track[0]) / 2),
int((goal_track[0] + start_track[0]) / 2), int((goal_track[1] + start_track[1]) / 2))
int((goal_track[1] + start_track[1]) / 2), agents_positions.append(add_pos)
idx_target) agents_directions.append(3)
agents_positions_backward.append(add_pos) add_pos = (
agents_directions_backward.append(3) int((goal_track[0] + start_track[0]) / 2),
idx_backward.append(idx_target) int((goal_track[1] + start_track[1]) / 2))
add_pos = ( agents_targets.append(add_pos)
int((goal_track[0] + start_track[0]) / 2),
int((goal_track[1] + start_track[1]) / 2),
idx_target)
agents_targets.append(add_pos)
idx_target += 1
else: else:
start_track = (pos_x, pos_y) start_track = (pos_x, pos_y)
goal_track = (pos_x, pos_y - 2) goal_track = (pos_x, pos_y - 2)
...@@ -884,20 +878,15 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -884,20 +878,15 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
if len(new_path) > 0: if len(new_path) > 0:
c = (pos_x - 1, pos_y + 1) c = (pos_x - 1, pos_y + 1)
make_switch_w_e(width, height, grid_map, c) make_switch_w_e(width, height, grid_map, c)
if np.random.random() < 0.5: add_pos = (
add_pos = ( int((goal_track[0] + start_track[0]) / 2),
int((goal_track[0] + start_track[0]) / 2), int((goal_track[1] + start_track[1]) / 2))
int((goal_track[1] + start_track[1]) / 2), agents_positions.append(add_pos)
idx_target) agents_directions.append(1)
agents_positions_forward.append(add_pos) add_pos = (
agents_directions_forward.append(1) int((goal_track[0] + start_track[0]) / 2),
idx_forward.append(idx_target) int((goal_track[1] + start_track[1]) / 2))
add_pos = ( agents_targets.append(add_pos)
int((goal_track[0] + start_track[0]) / 2),
int((goal_track[1] + start_track[1]) / 2),
idx_target)
agents_targets.append(add_pos)
idx_target += 1
agents_position = [] agents_position = []
agents_target = [] agents_target = []
...@@ -907,30 +896,15 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t ...@@ -907,30 +896,15 @@ def realistic_rail_generator(nr_start_goal=1, seed=0, add_max_dead_end=20, two_t
t = np.random.choice(range(len(agents_targets))) t = np.random.choice(range(len(agents_targets)))
d = agents_targets[t] d = agents_targets[t]
agents_targets.pop(t) agents_targets.pop(t)
if np.random.random() < 0.5: # d[2] < idx_target: agents_target.append((d[0], d[1]))
if len(idx_backward) > 0: sel = np.random.choice(range(len(agents_positions)))
agents_target.append((d[0], d[1])) # backward
sel = np.random.choice(range(len(idx_backward))) p = agents_positions[sel]
# backward d = agents_directions[sel]
p = agents_positions_backward[sel] agents_positions.pop(sel)
d = agents_directions_backward[sel] agents_directions.pop(sel)
agents_positions_backward.pop(sel) agents_position.append((p[0], p[1]))
agents_directions_backward.pop(sel) agents_direction.append(d)
idx_backward.pop(sel)
agents_position.append((p[0], p[1]))
agents_direction.append(d)
else:
if len(idx_forward) > 0:
agents_target.append((d[0], d[1]))
sel = np.random.choice(range(len(idx_forward)))
# forward
p = agents_positions_forward[sel]
d = agents_directions_forward[sel]
agents_positions_forward.pop(sel)
agents_directions_forward.pop(sel)
idx_forward.pop(sel)
agents_position.append((p[0], p[1]))
agents_direction.append(d)
return grid_map, agents_position, agents_direction, agents_target, [1.0] * len(agents_position) return grid_map, agents_position, agents_direction, agents_target, [1.0] * len(agents_position)
...@@ -1070,7 +1044,7 @@ def sparse_rail_generator(num_cities=100, num_intersections=10, num_trainstation ...@@ -1070,7 +1044,7 @@ def sparse_rail_generator(num_cities=100, num_intersections=10, num_trainstation
width - 1) width - 1)
while (station_x, station_y) in train_stations or (station_x, station_y) == node_positions[ while (station_x, station_y) in train_stations or (station_x, station_y) == node_positions[
trainstation_node] or \ trainstation_node] or \
rail_array[(station_x, station_y)] != 0: rail_array[(station_x, station_y)] != 0:
station_x = np.clip( station_x = np.clip(
node_positions[trainstation_node][0] + np.random.randint(-node_radius, node_radius), node_positions[trainstation_node][0] + np.random.randint(-node_radius, node_radius),
0, 0,
......
...@@ -8,7 +8,7 @@ from flatland.envs.rail_env import RailEnv ...@@ -8,7 +8,7 @@ from flatland.envs.rail_env import RailEnv
from flatland.utils.rendertools import RenderTool, AgentRenderVariant from flatland.utils.rendertools import RenderTool, AgentRenderVariant
def test_realistic_rail_generator(vizualization_folder_name=None): def test_realistic_rail_generator(vizualization_folder_name=None):
for test_loop in range(5): for test_loop in range(50):
print("test_loop", test_loop) print("test_loop", test_loop)
num_agents = np.random.randint(10, 30) num_agents = np.random.randint(10, 30)
env = RailEnv(width=np.random.randint(40, 80), env = RailEnv(width=np.random.randint(40, 80),
...@@ -51,4 +51,4 @@ def test_sparse_rail_generator(): ...@@ -51,4 +51,4 @@ def test_sparse_rail_generator():
env_renderer.render_env(show=True, show_observations=True, show_predictions=False) env_renderer.render_env(show=True, show_observations=True, show_predictions=False)
env_renderer.close_window() env_renderer.close_window()
# test_realistic_rail_generator("./../rendering/") #test_realistic_rail_generator("./../rendering/")
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