- Регистрация
- 23 Август 2023
- Сообщения
- 3 016
- Лучшие ответы
- 0
- Реакции
- 0
- Баллы
- 51
Offline
		
		
	Автор: Шерстнев Павел
	
	
		
		
	
	
		
			
		
		 
	
Эволюционный цикл. Источник: яндекс картинки
“This preservation of favourable individual differences and variations, and the destruction of those which are injurious, I have called Natural Selection, or the Survival of the Fittest.” — Charles Darwin, On the Origin of Species, 1872, Chapter 4: Natural Selection
Эволюционные алгоритмы — это часть области искусственного интеллекта, которую называют вычислительный интеллект (Computational Intelligence). В отличие от «классического» машинного обучения, где всё завязано на строгих формулах и градиентах, вычислительный интеллект работает ближе к природе — через адаптацию, самоорганизацию и отбор. Если сказать проще, это способ искать оптимальные решения — максимумы и минимумы функций — по тем же законам, по которым эволюция ищет приспособленные формы жизни. Здесь решения «размножаются», «мутируют» и «соревнуются» между собой, а выживают те, кто ближе к цели.
Красиво? Да. А главное — это работает. С помощью эволюционных алгоритмов можно оптимизировать всё что угодно: от структуры нейросетей до формы деталей в инженерных системах или гиперпараметров моделей. Эволюционные алгоритмы применяются не только для оптимизации функций и нейросетей. Они подходят для AutoML, поиска архитектур (NAS) и настройки сложных AI‑пайплайнов — в том числе RAG‑систем и мультиагентных решений. И это не только теория — крупные исследовательские группы, включая Google DeepMind, уже применяют эволюционные методы даже в связке с LLM.
Когда начинаются трудности
Во времена моей учёбы в магистратуре системного анализа мы активно изучали эволюционные алгоритмы и их применение в машинном обучении. Самым сложным оказывалась практическая часть: существующие фреймворки либо устарели, либо требовали слишком много дополнительного кода. В итоге большую часть алгоритмов приходилось писать вручную. Особенно удивляло, что почти все библиотеки ограничиваются классическими реализациями, тогда как более современные подходы — вроде самоконфигурирования или адаптации на основе истории успеха — просто нельзя применить «из коробки». И это проблема не про «студентов и исследования». В индустрии ситуация такая же: современные эволюционные методы есть на Arxiv, в презентациях и демо, но не в репозиториях, которые можно встроить в пайплайн.
Так появился Thefittest
	
	
		
		
	
	
		
			
		
		 
	
Логотип проекта
Thefittest (от англ. «the fittest», «наиболее приспособленный») — open‑source библиотека или фреймворк на Python из области вычислительного интеллекта, стоящей на пересечении оптимизации и искусственного интеллекта. Она объединяет эволюционные алгоритмы и инструменты для их применения в задачах машинного обучения.
Изначально я собирал в ней свои собственный рабочие реализации, чтобы не терять код и не переписывать одинаковые части заново. Но проект быстро вырос. Как человек, много раз сталкивавшийся с отсутствием современных готовых решений, я собрал всё в одном месте: сначала локально, потом на GitHub. В какой‑то момент стало очевидно: если этот код помогает мне, он может помочь и другим. Так Thefittest стал открытым проектом. Позже я выложил его на PyPI, чтобы устанавливать можно было одной командой:
pip install thefittest
С этого момента библиотека перестала быть «для себя» и стала «для других». И тут всё резко усложнилось: понадобились документация, тесты, CI/CD, скорость, совместимость с экосистемой ML. В какой‑то момент я понял простую вещь: написать алгоритмы — это половина дела. Чтобы библиотекой реально могли пользоваться, нужно построить вокруг неё инфраструктуру. Минимальный набор оказался таким:
Для пользователя это просто «установил и работает», а для разработчика — целая экосистема вокруг библиотеки. Примерно так выглядел технологический стек Thefittest на момент релиза:
	
	
		
		
	
	
		
			
		
		 
	
