เริ่มต้นใช้งาน AlphaEvolve ใน Google Cloud

1. บทนำ

ใน Codelab นี้ คุณจะได้เรียกใช้การทดสอบ AlphaEvolve 2 รายการแรกใน Google Cloud AlphaEvolve คือเฟรมเวิร์กการเขียนโค้ดเชิงวิวัฒนาการที่แนะนำโดย AI ของ Google DeepMind ซึ่งใช้ Gemini ในการเขียนและปรับปรุงโค้ด โดยให้คะแนนตามเมตริกที่คุณกำหนด คุณจะเริ่มต้นด้วยการจัดวงกลมให้ชิดกัน ซึ่งเป็นปัญหาทางเรขาคณิตขนาดเล็กที่คุณสามารถดูผลลัพธ์ที่ดีขึ้นได้ จากนั้นทำซ้ำในปัญหาการเดินทางของพนักงานขายที่ยากขึ้นเพื่อให้รูปแบบคงอยู่

การทดสอบทั้ง 2 รายการใช้การประเมินในเครื่อง ซึ่งโค้ดตัวเลือกจะทำงานในเครื่องของคุณเอง จึงไม่มี GPU และไม่มีคลัสเตอร์ให้จัดการ การใช้งานระบบคลาวด์เพียงอย่างเดียวคือ AlphaEvolve API ที่สร้างตัวเลือก

ลูปในเครื่องของ AlphaEvolve: เอเจนต์ AlphaEvolve ใน Gemini Enterprise ใน Google Cloud จะสร้างโปรแกรมผู้สมัครรับเลือก ลูปการพัฒนาของเครื่อง (run_evolution.py) จะรับโปรแกรมเหล่านั้นด้วย acquire_programs() ให้คะแนนแต่ละโปรแกรมในแซนด์บ็อกซ์ exec() ในเครื่องด้วย evaluate.py และส่งคืนคะแนนด้วย submit_program_evaluations()

สิ่งที่คุณจะได้ทำ

  • กำหนดค่า การทดสอบ AlphaEvolve กับโปรเจ็กต์ที่อยู่ในระบบคลาวด์ของ Google
  • เรียกใช้ การค้นหาเชิงวิวัฒนาการที่ปรับปรุงอัลกอริทึมการจัดวงกลมให้ชิดกันในเครื่อง
  • อ่าน คะแนน การจัดอันดับ และการแสดงภาพโปรแกรมที่พัฒนาขึ้นดีที่สุด
  • ทำซ้ำ ลูปในปัญหาการเดินทางของพนักงานขายเพื่อสรุปรูปแบบ
  • ปรับ งบประมาณการค้นหา (ตัวเลือก, การทำงานพร้อมกัน, โมเดล)

สิ่งที่คุณต้องมี

  • เว็บเบราว์เซอร์ เช่น Chrome
  • โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
  • Python 3.9 ขึ้นไปและ uv
  • ความคุ้นเคยพื้นฐานกับ Python และบรรทัดคำสั่ง

Codelab นี้เหมาะสำหรับวิศวกรและนักพัฒนาซอฟต์แวร์ AI/ML ทุกระดับ ไม่จำเป็นต้องมีพื้นฐานด้านการคำนวณเชิงวิวัฒนาการ

เวลาที่ใช้โดยประมาณในการทำ Codelab นี้ให้เสร็จสมบูรณ์: 45–60 นาที

ค่าใช้จ่าย: Codelab นี้ใช้การประเมินในเครื่อง (ไม่มี GPU, ไม่มี GKE) ค่าใช้จ่ายเพียงอย่างเดียวคือค่าใช้จ่ายในการสร้างตัวเลือก ซึ่งได้แก่ การใช้งาน AlphaEvolve API และโทเค็น Vertex AI Gemini ที่ใช้

ทดสอบกับ: ไลบรารีของไคลเอ็นต์ AlphaEvolve Cloud v0.1.0, Python 3.9 ขึ้นไป ในตัวอย่าง circle_packing และ tsp

