Начните работу с AlphaEvolve в Google Cloud.

1. Введение

В этом практическом занятии вы проведете свои первые два эксперимента с AlphaEvolve в Google Cloud. AlphaEvolve — это разработанная Google DeepMind платформа для эволюционного программирования с использованием искусственного интеллекта: она использует Gemini для написания и улучшения кода, оцениваемого по заданной вами метрике. Вы начнете с задачи упаковки кругов — небольшой геометрической задачи, где вы можете буквально наблюдать, как улучшается результат, — а затем повторите то же самое с более сложной задачей коммивояжера, чтобы закрепить закономерность.

В обоих экспериментах используется локальная оценка — исходный код выполняется на вашем собственном компьютере, поэтому нет необходимости управлять графическим процессором и кластером. Единственное облачное решение — это API AlphaEvolve, который генерирует исходные коды.

Локальный цикл AlphaEvolve: агент AlphaEvolve на Gemini Enterprise в Google Cloud генерирует программы-кандидаты; цикл эволюции вашей машины (run_evolution.py) получает их с помощью acquire_programs(), оценивает каждую в локальной песочнице exec() с помощью evaluate.py и возвращает результаты с помощью submit_program_evaluations().

Что вы будете делать

  • Настройте эксперимент AlphaEvolve для вашего проекта в Google Cloud.
  • Выполните эволюционный поиск, который локально улучшает алгоритм упаковки кругов.
  • Ознакомьтесь с оценкой, рейтингом и визуализацией лучшей развитой программы.
  • Повторите цикл в задаче о коммивояжере, чтобы обобщить закономерность.
  • Настройте бюджет поиска (количество кандидатов, параллельное выполнение, модель).

Что вам понадобится

  • Веб-браузер, например Chrome.
  • Проект Google Cloud с включенной функцией выставления счетов.
  • Python 3.9 или более поздняя версия и uv
  • Базовые знания Python и работы с командной строкой.

Этот практический семинар предназначен для инженеров и разработчиков в области искусственного интеллекта и машинного обучения всех уровней. Знания в области эволюционных вычислений не требуются.

Примерное время выполнения: 45–60 минут .

Стоимость: в этом практическом занятии используется локальная оценка (без GPU, без GKE). Единственная плата — за использование API AlphaEvolve для генерации кандидатов.

Протестировано с использованием: клиентской библиотеки AlphaEvolve Cloud версии 0.1.0, Python 3.9+, на примерах circle_packing и tsp .

2. Прежде чем начать

Выберите свой проект и включите API.

  1. В консоли Google Cloud выберите или создайте проект с включенной функцией выставления счетов, а затем настройте ее в терминале:
gcloud config set project <YOUR_PROJECT_ID>
  1. Включите API механизма обнаружения, который предоставляет доступ к AlphaEvolve:
gcloud services enable discoveryengine.googleapis.com

Найдите идентификатор вашего приложения Gemini Enterprise.

AlphaEvolve предоставляется через Gemini Enterprise (базовый REST-интерфейс — это API Discovery Engine). Для параметра GE_APP_ID вам нужен идентификатор вашего приложения, а не его отображаемое имя.

  1. Откройте страницу приложений Gemini Enterprise для вашего проекта.
  2. Щелкните по своему приложению и скопируйте поле ID (например, gemini-enterprise-1234567890_1234567890123 ).

Аутентификация, клонирование и установка

  1. Выполните аутентификацию с использованием учетных данных приложения по умолчанию:
gcloud auth application-default login
  1. Клонируйте репозиторий с примерами и откройте его. Все команды будут запускаться из корневой директории этого репозитория:
git clone https://github.com/Google-Cloud-AI/alphaevolve-on-googlecloud.git
cd alphaevolve-on-googlecloud
  1. Создайте виртуальную среду и установите в неё клиентскую библиотеку AlphaEvolve:
uv venv
uv pip install -e ".[dev]"

uv venv создаст файл .venv в репозитории; uv pip install -e ".[dev]" установит пакет alpha_evolve (можно редактировать) и инструменты тестирования. Вы будете запускать эксперименты с помощью uv run , которая автоматически использует эту среду.

3. Поймите цикл AlphaEvolve.

Прежде чем что-либо запускать, разберитесь с тремя компонентами, необходимыми AlphaEvolve. Это та модель мышления, которую вы будете использовать в каждом эксперименте.

Программа посева и блок EVOLVE

AlphaEvolve переписывает код только между двумя маркерами . Всё остальное в файле — это фиксированный каркас, который он не может затронуть. Откройте examples/circle_packing/src/program.py — в качестве начального значения используется простая упаковка концентрических колец:

# EVOLVE-BLOCK-START
"""Constructor-based circle packing for n=26 circles"""
import numpy as np