Технологический стек Thefittest
Со временем Thefittest перестал быть просто «папкой с кодом». Сейчас это примерно 13 000 строк Python, из которых большая часть — основной функционал, а четверть — тесты. Проект тестируется на трёх версиях Python (3.9–3.11), проходят автоматические проверки качества кода, а покрытие уходит в Codecov.
Производительность без C
Эволюционные алгоритмы могут считать десятки тысяч итераций, огромные популяции и модели с сотнями параметров. На чистом Python это превращается в мучение. Чтобы библиотека оставалась быстрой и масштабируемой, я переписал критичные участки (скрещивание, мутации, обновление популяций, вычисления) с помощью Numba.
Это дало производительность, близкую к C/C++, но без ручной компиляции, зависимостей и боли с окружением. Важно, что такой подход позволяет применять Thefittest не только в исследовательских экспериментах, но и в реальных ML‑пайплайнах — от оптимизации гиперпараметров до NAS и промышленных задач.
Например, вот реальный оператор двухточечного скрещивания из библиотеки:
@njit(int8[:](int8[:, :], float64[:], float64[:]))
def two_point_crossover(
individs: NDArray[np.byte],
fitness: NDArray[np.float64], rank: NDArray[np.float64]
) -> NDArray[np.byte]:
      
size = len(individs[0])
c_points = random_sample(range_size=size, quantity=2, replace=False)
c_points = sorted(c_points)
    
if flip_coin(0.5):
offspring = individs[0].copy()
other_individ = individs[1]
else:
offspring = individs[1].copy()
other_individ = individs[0]
    
for i in range(size):
if c_points[0] <= i <= c_points[1]:
offspring = other_individ
    
return offspring
Всего один декоратор превращает эту функцию из обычного Python‑кода в JIT‑компилированную, работающую в разы быстрее.
Thefittest в действии
Большинство известных библиотек по эволюционным алгоритмам ограничиваются классическими методами и узким кругом задач. Thefittest задумывался иначе — как полноценный инструмент для прикладного искусственного интеллекта: его можно использовать не только в оптимизации функций, но и в реальных ML‑пайплайнах, AutoML, построении моделей и настройке сложных систем.
Сейчас в библиотеке реализовано около 12 эволюционных алгоритмов, работающих с непрерывными, целочисленными и категориальными параметрами. Семь из них раньше не были доступны в open‑source в рабочем, продакшен‑готовом виде: в лучшем случае они существовали только в статьях и псевдокоде.
Их можно применять прямо «из коробки» — для символьной регрессии, автоматического формирования архитектуры нейросетей, оптимизации гиперпараметров и других задач, где классические методы плохо работают или просто не подходят.
	
	
		
		
	
	
		
			
		
		 
	
Дерево реализованных методов
Интерфейс
Когда я только начинал работать с эволюционными алгоритмами, меня всегда удивляло, как многие используют DEAP. Это отличный фреймворк, но по сути — конструктор: чтобы собрать рабочий алгоритм, нужно вручную соединять блоки, писать свой пайплайн, настраивать операторы. На практике это часто превращается в копирование чужих примеров, чтобы «хоть как‑то запустить» оптимизацию.
В Thefittest я решил пойти другим путём — сделать всё максимально просто и готовым к применению. Любой алгоритм можно запустить как полноценный оптимизатор: достаточно передать целевую функцию как обычную Python‑функцию и указать количество итераций.
При этом возможности остаются гибкими: можно менять параметры, выбирать стратегии селекции, задавать оператор скрещивания, передавать callback‑функции. Всё это в привычном для Python‑разработчика формате, без лишнего кода и обёрток.
	
	
		
		
	
	
		
			
		
		 
	
