Нейронная сеть и генетический алгоритм Connect4Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Нейронная сеть и генетический алгоритм Connect4

Сообщение Anonymous »

Я создал программу, которая учится играть в Connect4, используя нейронную сеть и генетические алгоритмы.
Она начинается с нейронных сетей случайного веса, позволяет каждой сети играть друг против друга. сети один раз, выбирает нейронные сети с наибольшим выигрышем (те, которые выиграли больше всего игр), размножает и мутирует их и создает новую популяцию для следующего поколения.
Похоже, что это не так. научитесь хорошо играть в игру. Я подумал, что, возможно, моя проблема в том, что оценка физической подготовки слишком сильно зависит от других сетей («глупость» некоторых сетей). Я имею в виду, давайте возьмем сеть A, которая играет против B, C, D. Если B, C, D действительно плохи, это дает действительно хороший показатель приспособленности для сети A. Это также приводит к тому, что приспособленность моих первых поколений становится довольно высокой, как если бы сеть X всегда помещала в один и тот же столбец, она выигрывает большую часть игр против других. «глупая» сеть, в которой фрагменты размещаются в нескольких столбцах.
Как бы вы решили эту проблему?
Вот упрощенная версия моих ключевых функций. :
def create_model(row_count, column_count):
model = Sequential()
model.add(Flatten(input_shape=(row_count, column_count)))
model.add(Dense(64, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(column_count, activation='softmax'))
return model

def crossover(model1, model2):
weights1 = model1.get_weights()
weights2 = model2.get_weights()
new_weights = [np.where(np.random.rand(*w1.shape) < 0.5, w1, w2) for w1, w2 in zip(weights1, weights2)]
offspring = create_model(ROW_COUNT, COLUMN_COUNT)
offspring.set_weights(new_weights)
return offspring

def mutate(model, mutation_rate):
weights = model.get_weights()
new_weights = [w + np.random.randn(*w.shape) * 0.2 if np.random.rand() < mutation_rate else w for w in weights]
model.set_weights(new_weights)

def evaluate_models(models):
# Play games and calculate scores
pass

def next_generation(population, top_k):
scores, _ = evaluate_models(population)
sorted_indices = np.argsort(scores)[::-1]
best_indices = sorted_indices[:top_k]
new_generation = [population for i in best_indices]
while len(new_generation) < len(population):
parents = random.sample(new_generation[:top_k], 2)
offspring = crossover(parents[0], parents[1])
mutate(offspring, 0.2)
new_generation.append(offspring)
return new_generation

def genetic_algorithm():
population = [create_model(ROW_COUNT, COLUMN_COUNT) for _ in range(50)]
for generation in range(100):
population = next_generation(population, 5)
return population[0]


Подробнее здесь: https://stackoverflow.com/questions/786 ... m-connect4
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Генетический алгоритм - траектория автомобиля
    Anonymous » » в форуме Python
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Генетический алгоритм - траектория автомобиля
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Проблема N Queen Генетический алгоритм против детерминированного алгоритма
    Anonymous » » в форуме JAVA
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Генетический алгоритм распределения Kubernetes
    Anonymous » » в форуме Python
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Генетический алгоритм распределения Kubernetes
    Anonymous » » в форуме Python
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»