Тот, кто не хочет скачивать библиотеку, тот может скачать darwinian.py и импортировать класс из него!
Эта библиотека Python реализует "Дарвиновский" Генетический Алгоритм (GA) для задач оптимизации. GA симулирует процесс естественного отбора, где наиболее приспособленные особи выбираются для воспроизводства, чтобы произвести потомство следующего поколения.
- Генетическое представление: Каждая особь в популяции представлена в виде списка генов.
- Инициализация популяции: Популяция инициализируется случайными особями, но возможние значения генов могут задоваться пользователем.
- Функция приспособленности: Пользовательская функция для оценки приспособленности особи.
- Выбор: Реализованы три типа методов выбора: Лучшие Родители, Турнир и Рулетка.
- Скрещивание: Метод для объединения генов двух родителей для создания новой особи.
- Мутация: Метод для внесения небольших изменений в особи для поддержания разнообразия в популяции.
-
setup
: Инициализирует GA с необходимыми параметрами. -
tournament_selection
: Выбирает лучшую особь из случайно выбранного подмножества популяции. -
roulette_selection
: Выбирает особь из популяции с использованием выбора рулеткой. -
crossover
: Объединяет гены двух особей для создания новой. -
mutate
: Вносит небольшие изменения в особь. -
constructor
: Запускает GA с использованием указанного метода.
-
constructor
: Запускает GA с использованием указанного метода. Аргументы: selection_method (str, optional): description. Defaults to "bestparents". MaxOrMin (bool, optional): description. Defaults to True. how_much (int, optional): description. Defaults to 5. print_pop (bool, optional): description. Defaults to False.Ща покажу как этим пользоваться:
- bestparents - выбираем двух лучших родителей
- tournament - выбираем двух родителей с помощью турнирного отбора
- roulette - выбираем двух родителей с помощью рулетки
При турнирном отборе можно задать параметр tournament_size, по умолчанию равен 2
Для использования этого модуля вам нужно определить функцию приспособленности, которая оценивает приспособленность особи. Затем вы можете инициализировать GA с необходимыми параметрами и запустить его с использованием одного из методов выбора.
from darwinian import Darwinian_GA
import random
# Определите функцию приспособленности
def fitness(*individual):
return sum(individual[0])
# Инициализируйте GA
ga = Darwinian_GA()
ga.setup(len_gen=10, pop_size=100, mutation_rate=0.1, crossover_chance=0.5, epochs=100, fitness_func=fitness)
# Запустите GA
best_individuals = ga.constructor()
print(best_individuals[0])
GA будет развивать популяцию в течение указанного количества эпох и возвращать лучших особей из окончательной популяции. Вы также можете вывести популяцию на каждой эпохе, чтобы наблюдать за прогрессом GA.
ga.constructor(print_pop=True)
Эта функция генерирует гены индивида. По умолчанию, генерируются случайное целое число в диапазоне от 0 до 1.
Получается -> [0, 1, 0, 1, 0, 1, 0, 1, 0, 1]
Ее можно переопределить:
from darwinian import Darwinian_GA
import random
def fitness(*individual):
return sum(individual[0])
# Инициализируйте GA
ga = Darwinian_GA()
ga.setup(len_gen=10, pop_size=100, mutation_rate=0.1, crossover_chance=0.5, epochs=100, fitness_func=fitness, rand_func= lambda: random.randint(0, 5))
# Запустите GA
best_individuals = ga.constructor()
print(best_individuals[0])
результат будет
([5, 5, 5, 5, 5, 5, 5, 5, 5, 5], 50)
Если вы хотите чтоб приспособленность была минимизирована:
то вы можете использовать параметр MaxOrMin=False
best_individuals = ga.constructor(MaxOrMin=False)
print(best_individuals[0])
при прошлом примере ответ будет:
([0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 0)