Разница генерации случайных чисел в матрицах и python - PullRequest
0 голосов
/ 10 марта 2020

Я новичок ie в python. Я пытаюсь реализовать алгоритм Geneti c, который я ранее реализовал в MatLab. Мне нужно создать несколько хромосом (индивидуумов) для моей начальной популяции. В MatLab я делал это с помощью функции rand, и это давало мне множество уникальных (или, по крайней мере, достаточно разных) исходных групп населения. Но здесь, в python, я пробовал разные методы random, но среди 50 человек у меня всего 3–4 уникальных хромосомы. Вот мой python код в __main__.py:

for i in range(pop_size):
        popSpace.append(Chromosom(G=mG,M=mM))
        sum_Q+=popSpace[i].Q

И мой Chromosom класс:

class Chromosom:   
    def __init__(self,G,M):
            self.Q = 0
            self.V = []
            self.Chr = [0]*len(self.M)
            self.M= M
            self.G= G
            self.randomChromosom() 
            self.updateQ_Qs() 

    def randomChromosom(self):
        for m in range(len(self.M)):
            if (random.random()< 0.5):
                self.Chr[m] = 1
            else:
                self.Chr[m] = 0

Я также пытался получить случайные биты, но результаты все еще были то же. Например, я использовал print(str(main.mRand.getrandbits(6)), чтобы увидеть результаты в консоли, и понял, что слишком много дублированных чисел. Есть ли способ для создания более уникальных случайных чисел? в MatLab тот же код с функцией rand работал хорошо (конечно, довольно медленно). Наличие такой близкой начальной популяции приводит к плохим результатам на следующих шагах (также я должен отметить, что проблема случайности также вызывает похожие мутации). Моя проблема в том, что существует так много похожих хромосом. Например, у меня есть несколько 01111001 с, что странно, учитывая их вероятность появления.

...