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

Что вы будете делать
- Настройте эксперимент 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.
- В консоли Google Cloud выберите или создайте проект с включенной функцией выставления счетов, а затем настройте ее в терминале:
gcloud config set project <YOUR_PROJECT_ID>
- Включите API механизма обнаружения, который предоставляет доступ к AlphaEvolve:
gcloud services enable discoveryengine.googleapis.com
Найдите идентификатор вашего приложения Gemini Enterprise.
AlphaEvolve предоставляется через Gemini Enterprise (базовый REST-интерфейс — это API Discovery Engine). Для параметра GE_APP_ID вам нужен идентификатор вашего приложения, а не его отображаемое имя.
- Откройте страницу приложений Gemini Enterprise для вашего проекта.
- Щелкните по своему приложению и скопируйте поле ID (например,
gemini-enterprise-1234567890_1234567890123).
Аутентификация, клонирование и установка
- Выполните аутентификацию с использованием учетных данных приложения по умолчанию:
gcloud auth application-default login
- Клонируйте репозиторий с примерами и откройте его. Все команды будут запускаться из корневой директории этого репозитория:
git clone https://github.com/Google-Cloud-AI/alphaevolve-on-googlecloud.git
cd alphaevolve-on-googlecloud
- Создайте виртуальную среду и установите в неё клиентскую библиотеку 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 (проект, бюджет и параллелизм).
- Увеличьте бюджет в файле
.env, чтобы у более длинного поиска было больше возможностей для улучшения:
# in .env — raise the generation cap and the evaluation target together
MAX_PROGRAMS_GENERATED=20
MAX_PROGRAMS_EVALUATED=20
- Запустите его из корневой директории репозитория:
uv run python -m examples.tsp.src.run_evolution
В качестве начального значения используется маршрут ближайшего соседа по 50 городам; метрика — neg_tour_length (отрицательная средняя длина маршрута по 5 фиксированным экземплярам, поэтому чем выше значение, тем лучше ). Откройте examples/tsp/src/program.py и обратите внимание, что только construct_tour(distances, n) находится внутри блока EVOLVE.
Обе задачи имеют одинаковую структуру, но состоят из разных элементов:
Проблема | Язык | Оценка | Метрическая система (чем выше показатель, тем лучше) | Что развивается? |
| Python | local | | |
| Python | local | | |
По мере выполнения поиска наблюдайте, neg_tour_length растет (приближается к нулю), поскольку Gemini выходит за рамки метода ближайшего соседа и переходит к улучшениям типа 2-opt / or-opt — стратегиям, которые вы не разрабатывали.
7. Настройте параметры поиска.
Теперь, когда оба запуска работают, настройте бюджет в файле .env :
-
MAX_PROGRAMS_EVALUATED— количество кандидатов для оценки. Чем больше кандидатов, тем глубже поиск и выше затраты/время. -
CONCURRENCY— количество кандидатов, генерируемых одновременно в процессе обработки. -
MODEL_1/MODEL_2(сMODEL_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 : выполнение ресурсоемких параллельных вычислений на графических процессорах в собственном кластере.