Game of life - Từ qui luật đơn giản đến hệ thống phức tạp
Computer Graphics
5
White

Ngoc Dao viết ngày 21/03/2016

Trong tự nhiên, có những qui luật đối với từng cá thể thì cực kì đơn giản, nhưng khi áp dụng cho toàn bộ cá thể của quần thể thì lại mang lại tác dụng cực kì to lớn. Làm thế nào bầy châu chấu có thể lên đến hàng triệu con mà vẫn di chuyển được cùng một hướng? Làm thế nào bầy kiến (có câu "đông như kiến") có thể di chuyển mà không bị "kẹt xe"? Làm thế nào bầy cá có thể cùng nhau đột ngột đổi hướng để tránh kẻ thù? Tất cả đều chỉ dựa trên một vài qui luật cực kì đơn giản.

Trong vài chục năm gần đây, con người đã bắt đầu nhận thức được điều này, mở ra ngành học mới gọi là Hệ thống phức tạp (complex system) Ngành học này rất rộng, đề tài nổi tiếng nhất có lẽ là hiệu ứng cánh bướm và hình học Fractal,  ứng dụng dễ thấy nhất là ứng dụng liên quan đến giả lập (simulation): giả lập mô hình khí hậu để dự báo thời tiết cho đúng, giả lập mô hình giao thông để tìm ra biện pháp tránh kẹt xe, giả lập mô hình cháy rừng để dự báo tốc độ cháy và phạm vi cháy, giả lập mô hình lũ lụt để đề ra biện pháp sơ tán dân cho hiệu quả. Nói chung ngành học này nằm ở tầm vĩ mô vì nghiên cứu về quần thể, nên rất cần sự quan tâm và hỗ trợ của chính phủ.

Để gợi cảm hứng cho nhiều người, bài viết này giới thiệu Game of life (bài này nghe nói xin việc vào Google có thể bị hỏi, nếu muốn xin vào Google thì nên tập) và cách viết chương trình giả lập bằng Quartz Composer.

Luật Game of life

Đây là game không có tương tác từ người chơi, chỉ liên quan đến tiến hoá của quần thể. Trên bàn cờ kẻ ô lưới, có 4 luật khá hợp với tự nhiên như sau:

  1. Nếu ô có dưới 2 hàng xóm, thì chết vì dân số suy giảm.
  2. Nếu ô có trên 3 hàng xóm, thì cũng chết vì dân số quá đông.
  3. Nếu ô có 2 hoặc 3 hàng xóm, thì sống y nguyên vì phát triển bền vững.
  4. Nếu xung quanh ô đã chết có đúng 3 ô sống, thì nó sống lại.

Chỉ có vài luật đơn giản, nhưng khi hiển thị ra màn hình thì hình ảnh thu được rất lôi cuốn. Vấn đề của chúng ta bây giờ là dùng công cụ gì đó để giả lập và thu lại hình ảnh này.

Processing vs Quartz Composer

Khi dạy môn Hệ thống phức tạp cho sinh viên, nhiều trường đại học sử dụng Processing. Đây là IDE cho phép dùng ngôn ngữ giống nhưng đơn giản hơn Java để viết chương trình vẽ hình ảnh lên màn hình. Vì đa số sinh viên đều đã học qua Java, nên đây là lựa chọn rất tốt và hợp lí. Ở đại học Tsukuba (Nhật Bản) nơi tác giả bài này học, chỉ cần hướng dẫn khoảng 2 tiết học là sinh viên đã biết dùng Processing để viết chương trình giả lập tình trạng giao thông ở ngã tư đèn xanh đèn đỏ, chương trình giả lập sự lan của cháy rừng.

Vimeo có video hướng dẫn cách viết bằng Processing. Tuy nhiên, để gây khó khăn cho người đọc, bài viết này dùng Quartz Composer, công cụ có sẵn trên Mac OS X. Để thực hành thử được phần tiếp theo, bạn cần có máy Mac (máy Mac giờ cũng rẻ như máy Windows mà lại dễ dùng hơn, nếu chưa có thì bạn nên xem xét mua đại một cái) và biết sơ qua Quartz Composer (mất chừng 1 tiếng google).

Viết chương trình giả lập bằng Quartz Composer

Download chương trình

Sơ đồ chương trình:

alt text

Cốt lõi nằm ở patch Core Image FilterJavaScript, lấy từ bài Quartz Composer - Conway's Game of Life - 宇宙大決戦 ở blog netswitch! của nanki. Patch Core Image Filter chỉ tính toán được một thế hệ, cần dùng thêm patch JavaScript để tạo vòng lặp.

Đầu vào dummy không được dùng trong patch JavaScript, nhưng phải có vì nó dùng để tạo sự kiện: khi Quartz Composer thấy đầu vào thay đổi, nó sẽ vẽ lại màn hình. Điểm đáng chú ý nữa là trong patch này, ảnh của thế hệ trước được lưu lại (giống như biến static trong hàm của C) ở đối tượng toàn cục Object. Thật là chiêu thức vô cùng lợi hại!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Ngoc Dao

102 bài viết.
283 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
62 8
Làm thế nào để nâng cấp trang web mà không làm gián đoạn dịch vụ? Đây là câu hỏi phỏng vấn các công ty lớn thường hỏi khi bạn xin vào vị trí làm lậ...
Ngoc Dao viết hơn 2 năm trước
62 8
White
40 1
Bài viết này giải thích sự khác khác nhau giữa hai ngành khoa học máy tính (computer science) và kĩ thuật phần mềm (software engineering), hi vọng ...
Ngoc Dao viết hơn 2 năm trước
40 1
White
34 1
Nếu là team leader, giám đốc công ty hay tướng chỉ huy quân đội, vấn đề cơ bản bạn gặp phải là “hướng mọi người đi theo con đường bạn chỉ ra”. Thử...
Ngoc Dao viết hơn 2 năm trước
34 1
Bài viết liên quan
White
11 0
Giới thiệu Mình rất thích học đồ hoạ máy tính nhưng luôn lười vì: Học thư viện đồ hoạ trên native platform tốn thời gian. API khó hiểu khó hình ...
Bùi Hồng Hà viết 3 năm trước
11 0
White
0 1
Bài này do bạn Phan Anh Vũ chia sẻ, khi còn là sinh viên BKHN, nay bạn sắp lấy vợ. Thuật toán sử dụng là quay tất cả các điểm quanh điểm trên cù...
Ngoc Dao viết hơn 2 năm trước
0 1
White
1 0
Có bạn trẻ bảo: nghe các anh lớn bảo muốn giỏi xử lí ảnh phải học bằng MATLAB. Quả vậy, muốn giỏi phải học nhiều, muốn học được nhiều phải học nhan...
Ngoc Dao viết hơn 2 năm trước
1 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
102 bài viết.
283 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!