Ограниченный выбор турнира

Мне нужно реализовать ограниченный выбор турнира. Этот метод состоит в сравнении каждой особи потомства со случайной группой особей. Выберите тот, который больше всего похож на особь-потомка, и выберите лучшего из двух, чтобы включить его в новую популяцию.

У меня есть все операторы, но я не знаю, как это сделать:

def reduccion(self, hijos):

    for hijo in hijos:
        torneo = random.sample(self.generacion, 5)
        for i in range(0,len(torneo)):
            distancia=self.levenshtein(hijo.fenotipo, torneo[i].fenotipo)
            print(distancia)

self.generacion = фактическое население

self.levenshtein = расстояние между двумя строками разной длины


person user3046679    schedule 28.11.2013    source источник


Ответы (1)


Таким образом, distancia дает вам расстояние между hijo и данным членом населения. Особь, наиболее похожая на потомство, будет иметь наименьшее расстояние. Простейший способ сделать это — инициализировать переменные перед внутренним циклом for, чтобы отслеживать наиболее похожие из уже виденных. Затем вам просто нужно сравнить приспособленность наиболее похожего индивидуума с приспособленностью hijo и включить наиболее приспособленного в следующее поколение. Вот какой-то псевдо-код для этого:

def reduccion(self, hijos):

    for hijo in hijos:
        torneo = random.sample(self.generacion, 5)

        mostSimilar = torneo[0] #Initialize this to be the 
                                #first population member in the tournament
        lowestDistance = self.levenshtein(hijo.fenotipo, mostSimilar.fenotipo)

        for i in range(1,len(torneo)): #now we've already looked at #1
            distancia=self.levenshtein(hijo.fenotipo, torneo[i].fenotipo)

            if distancia < lowestDistance:    #see if this distance is lower
                lowestDistance = distancia    #than what we've seen before
                mostSimilar = torneo[i]

        if mostSimilar.fitness < hijo.fitness:   #compare the fitnesses
             add hijo to next generation
        else:
             add mostSimilar to next generation
person seaotternerd    schedule 15.09.2014