def construct_packing(n, random_seed: int):
    """Construct an arrangement of 26 circles in a unit square.

    The goal is to maximize the sum of their radii.
    Returns (centers, radii, sum_of_radii).
    """
    rng = np.random.default_rng(random_seed)
    centers = np.zeros((n, 2))

    # A simple starting pattern — evolution will improve this.
    centers[0] = [0.5, 0.5]                      # one circle in the center
    for i in range(8):                           # 8 in an inner ring
        angle = 2 * np.pi * i / 8
        centers[i + 1] = [0.5 + 0.3 * np.cos(angle), 0.5 + 0.3 * np.sin(angle)]
    for i in range(16):                          # 16 in an outer ring
        angle = 2 * np.pi * i / 16 * rng.uniform(0.9, 1.1)
        centers[i + 9] = [0.5 + 0.7 * np.cos(angle), 0.5 + 0.7 * np.sin(angle)]

    centers = np.clip(centers, 0.01, 0.99)       # keep everything in the square
    radii = compute_max_radii(centers, random_seed)
    return centers, radii, np.sum(radii)


def compute_max_radii(centers, random_seed: int):
    """Grow each circle to touch its nearest border or neighbor (no overlaps)."""
    # ... see src/program.py for the full helper ...
# EVOLVE-BLOCK-END

Всё, что находится за пределами EVOLVE-BLOCK-START / EVOLVE-BLOCK-END — включая функцию evaluate() и проверки на перекрытие — остаётся неизменным. В этом и заключается вся хитрость: Gemini может предложить любой алгоритм упаковки, какой захочет, но не может изменить оценку кандидата.

Оценщик и оценка

examples/circle_packing/src/evaluate.py каждый кандидат запускается в изолированной среде, и результат возвращается. Для упаковки кругов метрикой является sum_of_radii , и чем выше значение, тем лучше :

CIRCLE_PACKING_EVALUATION_METRIC = "sum_of_radii"
CIRCLE_PACKING_EVALUATION_INPUTS = {"n": 26}

Если кандидат нарушает правило — круги перекрываются или выходят за пределы квадрата — оценщик возвращает -inf плюс пояснение , что пошло не так. Эти пояснения передаются в Gemini, чтобы следующее поколение избежало той же ошибки.

4. Проведите свой первый эксперимент.

Настройте эксперимент

Создайте файл .env из шаблона circle-packing в корневом каталоге репозитория:

cp examples/circle_packing/example.env .env

Откройте файл .env и укажите только идентификатор вашего проекта и приложения — все остальное по умолчанию будет работать при первом запуске:

PROJECT_ID=<YOUR_PROJECT_ID>
GE_APP_ID=<YOUR_GEMINI_ENTERPRISE_APP_ID>

По умолчанию генерируются кандидаты с использованием смеси моделей Gemini ( MODEL_1=gemini-3.5-flash с весом 0.7 , MODEL_2=gemini-3.1-pro-preview с 0.3 ) и ограничивается значением MAX_PROGRAMS_EVALUATED=10 при CONCURRENCY=4 — этого достаточно, чтобы цикл работал быстро.

Начните эволюцию

Запустите эксперимент из корневой директории репозитория:

uv run python -m examples.circle_packing.src.run_evolution

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

Вы должны увидеть результат, похожий на следующий:

INFO:alpha_evolve.experiment:Creating a new AlphaEvolve experiment
INFO:alpha_evolve.controller:Evolution loop started: 4 sampler(s), 32 evaluator(s), target=10 programs
INFO:alpha_evolve.controller:Waiting for the backend to generate candidates... (generated=0, evaluated=0/10, idle=10s)
INFO:alpha_evolve.workers:Candidate 1060655338894100 evaluated → sum_of_radii=0.8114
INFO:alpha_evolve.controller:Progress: generated=2, evaluated=1/10, queued=0
...
INFO:alpha_evolve.controller:Stopping criteria met (10/10 programs evaluated).

Первые кандидаты обычно получают оценку в диапазоне 0,8–1,0 ; дальше поиск улучшается. После завершения цикла выводится список ранжированных программ и отображаются лучшие упаковки с помощью matplotlib .

Примечание: Устранение неполадок: Ошибка PERMISSION_DENIED или 403 обычно означает, что API Discovery Engine не включен в проекте. Перепроверьте шаг «Перед началом работы». Запуск, который сразу же завершается ошибкой «Не удалось создать эксперимент», означает, что учетные данные или GE_APP_ID в .env неверны.

5. Ознакомьтесь с результатами.

В результате выполнения программы отображаются лучшие программы, ранжированные по sum_of_radii (чем больше, тем лучше). Обратите внимание на два момента:

  • Результат повысился. Лучшая эволюционировавшая sum_of_radii должна превзойти концентрическую кольцевую структуру исходного значения. Gemini обычно обнаруживает, что круги вблизи углов и краев могут увеличиваться в размерах, и перебалансирует внутреннюю часть.
  • Недействительные кандидаты пропускаются. Любая программа, в результате которой образуются перекрывающиеся или выходящие за пределы допустимого диапазона круги, получает оценку -inf и пропускается в рейтинге — это результат работы обратной связи по ограничениям, а не ошибка.

