Darwinian

“Darwinian” - это модуль Python, который реализует Дарвиновский Генетический Алгоритм (GA) для задач оптимизации. GA симулирует процесс естественного отбора, где наиболее приспособленные особи выбираются для воспроизводства, чтобы произвести потомство следующего поколения.


License
MIT
Install
pip install Darwinian==0.0.5.4

Documentation

logo

Ссылка на PyPi

Тот, кто не хочет скачивать библиотеку, тот может скачать darwinian.py и импортировать класс из него!

Вдохновлен EasyGa ❤️

ссылка на их проект

Darwinian GA

Эта библиотека Python реализует "Дарвиновский" Генетический Алгоритм (GA) для задач оптимизации. GA симулирует процесс естественного отбора, где наиболее приспособленные особи выбираются для воспроизводства, чтобы произвести потомство следующего поколения.

Особенности

  • Генетическое представление: Каждая особь в популяции представлена в виде списка генов.
  • Инициализация популяции: Популяция инициализируется случайными особями, но возможние значения генов могут задоваться пользователем.
  • Функция приспособленности: Пользовательская функция для оценки приспособленности особи.
  • Выбор: Реализованы три типа методов выбора: Лучшие Родители, Турнир и Рулетка.
  • Скрещивание: Метод для объединения генов двух родителей для создания новой особи.
  • Мутация: Метод для внесения небольших изменений в особи для поддержания разнообразия в популяции.

Методы

  • setup: Инициализирует GA с необходимыми параметрами.
  • tournament_selection: Выбирает лучшую особь из случайно выбранного подмножества популяции.
  • roulette_selection: Выбирает особь из популяции с использованием выбора рулеткой.
  • crossover: Объединяет гены двух особей для создания новой.
  • mutate: Вносит небольшие изменения в особь.
  • constructor: Запускает GA с использованием указанного метода.

constructor

  • 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.

    Ща покажу как этим пользоваться:

    1. bestparents - выбираем двух лучших родителей
    2. tournament - выбираем двух родителей с помощью турнирного отбора
    3. 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)

Кастомизация функции генерации особи rand_func

Эта функция генерирует гены индивида. По умолчанию, генерируются случайное целое число в диапазоне от 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)