Riêng đặc biệt cái Flash này, dù mất khá nhiều thì giờ, đã khiến cho tôi rất thích thú và muốn nghiên cứu tham khảo thêm về dụng tác của đàn đám.
Trong chúng ta ai mà chẳng một, là quan sát tận mắt hoặc hai, xem trên truyền hình những hình ảnh thật linh động của những đàn chim hay đàn cá nhung nhúc lên tới hàng trăm hoặc hàng ngàn con bay lội chung với nhau trên trời dưới biển. Khi xem, chúng ta có thể thấy là chúng luôn sát cánh/vẩy nhau, quẹo trái, lượn phải rất đồng bộ, gần giống như là trong đàn chim đàn cá này hình như có một con chim con cá nào đó đứng ra làm lãnh tụ chỉ huy cho cả đám, điều khiển đưa hướng cho cả đàn, nhưng tôi tự biết là chuyện này không thể nào có vì chính tôi chưa bao giờ may mắn có dịp gặp mặt bà Đại Tướng cá hay anh Hội Trưởng chim (dĩ nhiên là ngoại trừ anh HT HAH CHS chim VTT). Thỉnh thoảng cũng có một số đông hoặc chỉ vài con tách bầy ra khỏi đoàn thể rồi sau đó lại có lúc trở lại vào đàn hoặc trở thành một đoàn thể mới tuy nhỏ hơn hướng về một phương trời xa lạ. Càng thú vị hơn nữa là nếu chúng ta được coi sự hành vi tác động của đoàn thể này khi cả đàn xúm nhau tranh dành ăn mồi hoặc chạy tránh các con thú dữ tới tấn công đoàn thể.
Cái vấn đề tại sao đàn chim đàn cá lại có những hành vi như trên, do tánh nội sinh hay vì ảnh hưởng của môi trường, thì ngoài nội dung của bài viết này. Dưới đây tôi chỉ xin nói về sự mô tả hành vi phức tạp nhưng có sự hạp chủng của đoàn thể bằng cách tạo ra vài quy luật thật đơn giản cho từng cá nhân trong đàn.
Vào năm 1986, ông Craig Reynolds có viết một bài báo kỷ thuật về việc ông ta dùng máy vi tính để mô tả hành vi liên kết của đàn đám như cá hoặc chim. Ông đã dùng hình học ba chiều (three-dimensional computational geometry) để ước tính sự chuyển động của một đàn sinh vật nhân tạo (artificial life) mà ông đã đặt tên cho nó là con "Boids" thay vì là con chim (flock of birds) hoặc cá (school of fish) vì nó có thể làm tiêu biểu cho bất cứ một loại sinh vật nào. Sự mô tả chuyển động này gồm có ba hàm số khuynh hướng rất đơn giản để ràng buộc hành vi của mỗi cá nhân dựa lên trên vị trí và vận tốc cũa các bạn láng giềng chung quanh hoặc gần mình nhất.
1. Sự cố kết, phụ thuộc, gắn bó với đoàn thể (Cohesion)
2. Sự liên hướng, chung lối, sánh được vận tốc, khuynh hướng (Alignment)
3. Sự biệt lập, tự chủ, tránh chung đụng (Separation)
Sự cố kết nói về động lực đi lại chỗ toạ độ trung bình của các bạn láng giềng mình đang ở. Sự liên hướng nói về hành vi hướng tới phía trung bình của các phương hướng các bạn láng giềng mình đang đi. Sự biệt lập nói về cái tránh chen chúc đông đảo hoặc va chạm đụng nhau với các bạn láng giềng của mình.
Sự chuyển động của đàn đám chỉ cần thiết là mỗi con Boid phản ứng với các bạn láng giềng của mình mà thôi và láng giềng thì được tiêu biểu bằng khoảng cách (đo từ tâm điểm) và góc cạnh (đo từ phương hướng) của mình so với các bạn láng giềng. Các con Boids khác ngoài khu vực láng giềng tiêu biểu của mình thì hoàn toàn mình không cần phải lưu ý đến.
Nói thì dễ, nhưng thực hành thì rất khó vì cần thiết phải tính toán vị trí của chính mình và so nó với tất cả toạ độ của từng con Boids trong đàn để biết được láng giềng của mình là những ai trước khi phản ứng với những bạn láng giềng ấy. Lấy thí dụ như trong đàn gồm có một ngàn con Boids thì ở mỗi tíc tắc con Boids số 1 phải dùng toạ độ của mình mà tính ra xem từ con 2 cho đến con 1000, những con nào là nằm trong phạm vi láng giềng của mình. Song song với đó, con 2 cũng phải sánh mình như vậy với con 1 và với từ con 3 đến con 1000. Rồi cứ thế con 3, con 4, con 5 cho đến con 1000, tất cả đều phải như vậy trước khi áp dụng những công thức hàm số của sự cố kết, liên hướng và biệt lập cho mỗi con. Năm 1986, ông Craig Reynolds phải áp dụng phương thức này trên một chiếc máy IBM vĩ đại (mainframe) nhưng bây giờ chúng ta đã có thể áp dụng nó trên bất cứ một cái máy vi tính cá nhân (personal computer) nào (miễn là chúng ta giới hạn con số đông một chút như chục, trăm hay ngàn con thôi thay vì triệu con).
Bài vi tính áp dụng phương thức này có thể được giản dị hoá như sau:
bắt đầu toạ độ()
VÒNG
vẽ Boids()
di chuyển tất cả Boids tới toạ độ mới()
HẾT VÒNG
Vấn đề di chuyển tất cả Boids tới toạ độ mới được giản dị hoá như sau:
MỤC di chuyển tất cả Boids tới toạ độ mới()
vec tơ v1, v2, v3
Boid b
CHO MỖI Boid b
v1 = quy tắc cố kết(b)
v2 = quy tắc liên hướng(b)
v3 = quy tắc biệt lập(b)
b.vậntốc = b.vậntốc + v1 + v2 + v3
b.toạđộ = b.toạđộ + b.vậntốc
HẾT CHO MỖI
HẾT MỤC
Ngoài cái giản dị hoá của phương thức này, chúng ta cũng có thể thêm vào những biến số (variables) khác thí dụ như ngoại lực (sóng ngầm, gió lốc - làm chậm lại hoặc đẩy nhanh hơn), thú dữ (cá heo, con ó - tránh xa bỏ cả mọi quy tắc), mồi ăn (cá nhỏ hơn, châu chấu - chạy lại ăn tạm quên đi qui tắc biệt lập), chướng ngại vật (chạy vòng qua), nghỉ mệt (rồi lúc nào đó chim cũng phải đậu xuống) để có thể làm ảnh hưỡng ít hay nhiều đến sự tính toán vị trí mới của các con Boids.
Từ năm 1986 đến nay, phương thức Boids này đã được bành trướng rộng rãi và dùng để mô tả từ hành vi của đàn đám, xếp hàng ở nhà băng, kẹt xe di chuyển trên xa lộ, xác suất bầu cử, đến ảnh hưởng bạn bè, vân vân. Lấy thí dụ, đám Bảng Vàng VTT gồm 60 ông già đang bàn cải là sau DH2010 sẽ đi chơi ở đâu. Một số đông thì muốn đi Mễ chơi, một số thì lại muốn đi Las Vegas bài bạc, một số thì không khuynh hướng ai sao tui vậy. Tôi có thể làm một bài vi tính áp dụng phương cách Boids cộng thêm một biến số của vài đặc điểm của từng bạn như sau:
Lấy 1 là nhẹ, 2 trung bình, và 3 mạnh
Bạn |
Cố Kết |
Liên Hướng |
Biệt Lập |
Tổng Số |
A |
3 |
2 |
1 |
6 |
B |
1 |
1 |
2 |
4 |
.. |
.. |
.. |
.. |
.. |
Thằng A bạn tôi rất quí thân bạn bè nên tôi cho nó 3 điểm phần Cố Kết. Nhưng quý đây không có nghĩa là nó luôn a dua với đám đông nên tôi cho nó 2 điểm phần Liên Hướng, Còn về biệt lập thì tôi đã quá biết hắn nên cho nó 1 thôi. Đại khái là tôi làm thành một danh sách điểm A6, B4, C3, D9, E7, vân vân và dùng đặc tính điểm để thay đổi phần nào phương hướng của từng bạn. Rồi tôi cho chạy bài vi tính này vài tiếng hay vài ngày xem sau Đại Hội 2010 đám Bảng Vàng có khuynh hướng chỉ Nam hay trực Bắc?
Hy vọng các bạn thưởng thức cái Flash áp dụng phương cách Boids dưới đây mà trong đó tôi đã tạo ra 100 con chim rồi thả chúng bay bỗng chỗ này chỗ kia (randomly) trên khung trời VTT, xong ngồi uống cà phê xem chúng tìm về với đoàn thể, như chính đại gia đình CHS VTT của chúng ta vậy.
Thân ái,
HCD
Tham khảo: “Boids - Background and Update by Craig Reynolds” http://www.red3d.com/cwr/boids/