Я пытаюсь поиграться с нейронными сетями и генетическими алгоритмами, но у меня есть проблемы.
Итак, задача довольно проста: у меня движущиеся круги, и если они остаются в кадре дольше других, то их приспособленностьлучше, чем другие.
Мой подход таков:
- Возьмите 3 лучших бомбардира
- Создайте массив из 100 предметов, в котором будет получено количество очков., зависит от процента пригодности лучших 3
- Выберите случайный пул генов и скрестите его с другим случайным (из топ3)
- Mutate
Весь кроссовер и мутация только изменяют веса нейронов и заданных входных данных.
Теперь вопрос:
Есть ли шанс, я получу какие-нибудь хорошие результаты с этим подходом?
Даже если я просто скопирую лучшего, чтобы заменить всех 20 новых игроков, они будут становиться все хуже (с небольшим «Суперменом» между ними)
Могу ли я даже подойти к этой проблеме таким образом,или я не долженсмешать эти два метода?
Редактировать: Это мой метод кроссовера, который в основном генерирует случайное число, чтобы выбрать количество весов, которые копируются из одного нейрона, пока не переключится на другой.
def crossover(gen_1, gen_2, neuron):
new_genes = dict()
limit = random.randint(0, len(Definitions.array_index)-1)
for x in range(0, limit):
new_genes[Definitions.array_index[x]] = gen_1.neuron[neuron].weights[Definitions.array_index[x]]
for x in range(limit, len(Definitions.array_index)):
new_genes[Definitions.array_index[x]] = gen_2.neuron[neuron].weights[Definitions.array_index[x]]
return new_genes