Я новичок 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
с, что странно, учитывая их вероятность появления.