Сравнение "размера" вызова генетического алгоритма
Совместимость со scikit-learn
Одно из ключевых требований к библиотекам машинного обучения на Python — совместимость со scikit‑learn. Это негласный стандарт всей экосистемы: знакомые методы fit(), predict(), score(), единые подходы к API и десятки инструментов.
Если модель поддерживает API sklearn, она сразу попадает в готовую инфраструктуру — кросс‑валидация, пайплайны, стекинг, автоматический подбор гиперпараметров.
В Thefittest это реализовано так: например, GeneticProgrammingRegressor можно использовать как обычную модель из sklearn — включать в стекинг, вызывать fit(), predict(), считать метрики и комбинировать с любыми другими алгоритмами.
from sklearn.ensemble import StackingRegressor
from thefittest.regressors import GeneticProgrammingRegressor
from thefittest.optimizers import SelfCGP
from sklearn.metrics import mean_squared_error, r2_score
# Конечная модель (GeneticProgrammingRegressor) импортируется из библиотеки thefittest
final_model = GeneticProgrammingRegressor(
n_iter=200,
pop_size=500,
optimizer=SelfCGP,
optimizer_args={"show_progress_each": 10, "keep_history": True, "max_level": 5},
)
# Создаем стэкинг-регрессор
stacking_regressor = StackingRegressor(
estimators=base_models, # Базовые модели в ансамбле стекинга
final_estimator=final_model # В качестве мета-модели используется GeneticProgrammingRegressor из thefittest
)
# Обучаем и оцениваем стэкинг-регрессор
stacking_regressor.fit(X_train, y_train)
y_pred_stack = stacking_regressor.predict(X_test)
# Вычисляем метрики
stacking_mse = mean_squared_error(y_test, y_pred_stack)
stacking_r2 = r2_score(y_test, y_pred_stack)
# Выводим результаты
print("\nStacking model:")
print(f"MSE: {stacking_mse:.4f}, R2: {stacking_r2:.4f}")
По сути, Thefittest добавляет в экосистему sklearn новую категорию моделей — эволюционные, которые не только оптимизируют параметры, но и выводят на уровень автоматизации процессов машинного обучения.
Совместимость с PyTorch и обучение на GPU
Если для классических ML-моделей ключевым стандартом является совместимость со scikit-learn, то для нейросетей — возможность обучения на GPU. Поэтому в Thefittest добавлена интеграция с PyTorch: эволюционные алгоритмы оптимизируют структуру модели, а веса обучаются с помощью стандартных оптимизаторов torch.optim на GPU.
Это позволяет использовать гибридный подход: эволюция отвечает за архитектуру и гиперпараметры, а градиентные методы — за точность. При этом всё остаётся в привычном для Python формате — без дополнительных обёрток и «ручных» интерфейсов.
from thefittest.optimizers import SelfCGP
from thefittest.classifiers import GeneticProgrammingNeuralNetClassifier
from thefittest.benchmarks import IrisDataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import minmax_scale
import torch
import torch.optim as optim
# Данные
data = IrisDataset()
X, y = minmax_scale(data.get_X()), data.get_y()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
# Автоматический выбор устройства
device = "cuda" if torch.cuda.is_available() else "cpu"
model = GeneticProgrammingNeuralNetClassifier(
n_iter=10,
pop_size=10,
optimizer=SelfCGP,
weights_optimizer=optim.Adam,
weights_optimizer_args={"iters": 1000, "lr": 0.01},
device=device
)
model.fit(X_train, y_train)
preds = model.predict(X_test)
Не просто библиотека, а технология
В основе проекта моя диссертационная работа. В ходе исследований я разработал модификации эволюционных алгоритмов, которые автоматически подстраивают собственные параметры в процессе работы. Это решает главную проблему классических ГА и ГП — необходимость ручной настройки и хрупкость при изменении свойств задачи. Самоадаптация делает алгоритмы устойчивыми, повышает точность и позволяет применять их в реальных инженерных сценариях. Часть этих методов уже реализована в Thefittest, часть — в процессе интеграции. Среди них:
Эти алгоритмы впервые будут доступны в открытом виде. На основе Thefittest уже создано шесть программных систем, зарегистрированных в Роспатенте. Некоторые примеры решаемых задач:
Краткосрочный прогноз силы ветра на морском побережье
Построена гибридная модель: автоматически спроектированный ансамбль нейросетей + интерпретируемая нечёткая логика, обе части формируются самоконфигурируемыми эволюционными алгоритмами. Подход ориентирован на оперативный прогноз на горизонте 1–3 часа с балансом между качеством и объяснимостью для практического применения.
Моделирование акустических характеристик древесных панелей
Разработана программная система, автоматически проектирующая интерпретируемые модели звукового давления с помощью самоконфигурируемых эволюционных алгоритмов. Система позволяет прогнозировать звукоизоляционные свойства древесных панелей по технологическим параметрам.
Ключевой эффект этой технологии в том, что модели формируются автоматически — без ручного подбора параметров и без участия эксперта по машинному обучению или эксперта предметной области. Самоконфигурируемые эволюционные алгоритмы сами оптимизируют структуру, параметры и архитектуру моделей, а также меняют стратегию оптимизации в процессе поиска решения, что позволяет использовать их для моделирования сложных систем даже тем, кто не занимается ML профессионально.
Признание и популяризация
Проект выходит за рамки личного инструмента: я регулярно показываю его на научных и инженерных мероприятиях, он используется в прикладных задачах и получает независимые оценки. За все время существования библиотека и связанная с ней работа получили признание на ряде профильных мероприятий:
Отдельно я особенно горжусь победой в премии «Гравитация 2025» — одном из крупных российских конкурсов в области ИИ. Thefittest победил в номинации «Алгоритмы и программные решения в области ИИ и больших данных». Для меня это подтверждение того, что библиотека ценна не только как учебно‑исследовательский инструмент, но и как технологическая разработка, признанная экспертами.
	
	
		
		
	
	
		
			
		
		 
	
