Tạo HoáWiki
Tìm
Mô phỏng sự sống

L-system là gì: công thức mọc cây của Aristid Lindenmayer

L-system do Lindenmayer đưa ra năm 1968 thay mọi ký hiệu cùng lúc theo vài luật viết lại; dịch thành nét vẽ, chuỗi ký hiệu mọc thành cành cây, bụi cỏ rất giống thật.

L-system là gì: công thức mọc cây của Aristid Lindenmayer

L-system (hệ Lindenmayer) là một kiểu "ngữ pháp" do nhà sinh học Hungary Aristid Lindenmayer đưa ra năm 1968 để mô tả cách cây và tảo lớn lên: bắt đầu từ một chuỗi ký hiệu ngắn, rồi ở mỗi bước thay đồng thời mọi ký hiệu theo vài luật viết lại, giống như mọi tế bào cùng phân chia. Khi dịch các ký hiệu thành nét vẽ (đi tới, rẽ trái, rẽ phải, tách nhánh), vài dòng luật đã đủ vẽ ra cây cỏ, bụi rậm, hoa lá trông rất thật. Mô hình cho thấy hình dạng phức tạp của thực vật có thể sinh ra từ một công thức phát triển đơn giản lặp lại.

Aristid Lindenmayer và câu hỏi về tảo

Aristid Lindenmayer (1925–1989) là nhà sinh học lý thuyết, làm việc nhiều năm ở Đại học Utrecht (Hà Lan). Ông quan tâm tới câu hỏi: làm sao các tế bào ở một sợi tảo hay một chồi cây "biết" khi nào phân chia, khi nào tách nhánh, để cả cơ thể ra đúng hình dạng? Năm 1968, ông công bố trên tạp chí Journal of Theoretical Biology một hệ hình thức để mô tả sự phát triển của các sinh vật đa bào dạng sợi.

Ý tưởng của ông gần với ngữ pháp hình thức mà các nhà ngôn ngữ học và tin học dùng. Nhưng có một điểm khác quyết định: trong ngữ pháp thông thường, mỗi bước thay một ký hiệu; trong L-system, mọi ký hiệu được thay cùng một lúc. Đó là vì trong một cơ thể đang lớn, mọi tế bào cùng sống và cùng thay đổi, không chờ nhau.

Ví dụ đầu tiên: sợi tảo và dãy Fibonacci

Ví dụ kinh điển của Lindenmayer dùng hai ký hiệu: A (tế bào trưởng thành, sẵn sàng phân chia) và B (tế bào non). Hai luật:

  • A → AB (tế bào trưởng thành phân chia thành một trưởng thành và một non)
  • B → A (tế bào non lớn lên thành trưởng thành)

Bắt đầu từ một ký hiệu A, áp luật cho mọi ký hiệu cùng lúc:

BướcChuỗiĐộ dài
0A1
1AB2
2ABA3
3ABAAB5
4ABAABABA8
5ABAABABAABAAB13

Độ dài chuỗi đi theo dãy Fibonacci: 1, 2, 3, 5, 8, 13… Đây không phải trùng hợp. Mỗi bước, số tế bào mới bằng số tế bào trưởng thành, mà số trưởng thành lại bằng tổng số tế bào của bước trước. Hai luật ngắn đã mã hoá một quy luật tăng trưởng.

Từ chuỗi ký hiệu thành hình cây

Bản thân chuỗi chữ chưa phải hình. Bước ngoặt đến khi người ta đọc mỗi ký hiệu như một lệnh vẽ cho một "con rùa" cầm bút, theo kiểu đồ hoạ con rùa của ngôn ngữ lập trình Logo:

Ký hiệuLệnh cho con rùa
FĐi tới một đoạn và vẽ nét
+Quay trái một góc định sẵn
−Quay phải một góc định sẵn
[Ghi nhớ vị trí và hướng hiện tại (bắt đầu một nhánh)
]Quay về vị trí và hướng đã ghi nhớ (kết thúc nhánh)

Cặp dấu ngoặc vuông là chìa khoá: nó cho phép vẽ một nhánh, rồi quay về thân để vẽ tiếp. Với chỉ một luật như F → F[+F]F[−F]F và góc khoảng 25°, sau bốn năm bước lặp, con rùa vẽ ra một cành cây có nhánh hai bên, nhánh con trên nhánh lớn, trông như một cây cỏ thật. Đổi luật, đổi góc là ra một loài "cây" khác.

Vì sao trông giống cây thật

Cây thật cũng lớn theo kiểu "module": một chồi ngọn sinh ra một đốt thân, một lá, một chồi nách; chồi nách lại lặp lại đúng quá trình ấy. Mỗi bộ phận lặp lại công thức của bộ phận sinh ra nó. L-system nắm đúng cái lặp này. Hình thu được có tính tự đồng dạng, tức nhánh nhỏ giống cả cây thu nhỏ; đây là một tính chất mà toán học gọi là fractal, nhưng thực vật thật chỉ tự đồng dạng trong vài cấp.

