Как мы научим машины обнаруживать алгоритмы? Традиционные подходы полагаются на созданную вручную эвристику, исчерпывающий поиск или оптимизацию на основе градиента. Но что, если бы мы могли использовать творческий потенциал больших языковых моделей (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в противном случае — безопасный числовой агрегат, исключающий размеры объекта). База данных обеспечивает соблюдение ограничений по численности населения, отслеживает лучшие мировые показатели, регистрирует запросы, поддерживает миграцию и сохраняет контрольные точки. - Контроллер: Управляет циклом, включая заполнение, ведение журнала, инициализацию подсказки/оценщика и параллельное выполнение на основе процесса. Он планирует итерации между островами, управляет контрольными точками и возобновлением, обеспечивает соблюдение критериев ранней остановки/целевой оценки, сохраняет артефакты и записывает наиболее обнаруженную программу и ее метаданные в выходной каталог.
Ключевые алгоритмические инновации
Островная эволюция с ленивой миграцией
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, взяты из дополнительных источников (лучшие программы, предки по линии, разнообразные крайности в наборах функций и случайные выборки). Такое разделение поощряет улучшения, основанные на лучших достижениях на данный момент, сохраняя при этом давление геологоразведочных работ за счет разнообразных образцов, реализуемых посредством быстрого строительства, а не прямой рекомбинации.
Примеры использования
Пример 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 итераций), что позволяет предположить, что терпеливое исследование пространства решений дает совокупные преимущества.
Рисунок 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 #находить #алгоритмы #посредством #эволюции
Продолжение темы