Победа в гравитации
Куда дальше
Конечно, это не законченный продукт и не «идеальная» библиотека, а всё, что описано выше, по сути лишь уверенный старт. За время презентаций и выступлений я много раз слышал критику — и в большинстве случаев она была обоснованной. Например, в некоторых алгоритмах я действительно «изобретал велосипед». Вместо переписывания чужих реализаций с нуля нужно учиться интегрировать их в экосистему библиотеки. Это позволит запускать, например, L-SRTDE прямо из Thefittest, без переписывания исходников. Это и правильнее, и эффективнее, и полезнее для пользователей.
Так зачем же я пишу свою open-source библиотеку эволюционных алгоритмов?
Когда‑то Thefittest был просто рабочим набором инструментов, собранным «для себя». Сейчас это технология, которую можно интегрировать в реальные AI‑проекты: оптимизацию моделей, AutoML, построение нейросетевых архитектур, символьную регрессию и прогнозирование сложных систем. Поэтому главный ориентир — не просто публиковать код, а доводить решения до практической применимости.
Чтобы упростить старт, уже подготовлены рабочие примеры: запуск оптимизаторов, автоматическое построение моделей, подключение собственных операторов, использование через API scikit‑learn, а также Jupyter‑ноутбук на Kaggle, который можно запустить без настройки окружения. Это делает технологию доступной разработчикам, инженерам и исследовательским группам, даже без глубокой подготовки в ML. Полноценная документация сейчас в разработке — я постепенно переношу туда инструкции, типовые сценарии и примеры.
Код открыт не только на GitHub, но и на GitVerse — это шаг к тому, чтобы библиотека была доступна внутри российских AI‑проектов и могла развиваться как часть отечественной научно‑технологической инфраструктуры.
Если кратко: цель Thefittest — вывести эволюционные алгоритмы из статей и лабораторных прототипов в прикладной уровень, где ими можно действительно пользоваться. Не как идеей, а как инструментом.
								 
	Эволюционный цикл. Источник: яндекс картинки
