Snake AI не показывает никаких улучшений - PullRequest
0 голосов
/ 06 мая 2020

Я использовал библиотеку python NEAT для этой программы. Змея может видеть в 8 направлениях, в каждом направлении она ищет, есть ли там еда или стена, или сама себя и расстояние. Всего получается (8x3) 24 входа. Однако программа не показывает никаких улучшений, а только кажется, что со временем становится только хуже. максимальный результат в архиве - 2, это только в 3-м или 4-м поколении, вот и все.

Вот файл конфигурации

[NEAT]
fitness_criterion     = max
fitness_threshold     = 100000000000000000000000000000
pop_size              = 1000
reset_on_extinction   = True

[DefaultGenome]
# node activation options
activation_default      = sigmoid
activation_mutate_rate  = 0.05
activation_options      = sigmoid gauss

# node aggregation options
aggregation_default     = random
aggregation_mutate_rate = 0.05
aggregation_options     = sum product min max mean median maxabs

# node bias options
bias_init_mean          = 0.05
bias_init_stdev         = 1.0
bias_max_value          = 30.0
bias_min_value          = -30.0
bias_mutate_power       = 0.1
bias_mutate_rate        = 0.02
bias_replace_rate       = 0.1

# genome compatibility options
compatibility_disjoint_coefficient = 1.0
compatibility_weight_coefficient   = 0.5

# connection add/remove rates
conn_add_prob           = 0.5
conn_delete_prob        = 0.1

# connection enable options
enabled_default         = True
enabled_mutate_rate     = 0.2

feed_forward            = True
#initial_connection     = unconnected
initial_connection      = partial_nodirect 0.5

# node add/remove rates
node_add_prob           = 0.5
node_delete_prob        = 0.5

# network parameters
num_hidden              = 0
num_inputs              = 24
num_outputs             = 4

# node response options
response_init_mean      = 1.0
response_init_stdev     = 0.05
response_max_value      = 30.0
response_min_value      = -30.0
response_mutate_power   = 0.1
response_mutate_rate    = 0.05
response_replace_rate   = 0.1

# connection weight options
weight_init_mean        = 0.1
weight_init_stdev       = 1.0
weight_max_value        = 30
weight_min_value        = -30
weight_mutate_power     = 0.5
weight_mutate_rate      = 0.05
weight_replace_rate     = 0.1

[DefaultSpeciesSet]
compatibility_threshold = 2.5

[DefaultStagnation]
species_fitness_func = max
max_stagnation       = 50
species_elitism      = 0

[DefaultReproduction]
elitism            = 1
survival_threshold = 0.3

и вот как я рассчитываю фитнес:

if snake.score < 2:
   ge[x].fitness = math.floor(snake.life_time * snake.life_time) * math.pow(2, snake.score)
else:
   ge[x].fitness = math.floor(snake.life_time * snake.life_time)
   ge[x].fitness *= math.pow(2, 10)
   ge[x].fitness *= (snake.score - 1)

может ли кто-нибудь сказать мне, какие изменения мне нужно внести, чтобы он работал?

...