#python #genetic-algorithm
Вопрос:
Я использую пакет Gene AI в python для тестирования генетического алгоритма (https://github.com/diogomatoschaves/geneal/blob/master/geneal/genetic_algorithms/genetic_algorithm_base.py).
Мне нужна моя собственная функция фитнеса, поэтому я написал
def my_fitness(chromosome):
fitness = mean_absolute_percentage_error(chromosome, [0.5 0.5 0.5 0.5])
return fitness
А затем последовал документации и написал ниже код:
from geneal.genetic_algorithms import ContinuousGenAlgSolver
from geneal.applications.fitness_functions.continuous import fitness_functions_continuous
solver = ContinuousGenAlgSolver(
n_genes=4,
fitness_function=my_fitness(chromosome),
pop_size=10,
max_gen=200,
mutation_rate=0.1,
selection_rate=0.6,
selection_strategy="roulette_wheel",
problem_type=float, # Defines the possible values as float numbers
variables_limits=(-10, 10) # Defines the limits of all variables between -10 and 10.
# Alternatively one can pass an array of tuples defining the limits
# for each variable: [(-10, 10), (0, 5), (0, 5), (-20, 20)]
)
solver.solve()
Непонятно, как я могу использовать свою собственную функцию фитнеса. получаю ошибку, что хромосома не определена (очевидно!).
как использовать мою собственную функцию фитнеса с этим пакетом. пожалуйста, покажи.
Ответ №1:
Функция фитнеса имеет 2 требования:
- Ему должен быть передан один и только один аргумент — хромосома. Хромосома представляет собой массив чисел numpy из 1 и 0, если это решатель бинарного генетического алгоритма, или массив чисел numpy от 0 до 9, если это решатель непрерывного генетического алгоритма. Размер этого массива определяется количеством генов, с помощью которых вы инициализируете решатель, и каждая позиция в массиве соответствует другой переменной.
- Он должен возвращать реальное число.
Внутренняя работа этой функции зависит от вас, чтобы решить. А затем вы передаете его объекту во время инициализации, например:
from geneal.genetic_algorithms import ContinuousGenAlgSolver
from geneal.applications.fitness_functions.continuous import fitness_functions_continuous
solver = ContinuousGenAlgSolver(
n_genes=4,
fitness_function=my_fitness,
pop_size=10,
max_gen=200,
mutation_rate=0.1,
selection_rate=0.6,
selection_strategy="roulette_wheel",
problem_type=float, # Defines the possible values as float numbers
variables_limits=(-10, 10) # Defines the limits of all variables between -10 and 10.
# Alternatively one can pass an array of tuples defining the limits
# for each variable: [(-10, 10), (0, 5), (0, 5), (-20, 20)]
)
Я предлагаю вам ознакомиться с примерами, представленными в пакете, чтобы получить лучшее представление о том, как определить пользовательскую функцию фитнеса: примеры