“This preservation of favourable individual differences and variations, and the destruction of those which are injurious, I have called Natural Selection, or the Survival of the Fittest.” — Charles Darwin, On the Origin of Species, 1872, Chapter 4: Natural Selection
Эволюционные алгоритмы — это часть области искусственного интеллекта, которую называют вычислительный интеллект (Computational Intelligence). В отличие от «классического» машинного обучения, где всё завязано на строгих формулах и градиентах, вычислительный интеллект работает ближе к природе — через адаптацию, самоорганизацию и отбор. Если сказать проще, это способ искать оптимальные решения — максимумы и минимумы функций — по тем же законам, по которым эволюция ищет приспособленные формы жизни. Здесь решения «размножаются», «мутируют» и «соревнуются» между собой, а выживают те, кто ближе к цели.
Красиво? Да. А главное — это работает. С помощью эволюционных алгоритмов можно оптимизировать всё что угодно: от структуры нейросетей до формы деталей в инженерных системах или гиперпараметров моделей. Эволюционные алгоритмы применяются не только для оптимизации функций и нейросетей. Они подходят для AutoML, поиска архитектур (NAS) и настройки сложных AI‑пайплайнов — в том числе RAG‑систем и мультиагентных решений. И это не только теория — крупные исследовательские группы, включая Google DeepMind, уже применяют эволюционные методы даже в связке с LLM.
Когда начинаются трудности
Во времена моей учёбы в магистратуре системного анализа мы активно изучали эволюционные алгоритмы и их применение в машинном обучении. Самым сложным оказывалась практическая часть: существующие фреймворки либо устарели, либо требовали слишком много дополнительного кода. В итоге большую часть алгоритмов приходилось писать вручную. Особенно удивляло, что почти все библиотеки ограничиваются классическими реализациями, тогда как более современные подходы — вроде самоконфигурирования или адаптации на основе истории успеха — просто нельзя применить «из коробки». И это проблема не про «студентов и исследования». В индустрии ситуация такая же: современные эволюционные методы есть на Arxiv, в презентациях и демо, но не в репозиториях, которые можно встроить в пайплайн.
Так появился Thefittest
 
	Логотип проекта
Thefittest (от англ. «the fittest», «наиболее приспособленный») — open‑source библиотека или фреймворк на Python из области вычислительного интеллекта, стоящей на пересечении оптимизации и искусственного интеллекта. Она объединяет эволюционные алгоритмы и инструменты для их применения в задачах машинного обучения.
Изначально я собирал в ней свои собственный рабочие реализации, чтобы не терять код и не переписывать одинаковые части заново. Но проект быстро вырос. Как человек, много раз сталкивавшийся с отсутствием современных готовых решений, я собрал всё в одном месте: сначала локально, потом на GitHub. В какой‑то момент стало очевидно: если этот код помогает мне, он может помочь и другим. Так Thefittest стал открытым проектом. Позже я выложил его на PyPI, чтобы устанавливать можно было одной командой:
pip install thefittest
С этого момента библиотека перестала быть «для себя» и стала «для других». И тут всё резко усложнилось: понадобились документация, тесты, CI/CD, скорость, совместимость с экосистемой ML. В какой‑то момент я понял простую вещь: написать алгоритмы — это половина дела. Чтобы библиотекой реально могли пользоваться, нужно построить вокруг неё инфраструктуру. Минимальный набор оказался таким:
 автоматическое форматирование (например, black),
 
 
 статическая проверка типов (mypy),
 
 
 линтер (ruff или flake8),
 
 
 автоматические тесты (pytest),
 
 
 CI/CD в GitHub Actions,
 
 
 анализ качества кода (Codacy или SonarCloud),
 
 
 публикация на PyPI (poetry / twine),
 
 
 документация (Sphinx или mkdocs).
 
Для пользователя это просто «установил и работает», а для разработчика — целая экосистема вокруг библиотеки. Примерно так выглядел технологический стек Thefittest на момент релиза:
 
	Технологический стек Thefittest
