OpenEvolve: обучение LLM находить алгоритмы посредством эволюции

Как мы научим машины обнаруживать алгоритмы? Традиционные подходы полагаются на созданную вручную эвристику, исчерпывающий поиск или оптимизацию на основе градиента. Но что, если бы мы могли использовать творческий потенциал больших языковых моделей (LLM) в эволюционных рамках?

OpenEvolve — это агент эволюционного кодирования с открытым исходным кодом, который интегрирует большие языковые модели в систему поиска с качественным разнообразием для обнаружения алгоритмов. Программы-кандидаты создаются посредством редактирования под руководством LLM (по умолчанию на основе различий), оцениваются с помощью определяемых пользователем показателей и организуются с использованием MAP-Elites, в то время как островная модель с миграцией поддерживает параллельные, диверсифицированные исследования. Конвейер оценки поддерживает каскадное размещение и побочный канал артефактов, который передает трассировки выполнения и ошибки обратно в последующие запросы; при подсчете баллов можно включить дополнительную обратную связь на основе LLM.

OpenEvolve применяется во многих областях — вот несколько примеров: оптимизация систем, научное открытие, геопространственные алгоритмы, открытие закона масштабирования, Оптимизация ядра графического процессора, оперативная оптимизацияи многое другое.


Обзор архитектуры

Рисунок 1. Архитектура OpenEvolve, показывающая пять взаимосвязанных компонентов цикла эволюции.

Петля эволюции

  • Подскажите пробник: Создает контекстно-насыщенные подсказки, выбирая родительскую программу из текущего острова и обрабатывая наборы данных (наилучшие результаты по приспособленности, предки по происхождению, разнообразные крайности в наборах функций и случайные выборки). Подсказки включают родительский код, метрики оценки, координаты функций для MAP-Elite, историю развития и (необязательно) артефакты выполнения. Выбор шаблона поддерживает редактирование на основе различий по умолчанию или полную перезапись с контролируемой стохастичностью.
  • Ансамбль LLM: Генерирует код-кандидат, используя взвешенный ансамбль моделей, совместимых с OpenAI (детерминированных по начальным значениям). В стандартном режиме модель отбирается по весу; на островах, основанных на моделях, каждый остров использует фиксированную модель. Ответы приводят либо к редактированию на основе различий (блоки SEARCH/REPLACE), либо к полной перезаписи (извлечение JSON/блока кода) с параметрами генерации, взятыми из конфигурации.
  • Оценщик: Выполняет предоставленное пользователем evaluate(program_path) с таймаутами и повторами; опционально применяет каскадную оценку (evaluate_stage1/2/3) с порогами для ранней фильтрации слабых кандидатов. Он может включать обратную связь на основе LLM в метрики и фиксировать артефакты (например, стандартный поток ошибок, обратные трассировки) для последующего контекста подсказок. Параллельные оценки поддерживаются через внутренний пул задач.
  • База данных программы: Внедряет MAP-Elites для каждого острова, группируя программы по настраиваемым параметрам объектов (по умолчанию включают сложность и разнообразие; пользовательские измерения берутся из показателей оценщика). Новые кандидаты заменяют обитателей ячеек, когда физическая форма улучшается (предпочитая combined_scoreв противном случае — безопасный числовой агрегат, исключающий размеры объекта). База данных обеспечивает соблюдение ограничений по численности населения, отслеживает лучшие мировые показатели, регистрирует запросы, поддерживает миграцию и сохраняет контрольные точки.
  • Контроллер: Управляет циклом, включая заполнение, ведение журнала, инициализацию подсказки/оценщика и параллельное выполнение на основе процесса. Он планирует итерации между островами, управляет контрольными точками и возобновлением, обеспечивает соблюдение критериев ранней остановки/целевой оценки, сохраняет артефакты и записывает наиболее обнаруженную программу и ее метаданные в выходной каталог.
Read more:  Дождь хлещет по некоторым районам Дели; прогноз гроз, максимальная температура может упасть до 18–20°C - Times of India

Ключевые алгоритмические инновации

Островная эволюция с ленивой миграцией

OpenEvolve поддерживает несколько изолированных популяций (островов), которые развиваются независимо, чтобы уменьшить преждевременную конвергенцию и обеспечить параллельное исследование. Миграция управляется событиями: каждый остров мигрирует, когда добавление программы для каждого острова с момента последней миграции достигает заданного интервала, а не по времени, установленному на настенных часах. Миграция по умолчанию следует кольцевой топологии (дополнительная случайная миграция), передавая часть лучших программ, избегая при этом дублирования кода на острове назначения.

# Configuration example
database:
  num_islands: 5
  migration_interval: 20   # generations, not iterations
  migration_rate: 0.1      # 10% of top programs migrate

MAP-Элиты за сохранение разнообразия

Каждый остров поддерживает сетку MAP-Elites по настраиваемым размерам объектов (по умолчанию включают сложность и разнообразие; дополнительные измерения могут быть предоставлены оценщиком). Кандидат занимает или заменяет ячейку, если она улучшает приспособленность (предпочитая combined_scoreв противном случае — безопасный агрегат по числовым метрикам, исключая измерения объектов). Это обеспечивает наличие одной элиты на ячейку и сохраняет качественное разнообразие. Система также избегает точных дубликатов (например, во время миграции) и вычисляет разнообразие, используя структурные меры (например, расстояние редактирования), а не полагаясь на встраивание кода.

