เริ่มต้นใช้งาน 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 Cloud
  • เรียกใช้ การค้นหาเชิงวิวัฒนาการที่ปรับปรุงอัลกอริทึมการจัดวงกลมให้ชิดกันในเครื่อง
  • อ่าน คะแนน การจัดอันดับ และการแสดงภาพโปรแกรมที่พัฒนาขึ้นดีที่สุด
  • ทำซ้ำ ลูปในปัญหาการเดินทางของพนักงานขายเพื่อสรุปรูปแบบ
  • ปรับ งบประมาณการค้นหา (โค้ดที่พิจารณา การทำงานพร้อมกัน โมเดล)

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

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

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

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

ค่าใช้จ่าย: Codelab นี้ใช้การประเมินในเครื่อง (ไม่มี GPU, ไม่มี GKE) ค่าใช้จ่ายเพียงอย่างเดียวคือการใช้งาน AlphaEvolve API เพื่อสร้างโค้ดที่พิจารณา

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

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

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

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

หมายเหตุ: การแก้ปัญหา: 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 ที่เพิ่มขึ้น (เข้าใกล้ศูนย์มากขึ้น) เมื่อ 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 ต่อโค้ดที่พิจารณาที่สร้างขึ้น เริ่มต้นด้วยจำนวนน้อยๆ

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 แบบขนานที่ใช้ทรัพยากรมากในคลัสเตอร์ของคุณเอง

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