Со временем Thefittest перестал быть просто «папкой с кодом». Сейчас это примерно 13 000 строк Python, из которых большая часть — основной функционал, а четверть — тесты. Проект тестируется на трёх версиях Python (3.9–3.11), проходят автоматические проверки качества кода, а покрытие уходит в Codecov.
Производительность без C
Эволюционные алгоритмы могут считать десятки тысяч итераций, огромные популяции и модели с сотнями параметров. На чистом Python это превращается в мучение. Чтобы библиотека оставалась быстрой и масштабируемой, я переписал критичные участки (скрещивание, мутации, обновление популяций, вычисления) с помощью Numba.
Это дало производительность, близкую к C/C++, но без ручной компиляции, зависимостей и боли с окружением. Важно, что такой подход позволяет применять Thefittest не только в исследовательских экспериментах, но и в реальных ML‑пайплайнах — от оптимизации гиперпараметров до NAS и промышленных задач.
Например, вот реальный оператор двухточечного скрещивания из библиотеки:
@njit(int8[:](int8[:, :], float64[:], float64[:]))
def two_point_crossover(
individs: NDArray[np.byte],
fitness: NDArray[np.float64], rank: NDArray[np.float64]
) -> NDArray[np.byte]:
size = len(individs[0])
c_points = random_sample(range_size=size, quantity=2, replace=False)
c_points = sorted(c_points)
if flip_coin(0.5):
offspring = individs[0].copy()
other_individ = individs[1]
else:
offspring = individs[1].copy()
other_individ = individs[0]
for i in range(size):
if c_points[0] <= i <= c_points[1]:
offspring = other_individ
return offspring
Всего один декоратор превращает эту функцию из обычного Python‑кода в JIT‑компилированную, работающую в разы быстрее.
Thefittest в действии
Большинство известных библиотек по эволюционным алгоритмам ограничиваются классическими методами и узким кругом задач. Thefittest задумывался иначе — как полноценный инструмент для прикладного искусственного интеллекта: его можно использовать не только в оптимизации функций, но и в реальных ML‑пайплайнах, AutoML, построении моделей и настройке сложных систем.
Сейчас в библиотеке реализовано около 12 эволюционных алгоритмов, работающих с непрерывными, целочисленными и категориальными параметрами. Семь из них раньше не были доступны в open‑source в рабочем, продакшен‑готовом виде: в лучшем случае они существовали только в статьях и псевдокоде.
Их можно применять прямо «из коробки» — для символьной регрессии, автоматического формирования архитектуры нейросетей, оптимизации гиперпараметров и других задач, где классические методы плохо работают или просто не подходят.
 
	Дерево реализованных методов
Интерфейс
Когда я только начинал работать с эволюционными алгоритмами, меня всегда удивляло, как многие используют DEAP. Это отличный фреймворк, но по сути — конструктор: чтобы собрать рабочий алгоритм, нужно вручную соединять блоки, писать свой пайплайн, настраивать операторы. На практике это часто превращается в копирование чужих примеров, чтобы «хоть как‑то запустить» оптимизацию.
В Thefittest я решил пойти другим путём — сделать всё максимально просто и готовым к применению. Любой алгоритм можно запустить как полноценный оптимизатор: достаточно передать целевую функцию как обычную Python‑функцию и указать количество итераций.
При этом возможности остаются гибкими: можно менять параметры, выбирать стратегии селекции, задавать оператор скрещивания, передавать callback‑функции. Всё это в привычном для Python‑разработчика формате, без лишнего кода и обёрток.
 
	Сравнение "размера" вызова генетического алгоритма