Каскадная оценка

Оценка происходит поэтапно с настраиваемыми пороговыми значениями. Если предусмотрены каскадные функции, этап 1 выполняет быстрые проверки (например, импорт/выполнение), этап 2 запускает упрощенные тесты, а этап 3 выполняет комплексные тесты производительности. Для продвижения кандидаты должны соответствовать пороговым требованиям этапа. Тайм-ауты и исключения фиксируются как артефакты и могут быть возвращены в последующие запросы. Если каскадные функции не определены, оценка возвращается к одноэтапному. evaluate(program_path) с таймаутами и повторами.

Стратегия двойного выбора

Выбор родителей смещен в сторону программ с высокой пригодностью, в то время как вдохновляющие материалы, представленные LLM, взяты из дополнительных источников (лучшие программы, предки по линии, разнообразные крайности в наборах функций и случайные выборки). Такое разделение поощряет улучшения, основанные на лучших достижениях на данный момент, сохраняя при этом давление геологоразведочных работ за счет разнообразных образцов, реализуемых посредством быстрого строительства, а не прямой рекомбинации.

Read more:  Поправка автора: Выяснение свойств и структуры липидных наночастиц посредством биофизического анализа.

Примеры использования

Пример 1: Алгоритмическое обнаружение

В тесте AlgoTune OpenEvolve обнаружила алгоритмы, позволяющие добиться значительного ускорения за счет автоматической оптимизации:

Результаты алгоритмического обнаружения

Рисунок 2. Результаты алгоритмического обнаружения, демонстрирующие значительное ускорение теста AlgoTune.

Ключевые достижения включают автоматическое обнаружение JAX JIT-компиляции (321x), свертки на основе БПФ (256x) и оптимизированных графовых алгоритмов (95,78x). Система превратилась из простых итеративных реализаций в сложные модели числовых вычислений без вмешательства человека. Более подробный анализ см. На пути к открытым эволюционным агентам.

Пример 2: Упаковка кругов

OpenEvolve сопоставил самые современные результаты (сумма радиусов 2,634 для n = 26), развиваясь от наивных геометрических конструкций до открытия scipy.optimize с помощью SLSQP — алгоритмического подхода, совершенно отличного от первоначального решения.

Пример 3: Оптимизация ядра графического процессора

Эволюция ядер Metal GPU для внимания трансформаторов Apple Silicon:

Производительность ядра графического процессора

Рисунок 3. Улучшение производительности ядра графического процессора для привлечения внимания к трансформаторам на Apple Silicon

OpenEvolve обнаружил несколько неочевидных оптимизаций:

  • 8-элементная векторизация SIMD соответствие аппаратной ширине Apple Silicon
  • Двухпроходной онлайн-софтмакс уменьшение пропускной способности памяти
  • Структура памяти, специфичная для GQA использование структуры головы

Эти оптимизации поддерживают 100% числовую точность, обеспечивая при этом измеримое улучшение производительности в различных сценариях вывода. Более подробную информацию см. Обнаружение ядра графического процессора.

Пример 4: Оптимизация подсказки LLM

Помимо кода, OpenEvolve может развивать сами подсказки:

Оперативные результаты оптимизации

Рисунок 4. Результаты быстрой оптимизации по критериям GEPA.

В тестах GEPA точность подсказок составила +10,69% по HotpotQA (многошаговое рассуждение) и +6,42% в целом по нескольким тестам. Это демонстрирует универсальность OpenEvolve — одна и та же эволюционная структура оптимизирует как код, так и естественный язык.

Прогресс эволюции: Как показано ниже в тесте AlgoTune, мы видим, что производительность постоянно улучшается с течением поколений. Расширенная эволюция (200 итераций) дала на 24% лучшие результаты, чем более короткие прогоны (100 итераций), что позволяет предположить, что терпеливое исследование пространства решений дает совокупные преимущества.

Эволюция Прогресс

Read more:  Исследователи обнаружили недостаток, который делает программы LLM менее надежными | Новости Массачусетского технологического института

Рисунок 5. Улучшение производительности на протяжении поколений, демонстрирующее совокупные преимущества расширенной эволюции


Начиная

OpenEvolve предоставляет как библиотечный интерфейс, так и интерфейс командной строки:

from openevolve import run_evolution

result = run_evolution(
    initial_program="def solve(x): return x * 2",
    evaluator=lambda path: {"score": benchmark(path)},
    iterations=100
)

Для сложных конфигураций используйте файлы YAML, определяющие модели LLM, стратегии развития и параметры оценки. OpenEvolve поддерживает контрольную точку/возобновление длительных экспериментов и параллельную оценку на нескольких ядрах. OpenEvolve имеет открытый исходный код и доступен на GitHub.

Обновлять: Эта запись в блоге была обновлена 1 ноября 2025 г.

2025-12-09 22:54:00


1765334530
#OpenEvolve #обучение #LLM #находить #алгоритмы #посредством #эволюции

Продолжение темы

Leave a Comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.