開始在 Google Cloud 上使用 AlphaEvolve

1. 簡介

在本程式碼研究室中,您將在 Google Cloud 上執行前兩項 AlphaEvolve 實驗。AlphaEvolve 是 Google DeepMind 的 AI 輔助進化式程式碼架構,可使用 Gemini 編寫及改良程式碼,並根據您定義的指標評分。您會從圓形封裝開始,這是一個小型幾何問題,您可以實際觀察結果如何改善,然後在更困難的旅行推銷員問題上重複此過程,以便記住模式。

這兩項實驗都使用本機評估,候選程式碼會在您自己的電腦上執行,因此不需要 GPU,也不必管理叢集。唯一使用的雲端服務是 AlphaEvolve API,用於產生候選人。

AlphaEvolve 本機迴圈:AlphaEvolve 代理程式 (位於 Google Cloud 的 Gemini Enterprise 中) 會產生候選程式;您電腦的演化迴圈 (run_evolution.py) 會透過 acquire_programs() 取得這些程式,並在 local exec() 沙箱中透過 evaluate.py 評估每個程式,然後透過 submit_program_evaluations() 回傳分數。

學習內容

  • 針對 Google Cloud 專案設定 AlphaEvolve 實驗
  • 執行進化搜尋,在本機改善圓形封裝演算法
  • 查看最佳演進式計畫的分數、排名和視覺化資料
  • 重複旅行推銷員問題的迴圈,概括模式
  • 調整搜尋預算 (候選人、並行、模型)

軟硬體需求

  • 網路瀏覽器,例如 Chrome
  • 已啟用計費功能的 Google Cloud 專案
  • Python 3.9 以上版本和 uv
  • 對 Python 和指令列有基本的瞭解

本程式碼研究室適合各種程度的 AI/機器學習工程師和開發人員。您不需要具備演化運算背景知識。

預計完成時間:45 到 60 分鐘

費用:本程式碼研究室使用本機評估 (無 GPU,無 GKE)。系統只會針對產生候選人的 AlphaEvolve API 用量計費。

測試環境:AlphaEvolve Cloud 用戶端程式庫 v0.1.0、Python 3.9 以上版本,以及 circle_packingtsp 範例。

2. 事前準備

選取專案並啟用 API

  1. Google Cloud 控制台中,選取或建立已啟用計費功能的專案,然後在終端機中設定:
gcloud config set project <YOUR_PROJECT_ID>
  1. 啟用 Discovery Engine API,這是 AlphaEvolve 的服務對象:
gcloud services enable discoveryengine.googleapis.com

找出 Gemini Enterprise 應用程式 ID

AlphaEvolve 是透過 Gemini Enterprise 提供服務 (底層 REST 介面為 Discovery Engine API)。您需要應用程式的 ID (而非顯示名稱) 才能設定 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 會在存放區中建立 .venvuv pip install -e ".[dev]" 會安裝 alpha_evolve 套件 (可編輯) 和測試工具。您將使用 uv run 啟動實驗,系統會自動使用這個環境。

3. 瞭解 AlphaEvolve 迴圈

執行任何項目之前,請先瞭解 AlphaEvolve 需要的三個部分。這是您在每次實驗中都會重複使用的心理模型。

種子計畫和 EVOLVE-BLOCK

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

cp examples/circle_packing/example.env .env

開啟 .env,並只設定專案和應用程式 ID,其他所有項目都會在首次執行時使用預設值:

PROJECT_ID=<YOUR_PROJECT_ID>
GE_APP_ID=<YOUR_GEMINI_ENTERPRISE_APP_ID>

預設值會使用 Gemini 模型混合 (MODEL_1=gemini-3.5-flash 的權重為 0.7MODEL_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_DENIED403 通常表示專案未啟用 Discovery Engine API。請重新檢查「事前準備」步驟。如果執行作業立即結束並顯示「Failed to create experiment」(無法建立實驗),表示 .env 中的憑證或 GE_APP_ID 有誤。

5. 解讀結果

執行會列印依 sum_of_radii 排序的前幾名程式 (值越高越好)。請注意以下兩點:

  • 分數提高了。最佳進化版 sum_of_radii 應勝過種子的同心圓版面配置。Gemini 通常會發現角落和邊緣附近的圓圈可以變大,並重新平衡內部。
  • 系統會略過無效的候選人。如果程式產生重疊或超出範圍的圓圈,就會獲得 -inf 分數,並在排名中遭到略過。這是限制回饋機制在運作,而非錯誤。

現在您已完成整個迴圈:種子 -> 生成 -> 評估 -> 評分 -> 重複。AlphaEvolve 的其他所有內容都是評估作業的執行位置變化。

6. 演變為實際搜尋:TSP

圓形封裝會快速收斂。如要感受搜尋功能在更複雜問題上的運作方式,請演化旅行推銷員問題的啟發式方法。模式完全相同,只有種子和指標會變更,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,並注意 EVOLVE-BLOCK 內只有 construct_tour(distances, n)

這兩個問題的模式相同,但零件不同:

問題

語言

評估

指標 (越高越好)

進化內容

circle_packing

Python

當地時間 exec()

sum_of_radii

construct_packing()

tsp

Python

當地時間 exec()

neg_tour_length

construct_tour()

搜尋執行時,請觀察 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-flashgemini-3.1-pro-preview。將權重轉移至較強大的模型,即可在較少的生成次數中找到更優質的節目。

每次變更後,請使用 uv run python -m examples.circle_packing.src.run_evolution (或 tsp 模組) 重新執行。

注意:提高 MAX_PROGRAMS_EVALUATED 和改用較大的模型都會增加費用。由於這個程式碼研究室使用本機評估,因此不會產生 GPU 費用,但您仍須為每個產生的候選項目支付 AlphaEvolve API 使用費。從小筆預算開始。

8. 清除所用資源

本程式碼研究室使用本機評估,因此不會有任何計費項目,包括叢集、GPU 和已部署的服務。如要完全重設結帳程序,請按照下列步驟操作:

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

注意: git clean -xfd 會刪除 .env (包括專案設定) 和 .venv。如要繼續實驗,請略過這項步驟。

如果您是專為本程式碼研究室建立專案,請在控制台中刪除專案,以免產生任何費用。

9. 恭喜

恭喜!您在 Google Cloud 上執行了第一個 AlphaEvolve 實驗,並使用種子程式、評分函式和 Gemini,演化出兩種演算法:圓形封裝和 TSP 啟發式演算法。

目前所學內容

  • AlphaEvolve 的迴圈運作方式:種子 -> 生成 -> 評估 -> 評分 -> 重複
  • EVOLVE-BLOCK 合約,可讓搜尋功能最佳化食譜,而不必操弄指標
  • 分數和失敗洞察如何引導下一代
  • 如何設定、執行、解讀及調整本機評估實驗

其他程式碼研究室

這些是獨立的步驟,完成順序不拘。

  • 使用遠端評估工具演化編譯的程式碼:演化 Rust/C++ 演算法,並透過 Cloud Run 上的容器化評估工具評估分數。
  • 在 GKE + Ray 上演進 LLM 微調:在自己的叢集上執行大量平行 GPU 評估。

參考文件