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

สิ่งที่คุณจะได้ทำ
- กำหนดค่า การทดสอบ 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
- ในคอนโซล Google Cloud ให้เลือกหรือสร้างโปรเจ็กต์ที่เปิดใช้การเรียกเก็บเงิน แล้วตั้งค่าในเทอร์มินัลดังนี้
gcloud config set project <YOUR_PROJECT_ID>
- เปิดใช้ Discovery Engine API ซึ่งให้บริการ AlphaEvolve
gcloud services enable discoveryengine.googleapis.com
ค้นหารหัสแอป Gemini Enterprise
AlphaEvolve ให้บริการผ่าน Gemini Enterprise (พื้นผิว REST ที่อยู่เบื้องหลังคือ Discovery Engine API) คุณต้องใช้รหัส ของแอป ไม่ใช่ชื่อที่แสดง สำหรับการตั้งค่า GE_APP_ID
- เปิดหน้า แอป Gemini Enterprise สำหรับโปรเจ็กต์
- คลิกแอปและคัดลอกช่องรหัส (เช่น
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
ก่อนที่จะเรียกใช้สิ่งใดก็ตาม ให้ทำความเข้าใจ 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 (โปรเจ็กต์ งบประมาณ และการทำงานพร้อมกัน) ของคุณซ้ำ
- เพิ่มงบประมาณใน
.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-BLOCK
ปัญหาทั้ง 2 รายการมีรูปแบบเดียวกันแต่มีส่วนต่างๆ ดังนี้
ปัญหา | ภาษา | การประเมิน | เมตริก (ยิ่งสูงยิ่งดี) | สิ่งที่พัฒนาขึ้น |
| Python |
|
|
|
| Python |
|
|
|
ขณะที่การค้นหาทำงาน ให้ดู 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 แบบขนานที่ใช้ทรัพยากรมากในคลัสเตอร์ของคุณเอง