Как получить новый экземпляр модуля Python для случайного заполнения каждого объекта - PullRequest
1 голос
/ 01 ноября 2019

Привет, я создаю генетический алгоритм для решения змеиной игры. У меня есть класс Game, в нем реализована вся логика игры змея. Я использую его для оценки каждого Snake в популяции.

Я генерирую случайные закуски для змеи в игре. Но мне нужен способ генерировать одинаковые позиции случайных закусок для каждого нового экземпляра Game, поэтому каждая змея в популяции будет оцениваться в одной и той же среде.

class Game:
    def __init__(self, width, height, phenotype, seed, game_representation_strategy,
             snake_length=5, snack_eaten_points=1, moved_toward_snack_points=0.1,
             moved_away_from_snack_points=-0.2):
        self.width = width
        self.height = height
        self.phenotype = phenotype
        self.seed = seed
        self.game_representation_strategy = game_representation_strategy
        self.snack_perspective = None
        self.snack_eaten_points = snack_eaten_points
        self.moved_toward_snack_points = moved_toward_snack_points
        self.moved_away_from_snack_points = moved_away_from_snack_points

        self.status = GameStatus.INITIALIZED
        self.snack = None
        self.snake = []
        self.score = 0
        self.direction = Direction.LEFT
        self.last_snack_distance = 0

        self.initialize_snake(snake_length)
        self.initialize_snack()
        self.initialize_last_snack_distance()

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

Так как вам нужно или вы можете предоставить начальное число, и поскольку эти случайные числа являются псевдослучайными числами, вы можете повторить их, запомнив свое начальное число.

   seed = 0
   import random
   randNumberGenerator = random.Random(seed)
   number = randNumberGenerator.randint(0, 1)
   print(number)

Выполните этот скрипт дважды, и вы получитетот же номер.

Это то, что вы просите?

0 голосов
/ 01 ноября 2019

Вы можете просто

from random import Random

rng = Random(your_seed_here)

И затем вызывать обычные функции из модуля random в этом случае.

num = rng.randint(0, 100)
...