Совместимость со scikit-learn
Одно из ключевых требований к библиотекам машинного обучения на Python — совместимость со scikit‑learn. Это негласный стандарт всей экосистемы: знакомые методы fit(), predict(), score(), единые подходы к API и десятки инструментов.
Если модель поддерживает API sklearn, она сразу попадает в готовую инфраструктуру — кросс‑валидация, пайплайны, стекинг, автоматический подбор гиперпараметров.
В Thefittest это реализовано так: например, GeneticProgrammingRegressor можно использовать как обычную модель из sklearn — включать в стекинг, вызывать fit(), predict(), считать метрики и комбинировать с любыми другими алгоритмами.
from sklearn.ensemble import StackingRegressor
from thefittest.regressors import GeneticProgrammingRegressor
from thefittest.optimizers import SelfCGP
from sklearn.metrics import mean_squared_error, r2_score
# Конечная модель (GeneticProgrammingRegressor) импортируется из библиотеки thefittest
final_model = GeneticProgrammingRegressor(
n_iter=200,
pop_size=500,
optimizer=SelfCGP,
optimizer_args={"show_progress_each": 10, "keep_history": True, "max_level": 5},
)
# Создаем стэкинг-регрессор
stacking_regressor = StackingRegressor(
estimators=base_models, # Базовые модели в ансамбле стекинга
final_estimator=final_model # В качестве мета-модели используется GeneticProgrammingRegressor из thefittest
)
# Обучаем и оцениваем стэкинг-регрессор
stacking_regressor.fit(X_train, y_train)
y_pred_stack = stacking_regressor.predict(X_test)
# Вычисляем метрики
stacking_mse = mean_squared_error(y_test, y_pred_stack)
stacking_r2 = r2_score(y_test, y_pred_stack)
# Выводим результаты
print("\nStacking model:")
print(f"MSE: {stacking_mse:.4f}, R2: {stacking_r2:.4f}")
По сути, Thefittest добавляет в экосистему sklearn новую категорию моделей — эволюционные, которые не только оптимизируют параметры, но и выводят на уровень автоматизации процессов машинного обучения.
Совместимость с PyTorch и обучение на GPU
Если для классических ML-моделей ключевым стандартом является совместимость со scikit-learn, то для нейросетей — возможность обучения на GPU. Поэтому в Thefittest добавлена интеграция с PyTorch: эволюционные алгоритмы оптимизируют структуру модели, а веса обучаются с помощью стандартных оптимизаторов torch.optim на GPU.
Это позволяет использовать гибридный подход: эволюция отвечает за архитектуру и гиперпараметры, а градиентные методы — за точность. При этом всё остаётся в привычном для Python формате — без дополнительных обёрток и «ручных» интерфейсов.
from thefittest.optimizers import SelfCGP
from thefittest.classifiers import GeneticProgrammingNeuralNetClassifier
from thefittest.benchmarks import IrisDataset
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import minmax_scale
import torch
import torch.optim as optim
# Данные
data = IrisDataset()
X, y = minmax_scale(data.get_X()), data.get_y()
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1)
# Автоматический выбор устройства
device = "cuda" if torch.cuda.is_available() else "cpu"
model = GeneticProgrammingNeuralNetClassifier(
n_iter=10,
pop_size=10,
optimizer=SelfCGP,
weights_optimizer=optim.Adam,
weights_optimizer_args={"iters": 1000, "lr": 0.01},
device=device
)
model.fit(X_train, y_train)
preds = model.predict(X_test)
Не просто библиотека, а технология
В основе проекта моя диссертационная работа. В ходе исследований я разработал модификации эволюционных алгоритмов, которые автоматически подстраивают собственные параметры в процессе работы. Это решает главную проблему классических ГА и ГП — необходимость ручной настройки и хрупкость при изменении свойств задачи. Самоадаптация делает алгоритмы устойчивыми, повышает точность и позволяет применять их в реальных инженерных сценариях. Часть этих методов уже реализована в Thefittest, часть — в процессе интеграции. Среди них:
 самоконфигурируемые генетические алгоритмы с адаптацией по истории успеха (SelfCSHAGA, PDPSHAGA);
 
 
 самоконфигурируемые варианты генетического программирования (SelfCSHAGP, PDPSHAGP);
 
 
 метод автоматизированного проектирования ансамблей нейросетей (GPENN).
 
