Я пытаюсь построить простой генетический алгоритм, который будет оптимизирован для входной строки, но у меня возникают проблемы с построением матрицы [индивидуального x генома] (строка n является индивидуальной n genome.) Я хочу иметь возможность изменять размер популяции, скорость мутации и другие параметры, чтобы изучить, как это влияет на скорость конвергенции и эффективность программы.Матрица с переменным размером [ixj] (Python, Numpy)
Это то, что я до сих пор:
import random
import itertools
import numpy as np
def evolve():
goal = 'Hello, World!' #string to optimize towards
ideal = list(goal)
#converting the string into a list of integers
for i in range (0,len(ideal)):
ideal [i] = ord(ideal[i])
print(ideal)
popSize = 10 #population size
genome = len(ideal) #determineing the length of the genome to be the length of the target string
mut = 0.03 #mutation rate
S = 4 #tournament size
best = float("inf") #initial best is very large
maxVal = max(ideal)
minVal = min(ideal)
print (maxVal)
i = 0 #counting variables assigned to solve UnboundLocalError
j = 0
print(maxVal, minVal)
#constructing initial population array (individual x genome)
pop = np.empty([popSize, len(ideal)])
for i, j in itertools.product(range(i), range(j)):
pop[i, j] = [i, random.randint(minVal,maxVal)]
print(pop)
Это создает матрицу размера популяции с правильной длиной генома, но геном что-то вроде:
[ 6.91364167e-310 6.91364167e-310 1.80613009e-316 1.80613009e-316
5.07224590e-317 0.00000000e+000 6.04100487e+151 3.13149876e-120
1.11787892e+253 1.47872844e-028 7.34486815e+223 1.26594941e-118
7.63858409e+228]
мне нужно чтобы быть случайными целыми числами, соответствующими случайным символам ASCII.
Что я делаю неправильно с помощью этого метода? Есть ли способ сделать это быстрее?
Я нашел мой текущий метод здесь: building an nxn matrix in python numpy, for any n
Я нашел еще один метод, который я не понимаю, но, кажется, быстрее и булькать, если я могу использовать его здесь, я хотел бы. Initialise numpy array of unknown length
Благодарим за любую помощь, которую вы можете предоставить.
Или используйте np.random.randint – tillsten
Спасибо, Этан. Это была проблема. Я бы поднял голову, если бы у меня было достаточно репутации. Полагаю, я должен был заметить проблему, когда он дал мне UnboundLocalError. Я решил сохранить его в списке, потому что я больше знаком с ними и думаю, что будет легче, когда я доберусь до стадии кроссовера генов. – MatthewC
'np.random.randint (0,10, (10,10))' генерирует массив 10x10 случайных целых чисел – hpaulj