Что не так с циклом?
for person in starting_population:
person.fitness = person.a1*person.a2/person.a3*person.a4 #Add fitness to object
Также обратите внимание, порядок операций:
((a1*a2)/a3)*a4)
на случай, если вы имели в виду что-то другое. Вы можете подумать о том, чтобы сделать фитнес методом индивидуума:
class Individual(object):
def __init__(self, a1, a2, a3, a4):
self.a1 = a1
self.a2 = a2
self.a3 = a3
self.a4 = a4
def fitness(self,x):
fitness = self.a1*self.a2/self.a3*self.a4
return fitness
starting_population = list()
for i in range (population):
a1 = random.randint(1,10)
a2 = random.randint(1,10)
a3 = random.randint(1,10)
a4 = random.randint(1,10)
starting_population.append(Individual(a1,a2,a3,a4))
, чтобы вы могли немедленно вызвать starting_population[i].fitness()
или вычислить значение в __init__
и сделать его полем.
Другое решение, убравшее ясность объекта в коде в пользу массива numpy
для скорости:
import numpy.random as rnd
rnd.seed(78943598743)
starting_population=rnd.randint(1,10,size=100*4).reshape(100,4) #100 rows, 4 columns, each row a person
fitness_vector = starting_population[:,0]*starting_population[:,1]/starting_population[:,2]*starting_population[:,3]