Vinova tuyển lập trình viên Mobile & Web ở Hà Nội, lương $300-1000

Article: Từ qui luật đơn giản đến hệ thống phức tạp 1543

complex system, conway, game of life, quartz composer
ngocdaothanh.myopenid.com 175
Updated over 3 years ago

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 và cách viết chương trình giả lập bằng Quartz Composer.

Game of life

Đây là game không có người chơi, 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), 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. Để 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{#emotions_dlg.laughing}) 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

Có thể download tập tin ở dưới, xem sản phẩm cuối cùng ở YouTube.

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

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 làm "cò sú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{#emotions_dlg.surprised}!

Comments

You must login to be able to comment

Uploaded files
Name Size Uploader Time
game-of-life.jpg 31.7 KB over 2 years ago
game-of-life.qtz 782.5 KB over 2 years ago

You must login to be able to upload

Nhà tài trợ:

Mọi người đều tự do viết bài, sửa bài của người khác, và bình luận ở trang web này. Bạn muốn chủ động tạo bài mới để chia sẻ kinh nghiệm với mọi người? Xin click link ở dưới.

Create new content