Я реализую генетический алгоритм для оптимизации функций тестирования, таких как Easom, Ackley и Three-Hump Camel. Однако он изо всех сил пытается достичь глобального минимума и вместо этого возвращает значения, которые находятся далеко (например, для функции Easom [1.19, 0.81] с пригодностью -2.51e-05 вместо f(π, π) = - 1). Точно так же результаты для функции Экли также не идеальны (например, [-0,10, -0,007] с пригодностью 0,56 вместо f(0, 0) = 0).
Вот часть моего генетического алгоритма, в которой, как я подозреваю, проблемы с выбором родителей, отбором потомков для новой популяции или настройкой параметров могут привести к плохой сходимости. Выбор родителей
for _ in range(pop_size // 2):
# Parent selection
parent1, parent2 = select_parents(
binary_population, fitness, parent_selection_method
)
# (crossover, mutation, inversion)
child1, child2 = process_children(
parent1,
parent2,
crossover_type,
mutation_rate,
inversion_rate,
CROSSOVER_CHANCE,
)
# convert back to float
decoded_child1 = decode_individual(child1, limits, n_bits)
decoded_child2 = decode_individual(child2, limits, n_bits)
children.append(decoded_child1)
children.append(decoded_child2)
# Children selection for new population
population = form_new_population(
population, children, population_formation, func
)
# Evaluate fitness for the new population
fitness = evaluate_population(population, func)
current_best = min(fitness)
# the best solution for the current iteration
best_solution_history.append(population[fitness.index(current_best)])
fitness_history.append(current_best)
iteration += 1
overall_best = min(fitness_history)
best_overall_solution = best_solution_history[fitness_history.index(overall_best)]
Я разместил полный код с графиком, показывающим значения пригодности для разных поколений, на своем Github.
Какие факторы мне следует учитывать при настройке моего алгоритма? улучшить сходимость? Существуют ли известные передовые методы настройки параметров таких функций, как Easom?
Я реализую генетический алгоритм для оптимизации функций тестирования, таких как Easom, Ackley и Three-Hump Camel. Однако он изо всех сил пытается достичь глобального минимума и вместо этого возвращает значения, которые находятся далеко (например, для функции Easom [1.19, 0.81] с пригодностью -2.51e-05 вместо f(π, π) = - 1). Точно так же результаты для функции Экли также не идеальны (например, [-0,10, -0,007] с пригодностью 0,56 вместо f(0, 0) = 0). Вот часть моего генетического алгоритма, в которой, как я подозреваю, проблемы с выбором родителей, отбором потомков для новой популяции или настройкой параметров могут привести к плохой сходимости. [b]Выбор родителей[/b] [code]def select_parents(population, fitness, method): if method == "PM": # Panmixia return random.sample(population, k=2) elif ( method == "SE" ): # Selective based on fitness: Parents with fitness below average fitness avg_fitness = np.mean(fitness) parents = [ind for ind, fit in zip(population, fitness) if fit < avg_fitness] if len(parents) < 2: if len(parents) == 0: return random.sample( population, k=2 ) # Fallback to random sampling from the entire population else: # return parents[0], parents[0] return parents[0], random.choice(population) return random.sample(parents, k=2) elif method == "ID": # Inbreeding parent1 = random.choice(population) parent2 = min(population, key=lambda x: hamming_distance(parent1, x)) return parent1, parent2 elif method == "OD": # Outbreeding parent1 = random.choice(population) parent2 = max(population, key=lambda x: hamming_distance(parent1, x)) return parent1, parent2 [/code] [b]Выбор детей[/b] [code]# Simple selection (SS), Selection with displacement (SD), Elite selection (ES) def form_new_population(population, offspring, method, fitness_func): if method == "SS": # Simple selection return offspring elif method == "SD": # Selection with displacement (unique individuals) # Convert lists to tuples to make them hashable for set operations unique_offspring = list(map(tuple, offspring)) unique_offspring = list(set(unique_offspring)) unique_offspring = list(map(list, unique_offspring))
overall_best = min(fitness_history) best_overall_solution = best_solution_history[fitness_history.index(overall_best)] [/code] Я разместил полный код с графиком, показывающим значения пригодности для разных поколений, на своем Github. Какие факторы мне следует учитывать при настройке моего алгоритма? улучшить сходимость? Существуют ли известные передовые методы настройки параметров таких функций, как Easom?
Я создал программу, которая учится играть в Connect4, используя нейронную сеть и генетические алгоритмы.
Она начинается с нейронных сетей случайного веса, позволяет каждой сети играть друг против друга. сети один раз, выбирает нейронные сети с...
Я пытаюсь реализовать генетический алгоритм, чтобы добраться из точки А в точку Б на машине в Python. Так что это скорее подтверждение концепции.
import sys
import math
import random
Я пытаюсь реализовать генетический алгоритм, чтобы добраться из точки А в точку Б на машине в Python. Так что это скорее подтверждение концепции.
import sys
import math
import random
Итак, нам сказали получить детерминированный генетический алгоритм для решения проблемы N-ферзя из Google или GitHub и проанализировать его. В одном из наших требований сказано провести их гонку и построить график
Я пытаюсь распределить модули Kubernetes по узлам с помощью генетического алгоритма, где каждый модуль назначается одному узлу. Ниже моя реализация:
from string import ascii_lowercase
import numpy as np
import random
from itertools import compress...