Нейронные сети и генетические алгоритмы - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь поиграться с нейронными сетями и генетическими алгоритмами, но у меня есть проблемы.

Итак, задача довольно проста: у меня движущиеся круги, и если они остаются в кадре дольше других, то их приспособленностьлучше, чем другие.

Мой подход таков:

  1. Возьмите 3 лучших бомбардира
  2. Создайте массив из 100 предметов, в котором будет получено количество очков., зависит от процента пригодности лучших 3
  3. Выберите случайный пул генов и скрестите его с другим случайным (из топ3)
  4. 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
...