Những mở rộng gần với sinh học hơn

  • L-system ngẫu nhiên: mỗi ký hiệu có vài luật thay thế, chọn ngẫu nhiên theo xác suất. Nhờ vậy mỗi cây vẽ ra hơi khác nhau, như cây cùng loài ngoài vườn.
  • L-system nhạy ngữ cảnh: luật thay ký hiệu tuỳ vào ký hiệu bên cạnh. Điều này mô phỏng tín hiệu truyền dọc thân cây, ví dụ hoóc môn từ ngọn xuống gốc báo khi nào ra hoa.
  • L-system có tham số: mỗi ký hiệu mang theo con số như độ dài, độ dày, tuổi. Đoạn thân già dày lên, lá non nhỏ dần.
  • L-system mở: cây "giao tiếp" với môi trường, ví dụ nhánh bị che bóng thì ngừng mọc, rễ mọc về phía có nước.

Nhà khoa học máy tính Przemysław Prusinkiewicz, cộng tác với Lindenmayer từ những năm 1980, đã phát triển các mở rộng này. Cuốn sách chung của hai ông, The Algorithmic Beauty of Plants (1990), là tài liệu kinh điển của ngành, nay được tác giả cho tải miễn phí.

L-system dùng để làm gì

  • Sinh học thực vật: mô phỏng cây trồng để nghiên cứu cách sắp lá, cách cây chia nắng, hiệu quả của việc tỉa cành, ảnh hưởng của mật độ trồng.
  • Nông học: mô hình "cây ảo" kết hợp cấu trúc và sinh lý giúp dự báo năng suất theo cách trồng.
  • Đồ hoạ: phim hoạt hình, phần mềm dựng cảnh dùng biến thể của L-system để tạo rừng cây không cây nào giống cây nào.
  • Giáo dục: một bài tập lập trình đẹp, kết hợp đệ quy, chuỗi ký tự và hình học.

Giới hạn của mô hình

L-system mô tả hình dạng và trình tự phát triển, không tự giải thích vì sao cây có hình dạng ấy. Luật viết lại là do người làm mô hình chọn sao cho khớp quan sát. Để hiểu vì sao, nhà khoa học phải nối luật với cơ chế thật: gen nào, hoóc môn nào, ánh sáng tác động ra sao. Ngoài ra, cây thật chịu gió, sâu bệnh, va chạm với cây khác, những thứ mà các phiên bản đơn giản bỏ qua.

Góc nhìn hôm nay: tự viết công thức mọc cây

Có thể chạy L-system bằng thư viện con rùa có sẵn trong Python: viết một hàm thay chuỗi theo luật, lặp vài lần, rồi cho con rùa đọc từng ký hiệu. Thử bắt đầu với F → F[+F]F[−F]F, góc 25°, rồi đổi góc thành 20° hay 35° để xem cây "đổi loài". Cũng có nhiều công cụ chạy trên trình duyệt cho phép gõ luật và xem ngay kết quả.

Một bài quan sát ngoài vườn bổ sung rất tốt: chọn một cây cỏ dại hay một cành rau, đếm xem mỗi đốt thân sinh ra mấy lá, mấy chồi, góc giữa nhánh và thân khoảng bao nhiêu, rồi thử viết một luật L-system mô tả nó. Đó là cách Lindenmayer làm việc: nhìn kỹ cây thật trước, rồi mới viết công thức.

Câu hỏi thường gặp

L-system là gì?

Là hệ viết lại chuỗi ký hiệu do Aristid Lindenmayer đưa ra năm 1968 để mô tả sự phát triển của thực vật. Mọi ký hiệu được thay cùng lúc theo luật, và khi diễn giải thành nét vẽ, chuỗi tạo ra hình cây, hoa, lá.

Lindenmayer là ai?

Aristid Lindenmayer (1925–1989) là nhà sinh học lý thuyết gốc Hungary, làm việc ở Đại học Utrecht, Hà Lan. Ông nghiên cứu sự phát triển của tảo và thực vật, và đưa ra hệ hình thức mang tên mình.

L-system liên quan gì đến dãy Fibonacci?

Với hai luật A → AB và B → A, bắt đầu từ A, độ dài chuỗi qua từng bước là 1, 2, 3, 5, 8, 13, đúng dãy Fibonacci. Đây là ví dụ kinh điển mô phỏng sợi tảo phân chia.

Làm sao vẽ cây bằng L-system?

Dịch mỗi ký hiệu thành lệnh vẽ: F là đi tới và vẽ, dấu cộng trừ là quay trái phải, ngoặc vuông là ghi nhớ và quay về vị trí để vẽ nhánh. Lặp luật vài lần rồi cho con rùa vẽ chuỗi kết quả.

L-system được ứng dụng ở đâu?

Trong sinh học thực vật để mô phỏng cách cây lớn và chia ánh sáng, trong nông học để dự báo năng suất theo cách trồng, và trong đồ hoạ máy tính để tạo cây cối cho phim, hoạt hình.

Mở app Tạo Hoá

Nặn núi, khơi sông — sinh vật tự tìm về sống

Mở app Tạo Hoá

Bài viết liên quan

Mở app Tạo Hoá

Nặn núi, khơi sông — sinh vật tự tìm về sống

Mở app Tạo Hoá Xem app khác