OpenEvolve: tiến hoá code bằng LLM
Đăng ngày 4/9/2026
OpenEvolve là bản mã nguồn mở của AlphaEvolve (DeepMind) - thay vì sửa code bằng tay, để LLM đóng vai trò “đột biến” trong một vòng lặp tiến hoá, chọn lọc theo điểm số từ evaluator.
Vòng lặp hoạt động thế nào
4 thành phần chính:
- Prompt Sampler - dựng prompt từ code cũ + điểm số + mô tả bài toán
- LLM Ensemble - nhiều model, có fallback nếu model chính lỗi
- Evaluator - chạy code sinh ra, trả về điểm số
- Program Database - lưu quần thể, dùng thuật toán MAP-Elites
Mỗi vòng: chọn 2 chương trình (1 để lấy điểm, 1 để “truyền cảm hứng”) → LLM sinh biến thể mới → evaluator chấm điểm → cập nhật vào database. Database chia thành nhiều island (quần thể tách biệt), thỉnh thoảng di cư cá thể qua lại - tránh hội tụ sớm về một lời giải cục bộ.
Cài và chạy thử
pip install openevolve
export OPENAI_API_KEY="your-key"
python openevolve-run.py \
examples/function_minimization/initial_program.py \
examples/function_minimization/evaluator.py \
--iterations 50
Dùng được OpenAI, Gemini, model local, hoặc bất kỳ API tương thích OpenAI nào.
Evaluator cascade
Evaluator không chỉ trả điểm mà còn trả artifacts - stderr, log profiling, cảnh báo build, nhận xét từ LLM khác. Artifacts này được đưa thẳng vào prompt của vòng tiếp theo, tạo thành vòng phản hồi lỗi:
evaluator:
enable_artifacts: true # đưa lỗi vào prompt vòng sau
cascade_evaluation: true # chấm nhiều giai đoạn, loại sớm code tệ
use_llm_feedback: true # dùng LLM chấm chất lượng code
Config đáng chú ý
| Tham số | Ý nghĩa |
|---|---|
database.num_islands | số quần thể song song |
database.population_size | số cá thể mỗi island |
database.feature_dimensions | trục quality-diversity để phân loại cá thể |
prompt.num_top_programs / num_diverse_programs | chọn code tốt nhất / code đa dạng để đưa vào prompt |
random_seed | seed cố định để tái lập kết quả |
Kết quả
- Bài toán circle packing (n=26): đạt kết quả tiệm cận benchmark đã công bố
- Kernel attention trên GPU: tăng tốc 2.8x trên Apple M1 Pro
- Nhìn chung báo cáo tăng tốc 2-3x trên nhiều bài toán khác nhau
Khi nào đáng dùng
Hợp với bài toán có hàm đánh giá rõ ràng, chạy nhanh, đo được (tốc độ, độ chính xác, chi phí) - vì cả vòng lặp phụ thuộc vào điểm số evaluator trả về. Không hợp với việc cần con người đánh giá chủ quan hoặc bài toán không thể viết được evaluator tự động.