Author: Cristian Stefan Totolin | Language: python |
Description: Not specified | Timestamp: 2017-07-02 18:05:12 +0000 |
View raw paste | Reply |
from world import stringify_properties
def split_environment(environment, agents, length=40):
coords = get_coords_by_agents(agents, length)
split_env = []
for i in range(agents):
corner_left = coords[i]['left']
corner_right = coords[i]['right']
split_walls = []
split_specials = []
for (x, y) in environment.walls:
if corner_right[0] >= x >= corner_left[0]:
if corner_right[1] >= y >= corner_left[1]:
split_walls.append((x, y))
for (x, y, c, w) in environment.specials:
if corner_right[0] >= x >= corner_left[0]:
if corner_right[1] >= y >= corner_left[1]:
split_specials.append((x, y, c, w))
for i in range(0, length):
for j in range(0, length):
if not (corner_right[0] >= i >= corner_left[0]) or not (corner_right[1] >= j >= corner_left[1]):
split_walls.append((i, j))
split_env.append(stringify_properties(
length,
length,
None,
environment.actions,
split_specials,
split_walls,
environment.walk_reward,
environment.reset_score
))
return split_env
def get_coords_by_agents(agents, length):
coords = []
if agents == 4:
# Split environment to 4 agents
coords.append(
{
"left": (0, 0),
"right": (length / 2 - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (length/2, 0),
"right": (length-1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length/2),
"right": (length / 2 - 1, length - 1),
}
)
coords.append(
{
"left": (length/2, length/2),
"right": (length - 1, length - 1),
}
)
elif agents == 3:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length / 2),
"right": (length / 2 - 1, length - 1),
}
)
coords.append(
{
"left": (length / 2, length / 2),
"right": (length - 1, length - 1),
}
)
elif agents == 2:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length / 2),
"right": (length - 1, length - 1),
}
)
elif agents == 1:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length - 1),
}
)
return coords
def split_environment(environment, agents, length=40):
coords = get_coords_by_agents(agents, length)
split_env = []
for i in range(agents):
corner_left = coords[i]['left']
corner_right = coords[i]['right']
split_walls = []
split_specials = []
for (x, y) in environment.walls:
if corner_right[0] >= x >= corner_left[0]:
if corner_right[1] >= y >= corner_left[1]:
split_walls.append((x, y))
for (x, y, c, w) in environment.specials:
if corner_right[0] >= x >= corner_left[0]:
if corner_right[1] >= y >= corner_left[1]:
split_specials.append((x, y, c, w))
for i in range(0, length):
for j in range(0, length):
if not (corner_right[0] >= i >= corner_left[0]) or not (corner_right[1] >= j >= corner_left[1]):
split_walls.append((i, j))
split_env.append(stringify_properties(
length,
length,
None,
environment.actions,
split_specials,
split_walls,
environment.walk_reward,
environment.reset_score
))
return split_env
def get_coords_by_agents(agents, length):
coords = []
if agents == 4:
# Split environment to 4 agents
coords.append(
{
"left": (0, 0),
"right": (length / 2 - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (length/2, 0),
"right": (length-1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length/2),
"right": (length / 2 - 1, length - 1),
}
)
coords.append(
{
"left": (length/2, length/2),
"right": (length - 1, length - 1),
}
)
elif agents == 3:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length / 2),
"right": (length / 2 - 1, length - 1),
}
)
coords.append(
{
"left": (length / 2, length / 2),
"right": (length - 1, length - 1),
}
)
elif agents == 2:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length / 2 - 1),
}
)
coords.append(
{
"left": (0, length / 2),
"right": (length - 1, length - 1),
}
)
elif agents == 1:
coords.append(
{
"left": (0, 0),
"right": (length - 1, length - 1),
}
)
return coords
View raw paste | Reply |