Я не могу заметить очевидную ошибку, но вы делаете вещи действительно сложными, так что, возможно, ошибка скрывается и прячется где-то. Как насчет
def evaluateHelper(self, g):
return sum(a*b for a, b in zip(self.chromosome, self.chomosome[g:]))
это должно вернуть те же значения, которые вы вычисляете в этом тонком цикле (где я думаю, что часть % len...
доказуемо избыточна). Точно так же метод evaluate
кажется созревшим для аналогичного 1-го слоя. Но все равно ...
Существует потенциальная нечетная проблема: формулы в статье, на которую вы указываете, суммируют для g от 1 до N-1 , включая - вы используете range(1, len(...)-1)
, причем N-1
это исключено . Может ли это быть корнем проблемы, которую вы наблюдаете?