У меня есть простой генетический алгоритм, который должен достичь оптимальной точки функции ловушки, которая определяется следующим образом:Генетический алгоритм
def R(x):
n = len(x)
m = int(math.ceil(n/3))
s = sum(x)
if (s==n):
return 2*n*n,
elif (s<(n-m)):
return n*s-B(x),
else:
return 0,
def B(x):
i = 0
n = len(x)
mbs = 0
# loops over all the variables
while (i<n):
k = i
while (k<n and x[k]==0):
k = k + 1
#print("k="+str(k))
j = k
while (j<n and x[j]==1):
j = j + 1
if (j-k>mbs):
mbs = j-k
#print("j="+str(j))
i = j
return mbs
Я думал, чтобы увеличить намного размер поп и «надежда» генерировать с random.seed()
оптимальным индивидуумом в первом поколении, а затем просто распространять количество его копий. Для этого я просто рассмотрю выбор турнира с «большим» окном для турнира.
Это решение работает только с 5 и 10 атрибутами, но не работает с 30. Дело в том, что я не знаю, как решить случай с 30 атрибутами. Надеясь, что кто-то может мне помочь.
Несколько вещей, которые могли бы помочь прояснить ваш вопрос здесь. 1. Не могли бы вы описать, что такое x? Это похоже на массив целых чисел для меня, основываясь на том, как вы его используете, правильно ли? 2. Что такое B (x)? 3. Если вы надеетесь создать оптимального человека в одном поколении, почему вы пытаетесь использовать генетический алгоритм? Это поражает точку использования генетического алгоритма в первую очередь –
Я обновляю сообщение с помощью определения B (x). Человек является вектором двоичных генов. Оптимальное решение дается всеми, но функция пригодности позволяет GA идти в таком направлении, только если вектор как минимум 2/3 значений, равных единице. В противном случае это приведет вас к локальной оптимальной точке.Я не знаю, как избежать такого локального оптимального. – LeoCella