Эти алгоритмы впервые будут доступны в открытом виде. На основе Thefittest уже создано шесть программных систем, зарегистрированных в Роспатенте. Некоторые примеры решаемых задач:
Краткосрочный прогноз силы ветра на морском побережье
Построена гибридная модель: автоматически спроектированный ансамбль нейросетей + интерпретируемая нечёткая логика, обе части формируются самоконфигурируемыми эволюционными алгоритмами. Подход ориентирован на оперативный прогноз на горизонте 1–3 часа с балансом между качеством и объяснимостью для практического применения.
Моделирование акустических характеристик древесных панелей
Разработана программная система, автоматически проектирующая интерпретируемые модели звукового давления с помощью самоконфигурируемых эволюционных алгоритмов. Система позволяет прогнозировать звукоизоляционные свойства древесных панелей по технологическим параметрам.
Ключевой эффект этой технологии в том, что модели формируются автоматически — без ручного подбора параметров и без участия эксперта по машинному обучению или эксперта предметной области. Самоконфигурируемые эволюционные алгоритмы сами оптимизируют структуру, параметры и архитектуру моделей, а также меняют стратегию оптимизации в процессе поиска решения, что позволяет использовать их для моделирования сложных систем даже тем, кто не занимается ML профессионально.
Признание и популяризация
Проект выходит за рамки личного инструмента: я регулярно показываю его на научных и инженерных мероприятиях, он используется в прикладных задачах и получает независимые оценки. За все время существования библиотека и связанная с ней работа получили признание на ряде профильных мероприятий:
 Best PhD Student Paper Award на IWMMA 2023 за работу «Thefittest: Evolutionary Machine Learning in Python»;
 
 
 приглашённый tutorial на IWMMA 2024 по автоматизации проектирования ML‑моделей на Python с использованием Thefittest;»
 
 
 1 место в межвузовском конкурсе Samsung Innovation Campus / IT Academy;
 
 
 призёр «Soft‑Парад 2025» (номинация «Программирование»).
 
Отдельно я особенно горжусь победой в премии «Гравитация 2025» — одном из крупных российских конкурсов в области ИИ. Thefittest победил в номинации «Алгоритмы и программные решения в области ИИ и больших данных». Для меня это подтверждение того, что библиотека ценна не только как учебно‑исследовательский инструмент, но и как технологическая разработка, признанная экспертами.
 
	Победа в гравитации
Куда дальше
Конечно, это не законченный продукт и не «идеальная» библиотека, а всё, что описано выше, по сути лишь уверенный старт. За время презентаций и выступлений я много раз слышал критику — и в большинстве случаев она была обоснованной. Например, в некоторых алгоритмах я действительно «изобретал велосипед». Вместо переписывания чужих реализаций с нуля нужно учиться интегрировать их в экосистему библиотеки. Это позволит запускать, например, L-SRTDE прямо из Thefittest, без переписывания исходников. Это и правильнее, и эффективнее, и полезнее для пользователей.
Так зачем же я пишу свою open-source библиотеку эволюционных алгоритмов?
Когда‑то Thefittest был просто рабочим набором инструментов, собранным «для себя». Сейчас это технология, которую можно интегрировать в реальные AI‑проекты: оптимизацию моделей, AutoML, построение нейросетевых архитектур, символьную регрессию и прогнозирование сложных систем. Поэтому главный ориентир — не просто публиковать код, а доводить решения до практической применимости.
Чтобы упростить старт, уже подготовлены рабочие примеры: запуск оптимизаторов, автоматическое построение моделей, подключение собственных операторов, использование через API scikit‑learn, а также Jupyter‑ноутбук на Kaggle, который можно запустить без настройки окружения. Это делает технологию доступной разработчикам, инженерам и исследовательским группам, даже без глубокой подготовки в ML. Полноценная документация сейчас в разработке — я постепенно переношу туда инструкции, типовые сценарии и примеры.
Код открыт не только на GitHub, но и на GitVerse — это шаг к тому, чтобы библиотека была доступна внутри российских AI‑проектов и могла развиваться как часть отечественной научно‑технологической инфраструктуры.
Если кратко: цель Thefittest — вывести эволюционные алгоритмы из статей и лабораторных прототипов в прикладной уровень, где ими можно действительно пользоваться. Не как идеей, а как инструментом.
 
				 
       
      

 
		
	