Как я могу сгенерировать 100 сеточных карт? - PullRequest
1 голос
/ 10 октября 2019

Я построил map, который генерирует obstacles, start point and endpoint randomly для алгоритма поиска пути. Как показано ниже:

import random
import numpy as np

x = [[random.uniform(0,1) for i in range(50)]for j in range(50)]
grid = np.array([[0 for i in range(len(x[0]))]for j in range(len(x))])

for i in range(len(x)):
    for j in range(len(x[0])):
        if x[i][j] <= 0.7:
            grid[i][j] = 0
        else:
            grid[i][j] = 1

init = np.random.randint(0, high = 49, size = 2) #Start location 
goal = np.random.randint(0, high = 49, size = 2) #Our goal 

# clear starting and end point of potential obstacles
def clear_grid(grid, x, y):
    if x != 0 and y != 0:
        grid[x-1:x+2,y-1:y+2]=0
    elif x == 0 and y != 0:
        grid[x:x+2,y-1:y+2]=0
    elif x != 0 and y == 0:
        grid[x-1:x+2,y:y+2]=0
    elif x ==0 and y == 0:
        grid[x:x+2,y:y+2]=0

clear_grid(grid, init[0], init[1])
clear_grid(grid, goal[0], goal[1]) 

Как показано выше, этот фрагмент даст мне one environment (карта сетки) с random obstacles, start point и endpoint. Мне нужно создать 100 environments (карты сетки), и каждая среда из этих 100 дает мне случайные препятствия, начальную и конечную точки. Могу ли я получить какую-либо помощь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 10 октября 2019

np.random.choice() почти делает то, что вы хотите, за исключением доли по сетке. Я думаю, что это довольно приятно читать и почти в 10 раз быстрее, чем вложенные циклы:

import numpy as np
np.array([np.random.choice([0, 1], p=[0.7, 0.3], size=(50, 50)) for _ in range(100)])
1 голос
/ 10 октября 2019

Это даст вам 100 сеток 50х50 со случайными нулями и единицами с учетом вашего правила (равномерное (0, 1) <= .7) для заполнения <code>ones:

from random import uniform
import numpy as np

grids = np.array([[[0 if uniform(0, 1) <= .7 else 1 for i in range(50)] for j in range(50)] for _ in range(100)])

приведенный выше код заменяет приведенный ниже, а также дает 100 сеток за один проход:

import random
import numpy as np

x = [[random.uniform(0,1) for i in range(50)]for j in range(50)]
grid = np.array([[0 for i in range(len(x[0]))]for j in range(len(x))])

for i in range(len(x)):
    for j in range(len(x[0])):
        if x[i][j] <= 0.7:
            grid[i][j] = 0
        else:
            grid[i][j] = 1

И вот подтверждение концепции:

>>> import numpy as np
>>> from random import uniform
>>> grids = np.array([[[0 if uniform(0, 1) <= .7 else 1 for i in range(50)] for j in range(50)] for _ in range(100)])
>>> grids
array([[[0, 1, 1, ..., 0, 1, 1],
        [1, 1, 0, ..., 0, 0, 0],
        [1, 1, 0, ..., 0, 1, 1],
        ...,
        [1, 0, 1, ..., 0, 0, 0],
        [0, 0, 1, ..., 0, 0, 0],
        [0, 1, 0, ..., 0, 0, 1]],

       [[0, 1, 1, ..., 0, 1, 0],
        [1, 0, 0, ..., 0, 1, 1],
        [1, 0, 0, ..., 0, 0, 0],
        ...,
        [1, 1, 0, ..., 0, 0, 0],
        [1, 1, 1, ..., 0, 1, 1],
        [0, 0, 1, ..., 1, 1, 0]],

       [[0, 1, 0, ..., 0, 1, 1],
        [0, 0, 1, ..., 1, 0, 0],
        [0, 0, 1, ..., 0, 0, 1],
        ...,
        [0, 1, 1, ..., 1, 0, 0],
        [0, 1, 0, ..., 0, 1, 1],
        [0, 1, 0, ..., 0, 1, 0]],

       ...,

       [[1, 0, 0, ..., 1, 1, 1],
        [0, 1, 1, ..., 1, 0, 0],
        [0, 0, 0, ..., 0, 1, 0],
        ...,
        [0, 1, 1, ..., 0, 0, 1],
        [0, 0, 1, ..., 0, 0, 0],
        [1, 0, 1, ..., 0, 1, 0]],

       [[1, 1, 1, ..., 1, 0, 1],
        [0, 0, 1, ..., 1, 0, 1],
        [0, 1, 1, ..., 1, 1, 1],
        ...,
        [0, 0, 0, ..., 0, 0, 1],
        [0, 0, 0, ..., 1, 0, 0],
        [0, 0, 0, ..., 0, 0, 0]],

       [[1, 1, 0, ..., 1, 1, 1],
        [1, 1, 0, ..., 0, 0, 1],
        [1, 1, 1, ..., 0, 1, 1],
        ...,
        [1, 0, 1, ..., 1, 0, 1],
        [1, 1, 0, ..., 0, 0, 0],
        [1, 0, 1, ..., 0, 0, 1]]])
>>>
>>> len(grids)
100
>>> len(grids[0])
50
>>> len(grids[0][0])
50
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...