Created
June 18, 2019 21:04
-
-
Save aecanales/7cd774485a8adff9dabc4afcf7d00e22 to your computer and use it in GitHub Desktop.
Generador de problemas para la T3 del curso IIC2613 @ PUC 2019-1.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from random import randint | |
from os import sep | |
MAX_MOVES = 50 | |
PROBLEMS = 20 | |
ROBOTS = [2, 4, 8, 16] | |
RANGE_X = 20 | |
RANGE_Y = 20 | |
OBSTACLES = 0.1 # Percentage between 0 and 1. | |
for robots in ROBOTS: | |
nl = '\n' | |
print(f'----------- {nl}{robots} AGENTS {nl}-----------') | |
for i in range(PROBLEMS): | |
with open (f'problems{sep}{robots}_agents_problem_ins_{i}.lp', 'w') as file: | |
# Add max movements, grid range and robots to file. | |
file.write(f'#const bound = {MAX_MOVES}.\n') | |
file.write(f'time(1..bound).\n') | |
file.write(f'rangeX(0..{RANGE_X - 1}).\n') | |
file.write(f'rangeY(0..{RANGE_Y - 1}).\n') | |
file.write(f'robot(1..{robots}).\n') | |
# Create internal represntation of grid. | |
grid = [['' for x in range(RANGE_X)] for y in range(RANGE_Y)] | |
# Populate grid with robots and their corresponding goals. | |
for robot in range(robots): | |
# Loop until a valid position is found. | |
while True: | |
r_x, r_y = randint(0, RANGE_X - 1), randint(0, RANGE_Y - 1) | |
g_x, g_y = randint(0, RANGE_X - 1), randint(0, RANGE_Y - 1) | |
if grid[r_y][r_x] == '' and grid[g_y][g_x] == '': | |
grid[r_y][r_x] = f'R{robot + 1}' | |
grid[g_y][g_x] = f'G{robot + 1}' | |
break | |
# Populate grid with obstacles. | |
for obstacle in range(round(OBSTACLES * RANGE_X * RANGE_Y)): | |
while True: | |
x, y = randint(0, RANGE_X - 1), randint(0, RANGE_Y - 1) | |
if grid[y][x] == '': | |
grid[y][x] = f'X' | |
break | |
# Write resulting grid to file. | |
for y in range(RANGE_Y): | |
for x in range(RANGE_X): | |
if 'R' in grid[y][x]: | |
file.write(f'on({grid[y][x][1:]},{x},{y},0).' + '\n') | |
if 'G' in grid[y][x]: | |
file.write(f'goal({grid[y][x][1:]},{x},{y}).' + '\n') | |
if grid[y][x] == 'X': | |
file.write(f'obstacle({x},{y}).' + '\n') | |
print(f'---- PROBLEM {i} ----') | |
for row in grid: | |
for c in row: | |
if c == '': | |
print('| ', end='') | |
elif c == 'X': | |
print('|XXX', end='') | |
else: | |
print(f'|{c}', end='') | |
if len(c) == 2: | |
print(' ', end='') | |
print('') | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment