1 điểm bởi GN⁺ 2024-04-29 | 1 bình luận | Chia sẻ qua WhatsApp
  • Đâ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

 
GN⁺ 2024-04-29
Ý 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/

    • Hồi đó tôi làm trong đội Adobe Flash Player, và nhớ là đã dùng bộ phim Flash này làm ca kiểm thử :)
    • Có ví dụ kết quả nào sau khi chạy vài ngày không? Hoặc thậm chí là 20 năm? ;-)
    • Có vẻ như trên Firefox, khi nhấn tùy chọn "Save Local Population" thì nó bị crash. Bạn có đoán được lý do vì sao không?
      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
    • Nếu thêm phát hiện va chạm cho cấu trúc hoặc lò xo thay vì chỉ áp lên tải trọng thì kết quả sẽ ra sao?
    • Trong số những thứ trên Internet ngốn thời gian, bản gốc là một trong những thứ đáng nhớ nhất
      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

    • Thông thường, tốt hơn là giữ xác suất đột biến rất thấp để quần thể thay đổi chậm theo thời gian
      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
    • Nghe như đang chạy với chỉ một bản sao ưu tú duy nhất
      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
    • Có lẽ cần nhiều yếu tố thay đổi hơn ngoài hình dạng. Một chiếc xe chậm nhưng có động lực mạnh hơn có thể ít bị mắc vào rãnh hơn
      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

    • Tôi để nó chạy nền khá lâu với xác suất đột biến rất cao và đã có những dạng khá khác biệt
      Đó 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

    • Hơn nữa, kỳ lạ là có vẻ như toàn bộ tham số hệ thống treo đã bị bỏ đi
      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
    • Hóa ra boxcar2d hoạt động hoàn hảo trên Ruffle, và Internet Archive tự động tải Ruffle :)
      https://web.archive.org/web/20240428203838/http://boxcar2d.c...
    • Tôi cứ nghĩ mình đã từng thấy thứ như thế này hơn 10 năm trước, và đúng là vậy
  • 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!

    • Trong mô phỏng nơi những chiếc xe này chạy, không có chiều thứ ba để xe có thể đổ, và cũng không có chỗ để thêm một cặp bánh nữa
      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/

    • Chủ đề thì hay, nhưng có vẻ không phải là một subreddit sôi động lắm. Bài đăng mới nhất đã từ 3 năm trước :-/