- Đây là một mô phỏng HTML5 có thể xem ngay trong trình duyệt, cho thấy quá trình các hình dạng hai bánh xe được tạo ngẫu nhiên qua nhiều thế hệ sẽ được chọn lọc và đột biến thành những chiếc xe chạy được xa hơn
- Ý tưởng được lấy cảm hứng lỏng từ BoxCar2D, nhưng mã nguồn được viết mới và dùng box2d cho phần tính toán vật lý
- Có thể thay đổi điều kiện tiến hóa bằng cách điều chỉnh tỷ lệ đột biến, độ lớn đột biến, điều kiện mặt đất, trọng lực và số lượng elite clones
- Có thể tạo cùng một đường đua bằng cùng một seed nên dễ so sánh kết quả, nhưng bản thân mô phỏng không hoàn toàn deterministic
- Bộ gen chứa hình dạng, vị trí và mật độ của thân xe và bánh xe; khi đi xa hơn, địa hình trở nên phức tạp hơn nên chỉ riêng kỷ lục cao nhất khó đảm bảo tính ổn định
Cách ô tô tiến hóa
- Chương trình là một mô phỏng thuật toán di truyền đơn giản, tiến hóa các hình dạng hai bánh xe ngẫu nhiên qua từng thế hệ để tạo ra những cá thể có thể chạy như ô tô
- Ý tưởng được lấy cảm hứng lỏng từ BoxCar2D, nhưng mã được viết lại từ đầu
- Engine vật lý sử dụng box2d
- seedrandom.js do David Bau viết
Điều khiển và thiết lập tiến hóa
- Có thể tiếp tục trạng thái thử nghiệm bằng tính năng lưu và khôi phục
- Save Population lưu quần thể hiện tại vào máy cục bộ
- Restore Saved Population khôi phục quần thể đã lưu trước đó
- Bạn cũng có thể tự thay đổi cách mô phỏng chạy
- Suprise bật/tắt việc vẽ để mô phỏng chạy nhanh hơn
- New Population khởi động lại toàn bộ quần thể ô tô trong khi vẫn giữ nguyên đường đua đã tạo
- View top replay tạm dừng mô phỏng hiện tại và hiển thị chiếc xe có hiệu năng tốt nhất; bấm lại để tiếp tục mô phỏng
- Create new world with seed cho phép tạo cùng một đường đua với cùng một seed, nên có thể thi đấu với người khác bằng cùng seed đó
- Các tham số tiến hóa quyết định mức độ thay đổi của thế hệ mới
- Mutation rate là xác suất mỗi gene của mỗi cá thể bị đột biến thành một giá trị ngẫu nhiên khi thế hệ mới được sinh ra
- Mutation size là phạm vi mà mỗi gene có thể đột biến; giá trị càng thấp thì kết quả càng gần với giá trị gốc
- Elite clones xác định số lượng n chiếc xe đứng đầu sẽ được sao chép nguyên vẹn sang thế hệ tiếp theo
Thay đổi hiệu năng qua biểu đồ
- Màu sắc trên biểu đồ cho thấy hiệu năng của từng thế hệ theo các tiêu chí khác nhau
- Màu đỏ biểu thị điểm số cao nhất của mỗi thế hệ
- Màu xanh lá biểu thị giá trị trung bình của 10 chiếc xe tốt nhất trong mỗi thế hệ
- Màu xanh dương biểu thị giá trị trung bình của toàn bộ thế hệ
Cấu trúc ô tô được biểu diễn bởi bộ gen
- Bộ gen của ô tô được chia thành nhiều gene cấu thành thân xe và bánh xe
- Shape: 1 gene cho mỗi đỉnh, tổng cộng 8 gene
- Wheel size: 1 gene cho mỗi bánh, tổng cộng 2 gene
- Wheel position: 1 gene cho mỗi bánh, tổng cộng 2 gene
- Wheel density: 1 gene cho mỗi bánh, tổng cộng 2 gene; bánh xe càng tối màu thì mật độ càng cao
- Chassis density: 1 gene; thân xe càng tối màu thì mật độ càng cao
Giới hạn và công khai mã nguồn
- Mô phỏng không deterministic như kỳ vọng, nên chiếc xe tốt nhất có thể không tái hiện được hiệu năng như trước
- Địa hình trở nên phức tạp hơn khi khoảng cách tăng lên
- Vì không xử lý riêng việc xác nhận tải script, nếu hoạt động bất thường thì cần làm mới trang
- Mã nguồn được công khai tại GitHub repository và có thể nhận đóng góp
- Ban đầu được viết tại rednuht.org, sau đó có thêm sự tham gia của những người đóng góp trên GitHub
1 bình luận
Ý kiến trên Hacker News
Tôi làm cái này lần đầu cách đây gần 20 năm, nên thật vui khi thấy nó thỉnh thoảng vẫn xuất hiện ở đây
Nhờ Ruffle mà nó vẫn chạy được trong trình duyệt:
https://peteshadbolt.co.uk/posts/ga/
Trang này thật sự rất tuyệt. Mỗi lần nó được đăng lên là tôi lại bị cuốn vào quá lâu
Tôi từng để nó chạy trong giờ ăn trưa cùng một người bạn, rồi quay lại xem ai thắng
Có vẻ như lúc nào cũng có một thiết kế may mắn thành công rồi thống trị qua từng thế hệ, sau đó các đột biến rơi vào ngõ cụt, thậm chí không tiến gần đến mức hoạt động tốt
Kiểu như qua hàng trăm thế hệ mà top 10 vẫn không đổi. Có thể đó là đặc tính của thuật toán di truyền. Nó có thể nhanh chóng tìm được một nghiệm khá tốt rồi mắc kẹt ở cực đại cục bộ, hoặc có lẽ cần tinh chỉnh thêm xác suất đột biến và độ lớn đột biến
Xác suất đột biến cao giúp đạt tối ưu cục bộ nhanh, nhưng khó thoát ra; còn xác suất đột biến thấp cần nhiều thế hệ hơn nhiều, nhưng thường dẫn đến khả năng thích nghi tốt hơn
Trong heuristic di truyền, đó là một cách làm rất tệ chính vì hiện tượng như vậy
Nhưng hiện tại động lực và tốc độ không đổi, và sau vài thế hệ thì dường như chỉ có hình dạng thay đổi rất ít. Kéo xuống dưới thì thấy phần mô tả bộ gen: 8 gen hình dạng, 2 gen kích thước bánh xe, 2 gen vị trí bánh xe, 2 gen mật độ bánh xe, 1 gen mật độ thân xe. Cuối cùng nó hội tụ về hai bánh xe và một dạng thân xe trung bình, rồi sau đó có vẻ không tiến triển nhiều. Sẽ thú vị nếu đưa cả động lực và tốc độ vào làm yếu tố biến dị
Thú vị đấy. Tuy nhiên điều chỉnh tốc độ không thật trực quan. Nhấn "Surprise" sẽ làm nó nhanh hơn để có thể lướt qua nhiều vòng lặp nhanh chóng
Xác suất đột biến, tức khả năng g thay đổi, và độ lớn đột biến Δg là các siêu tham số hay để tinh chỉnh trong khi quan sát quần thể tiến hóa theo thời gian. Sẽ thú vị nếu có một gen "compliance" để xe phát triển một dạng hệ thống treo nào đó. Trong hầu hết các lần tôi chạy thử, gần như tất cả đều tiến hóa thành dạng giống xe máy Tron
Đó là dạng bánh lớn gắn với bánh nhỏ, nảy tưng tưng qua mọi chướng ngại vật
Đây là các cuộc thảo luận trước đây:
https://news.ycombinator.com/item?id=5942757 (664 points | Jun 2013 | 169 comments)
https://news.ycombinator.com/item?id=10600486 (162 points | Nov 2015 | 57 comments)
Đây là boxcar2d không cần Flash
https://news.ycombinator.com/item?id=2196747
Mô phỏng vật lý rõ ràng dường như dùng va chạm không đàn hồi, điều này khá phi thực tế, vì thế nhiều chiếc xe trông có vẻ đủ tốt lại không vượt qua được đường đua. Hệ số ma sát cũng có vẻ rất thấp. Hầu hết xe tôi tạo ra thậm chí không leo nổi con dốc gồm hai đoạn
https://web.archive.org/web/20240428203838/http://boxcar2d.c...
Có một lỗi nhỏ. Sau khoảng 280m thì không còn đường nữa, nên mọi chiếc xe đều rơi xuống một cái hố không đáy
Nó nói là “tiến hóa các dạng hai bánh ngẫu nhiên thành xe qua nhiều thế hệ”, nhưng ở nơi tôi sống, ô tô hai bánh được gọi là xe máy
Dù vậy mô phỏng rất tuyệt!
Vì vậy, giống như ô tô bốn bánh truyền thống, chúng không bị đổ ngay cả khi tốc độ bằng 0. Tôi nghĩ chỉ riêng tính chất đó cũng khiến hành vi của chúng gần với ô tô bốn bánh hơn là xe máy
Tôi thích vì đây là một trực quan hóa rất trực quan và vui nhộn
Nó đã khiến tôi thử nghiệm thuật toán di truyền trong "Self-parking car evolution":
https://trekhleb.dev/self-parking-car-evolution/
Nó làm tôi nhớ đến một ứng dụng Android tuyệt vời tên là Cell Lab. Bạn có thể tạo sinh vật đa bào hoặc đơn bào để sống trong đĩa Petri
Nếu muốn, bạn cũng có thể tăng mức bức xạ để gây ra đột biến và tiến hóa
Nếu thích những thứ như thế này, hãy ghé https://old.reddit.com/r/WatchMachinesLearn/