2. ก่อนเริ่มต้น

เลือกโปรเจ็กต์และเปิดใช้ API

  1. ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงิน แล้วตั้งค่าในเทอร์มินัลดังนี้
gcloud config set project <YOUR_PROJECT_ID>
  1. เปิดใช้ API 2 รายการที่ Codelab นี้ใช้ ได้แก่ Discovery Engine API ซึ่งให้บริการ AlphaEvolve และ Vertex AI API ซึ่งให้บริการโมเดล Gemini ที่สร้างตัวเลือก
gcloud services enable \
  discoveryengine.googleapis.com \
  aiplatform.googleapis.com

ค้นหารหัสแอป Gemini Enterprise

AlphaEvolve ให้บริการผ่าน Gemini Enterprise (พื้นผิว REST ที่อยู่เบื้องหลังคือ Discovery Engine API) คุณต้องใช้รหัส ของแอป ไม่ใช่ชื่อที่แสดง สำหรับการตั้งค่า GE_APP_ID

  1. เปิดหน้า แอป Gemini Enterprise สำหรับโปรเจ็กต์
  2. คลิกแอปแล้วคัดลอกช่องรหัส (เช่น 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

ก่อนที่จะเรียกใช้สิ่งใดก็ตาม ให้ทำความเข้าใจ 3 ส่วนที่ AlphaEvolve ต้องการ นี่คือโมเดลความคิดที่คุณจะนำไปใช้ซ้ำสำหรับการทดสอบทุกครั้ง

โปรแกรมเริ่มต้นและ EVOLVE-BLOCK

AlphaEvolve จะเขียนโค้ดใหม่เฉพาะระหว่างมาร์กเกอร์ 2 ตัว ส่วนอื่นๆ ทั้งหมดในไฟล์คือโครงสร้างพื้นฐานคงที่ที่แตะต้องไม่ได้ เปิด 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 แล้วตั้งค่าเฉพาะรหัสโปรเจ็กต์และรหัสแอป ส่วนอื่นๆ ทั้งหมดมีการตั้งค่าเริ่มต้นที่ใช้งานได้สำหรับการเรียกใช้ครั้งแรก

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 รายการ เนื่องจากคุณเรียกโมดูลโดยตรง (ไม่มี Wrapper) คุณจึงเห็นสิ่งที่ทำงานได้อย่างชัดเจน และแก้ไขไฟล์เพื่อทดลองได้

คุณควรเห็นเอาต์พุตที่คล้ายกับเอาต์พุตต่อไปนี้

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

หมายเหตุ: การแก้ปัญหา: การเรียกใช้ที่สิ้นสุดทันทีด้วย FAILED_PRECONDITION และ "AlphaEvolve requires the Vertex AI API to be enabled in this project" หมายความว่า aiplatform.googleapis.com ขาดหายไป ให้เปิดใช้ตามที่แสดงในส่วน "ก่อนเริ่มต้น" PERMISSION_DENIED หรือ 403 มักหมายความว่าไม่ได้เปิดใช้ Discovery Engine API "Failed to create experiment" ที่ไม่มีข้อความใดๆ ข้างต้นหมายความว่าข้อมูลเข้าสู่ระบบหรือ GE_APP_ID ใน .env ไม่ถูกต้อง

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 และสังเกตว่ามีเพียง construct_tour(distances, n) เท่านั้นที่อยู่ใน EVOLVE-BLOCK

ปัญหาทั้ง 2 รายการมีรูปแบบเดียวกันแต่มีส่วนต่างๆ ดังนี้

ปัญหา

ภาษา

การประเมิน

เมตริก (ยิ่งสูงยิ่งดี)

สิ่งที่พัฒนาขึ้น

circle_packing

Python

exec() ในเครื่อง

sum_of_radii

construct_packing()

tsp

Python

exec() ในเครื่อง

neg_tour_length

construct_tour()

ขณะที่การค้นหาทำงาน ให้ดู neg_tour_length ที่เพิ่มขึ้น (เข้าใกล้ 0 มากขึ้น) ขณะที่ Gemini เปลี่ยนจากการค้นหาเพื่อนบ้านที่ใกล้ที่สุดไปเป็นการปรับปรุงสไตล์ 2-opt / or-opt ซึ่งเป็นกลยุทธ์ที่คุณไม่ได้เขียน

7. ปรับการค้นหา

เมื่อการเรียกใช้ทั้ง 2 รายการทำงานแล้ว ให้ปรับงบประมาณใน .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 และการเปลี่ยนไปใช้โมเดลที่ใหญ่ขึ้นจะเพิ่มค่าใช้จ่าย เนื่องจาก Codelab นี้ใช้การประเมินในเครื่อง จึงไม่มีค่าใช้จ่าย GPU แต่คุณยังคงต้องจ่ายค่าการใช้งาน AlphaEvolve API และโทเค็น Vertex AI Gemini ต่อตัวเลือกที่สร้างขึ้น เริ่มต้นจากเล็กๆ

8. ล้างข้อมูล

Codelab นี้ใช้การประเมินในเครื่อง ดังนั้นจึงไม่มีสิ่งใดที่เรียกเก็บเงินได้เหลืออยู่ (ไม่มีคลัสเตอร์ ไม่มี GPU ไม่มีบริการที่ติดตั้งใช้งาน) หากต้องการรีเซ็ตการชำระเงินทั้งหมด ให้ทำดังนี้

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

หมายเหตุ: git clean -xfd จะลบ .env (รวมถึงการตั้งค่าโปรเจ็กต์) และ .venv ข้ามขั้นตอนนี้หากต้องการทดลองต่อไป

หากคุณสร้างโปรเจ็กต์สำหรับ Codelab นี้เท่านั้น ให้ลบโปรเจ็กต์ในคอนโซลเพื่อหยุดการเรียกเก็บเงินทั้งหมด

9. ขอแสดงความยินดี

ขอแสดงความยินดี คุณได้เรียกใช้การทดสอบ AlphaEvolve ครั้งแรกใน Google Cloud และพัฒนาอัลกอริทึม 2 รายการ ได้แก่ การจัดวงกลมให้ชิดกันและฮิวริสติก TSP โดยใช้เพียงโปรแกรมเริ่มต้น ฟังก์ชันการให้คะแนน และ Gemini

สิ่งที่คุณได้เรียนรู้

  • วิธีทำงานของลูป AlphaEvolve: โปรแกรมเริ่มต้น -> สร้าง -> ประเมิน -> ให้คะแนน -> ทำซ้ำ
  • สัญญา EVOLVE-BLOCK ที่อนุญาตให้การค้นหาเพิ่มประสิทธิภาพสูตรโดยไม่บิดเบือนเมตริก
  • วิธีที่คะแนนและข้อมูลเชิงลึกเกี่ยวกับความล้มเหลวนำทางรุ่นถัดไป
  • วิธีกำหนดค่า เรียกใช้ อ่าน และปรับการทดสอบการประเมินในเครื่อง

Codelab อื่นๆ

Codelab เหล่านี้เป็นแบบสแตนด์อโลน คุณจึงทำตามลำดับใดก็ได้

  • พัฒนาโค้ดที่คอมไพล์แล้วด้วยตัวประเมินระยะไกล: พัฒนาอัลกอริทึม Rust/C++ ที่ตัวประเมินแบบคอนเทนเนอร์ใน Cloud Run ให้คะแนน
  • พัฒนาการปรับแต่ง LLM ใน GKE + Ray: เรียกใช้การประเมิน GPU แบบขนานที่ใช้ทรัพยากรมากในคลัสเตอร์ของคุณเอง

เอกสารอ้างอิง