Теперь у вас есть полный цикл: затравка -> генерация -> оценка -> оценка -> повторение. Все остальное в AlphaEvolve — это вариация этапа оценки.

6. Разработайте реальный алгоритм поиска: задача коммивояжера (TSP).

Поиск по кругу сходится быстро. Чтобы почувствовать работу поиска на более сложной задаче, разработайте эвристику для задачи коммивояжера . Схема идентична — меняются только начальное значение и метрика, а в примере с задачей коммивояжера используется ваш файл .env (проект, бюджет и параллелизм).

  1. Увеличьте бюджет в файле .env , чтобы у более длинного поиска было больше возможностей для улучшения:
# in .env — raise the generation cap and the evaluation target together
MAX_PROGRAMS_GENERATED=20
MAX_PROGRAMS_EVALUATED=20
  1. Запустите его из корневой директории репозитория:
uv run python -m examples.tsp.src.run_evolution

В качестве начального значения используется маршрут ближайшего соседа по 50 городам; метрика — neg_tour_length (отрицательная средняя длина маршрута по 5 фиксированным экземплярам, ​​поэтому чем выше значение, тем лучше ). Откройте examples/tsp/src/program.py и обратите внимание, что только construct_tour(distances, n) находится внутри блока EVOLVE.

Обе задачи имеют одинаковую структуру, но состоят из разных элементов:

Проблема

Язык

Оценка

Метрическая система (чем выше показатель, тем лучше)

Что развивается?

circle_packing

Python

local exec()

sum_of_radii

construct_packing()

tsp

Python

local exec()

neg_tour_length

construct_tour()

По мере выполнения поиска наблюдайте, neg_tour_length растет (приближается к нулю), поскольку Gemini выходит за рамки метода ближайшего соседа и переходит к улучшениям типа 2-opt / or-opt — стратегиям, которые вы не разрабатывали.

7. Настройте параметры поиска.

Теперь, когда оба запуска работают, настройте бюджет в файле .env :

  • MAX_PROGRAMS_EVALUATED — количество кандидатов для оценки. Чем больше кандидатов, тем глубже поиск и выше затраты/время.
  • CONCURRENCY — количество кандидатов, генерируемых одновременно в процессе обработки.
  • MODEL_1 / MODEL_2MODEL_1_WEIGHT / MODEL_2_WEIGHT ) — взвешенная смесь моделей Gemini, генерирующих кандидатов в процессе упаковки кругов (модуль TSP считывает вместо этого одну MODEL ). Допустимые значения: gemini-3.5-flash и gemini-3.1-pro-preview . Перенесите вес в сторону более сильной модели, чтобы найти лучшие программы за меньшее количество поколений.

После каждого изменения запускайте команду uv run python -m examples.circle_packing.src.run_evolution (или используйте модуль tsp ).

Примечание: Увеличение значения MAX_PROGRAMS_EVALUATED и переход на более крупную модель увеличивают стоимость. Поскольку в этом практическом занятии используется локальная оценка, плата за использование графического процессора не взимается, но вы все равно платите за использование API AlphaEvolve за каждого сгенерированного кандидата. Начните с малого.

8. Уборка

В этом практическом занятии используется локальная оценка, поэтому ничего платного не остаётся запущенным — ни кластеров, ни графических процессоров, ни развёрнутых сервисов. Чтобы полностью сбросить настройки оформления заказа:

git clean -xfd   # removes .env, .venv, and generated outputs

Примечание: git clean -xfd удаляет ваш .env (включая настройки проекта) и файл .venv . Пропустите этот шаг, если хотите продолжить эксперименты.

Если вы создали проект только для этого практического занятия, удалите его в консоли, чтобы прекратить списание средств.

9. Поздравляем!

Поздравляем! Вы провели свои первые эксперименты AlphaEvolve на Google Cloud и разработали два алгоритма — алгоритм упаковки кругов и эвристику для задачи коммивояжера — используя только начальную программу, функцию оценки и Gemini.

Что вы узнали

  • Как работает цикл AlphaEvolve: начальное значение -> генерация -> оценка -> оценка -> повторение
  • Контракт EVOLVE-BLOCK позволяет поиску оптимизировать рецепт, не манипулируя показателями.
  • Как результаты оценок и анализ неудач влияют на следующее поколение
  • Как настроить, запустить, прочитать и оптимизировать эксперимент локальной оценки

Другие семинары по кодированию

Эти задания выполняются самостоятельно — вы можете выполнять их в любом порядке.

  • Развивайте скомпилированный код с помощью удаленного оценщика : развивайте алгоритм Rust/C++, оцениваемый контейнеризированным оценщиком в Cloud Run.
  • Улучшенная тонкая настройка LLM на GKE + Ray : выполнение ресурсоемких параллельных вычислений на графических процессорах в собственном кластере.

Справочная документация