Giới thiệu về Phức hợp. Bài tập số 1, Mức độ nâng cao.
Video hướng dẫn này sẽ giải bài tập nâng cao số 1
Mời bạn mở file MultipleAnts.nlogo, file này có trên web ở phần Course Material
Khi bạn mở ra, phần Interface sẽ trông như thế này
Chúng ta đã làm một số câu hỏi và 2 phần đầu của bài tập 1
Ta đã sửa chữa phần code nhiều, vì vậy điều đầu tiên là tôi sửa lại như cũ
Tôi muốn lũ kiến có màu đỏ cố định vì vậy tôi sẽ xóa 2 dòng này đi
Làm vậy cho đỡ nhầm lẫn. Tôi quay lại phần Interface
Câu hỏi của bài là tạo ra một đường dẫn pheromone mà
lũ kiến sẽ tiết ra để những con theo sau có thể đánh hơi theo
Chúng ta sẽ xem liệu pheromone có giúp lũ kiến kiếm ăn nhanh hơn không
Ta bắt đầu vào phần code, việc đầu tiên là tạo thêm một biến patch gọi là pheromone
Tôi thêm pheromone vào chỗ này sau đó sửa code ở phần setup
Ta cần cài đặt các patch để chúng chứa thêm pheromone, chứ không chỉ chứa cỏ
tôi sẽ sửa chỗ set-up-nest này thành set-up-patches
sau đó ask patches [set pheromone 0 Do ban đầu các ô không chứa pheromone.
Ấn check để kiểm tra. Sau đó tôi muốn lũ kiến bò qua đâu thì tiết ra pheromone ở đó
để sau khi kiếm ăn chúng có thể quay về tổ và những con kiến khác có thể theo dấu
Để làm điều này, bạn cuộn xuống phần return-to-nest mà ta viết lúc trước
Tôi sẽ thêm một dòng code để cài đặt lượng pheromone của một patch
set pheromone pheromone + 1 (tăng lượng pheromone lên 1)
Để quan sát được lượng pheromone, set plabel pheromone
Nhãn của ô sẽ hiển thị lượng pheromone. Bạn có thể đổi màu chúng nếu thích
Nhưng tôi thấy thú vị hơn nếu dùng nhãn. Ấn check để kiểm tra code.
Về Interface, ấn setup, ấn go. Bạn có thể thấy
Lũ kiến đang kiếm ăn và trở về tổ, đồng thời tiết ra một đường pheromone
Đường này đậm dần theo lượng kiến. Giờ ta sẽ làm đường này bay hơi dần.
Quay lại phần code, thêm một dòng trong lệnh go: evaporate-pheromone
Bây giờ ta phải viết thêm code mô tả lệnh: to evaporate-pheromone
Ta sẽ gán cho pheromone xác suất bay hơi trong khoảng 0, 1
Trước hết phải tạo ra một biến ngẫu nhiên: let x random-float 1
sau đó ta tìm bất cứ ô nào có pheromone: ask patches with [pheromone > 0]
nếu x nhỏ hơn biến trên thanh trượt [if x < probability-to-evaporate
lượng pheromone ở ô đó sẽ giảm đi 1 [set pheromone pheromone - 1]
và đồng thời nhãn của ô sẽ bớt đi 1: set plabel pheromone] end
Ấn Check: giờ ta cần thêm thanh trượt Trở về Interface, ấn vào đây
Chọn slider và nhấp chuột tạm vào đây Ta gọi nó là probability-to-evaporate
Xác suất bay hơi sẽ nằm giữa 0 và 1 giá trị tăng theo bước 0.01
Và giá trị ban đầu là 0.1. OK. Giờ tôi di chuyển thanh trượt này vào đúng chỗ
Tôi sẽ chuyển cửa sổ Plot này xuống dưới và chuyển thanh trượt này vào, co bé lại
Chắc vậy là ổn rồi. Ấn setup, go. Lượng pheromone nên giảm dần
À có giảm, tốt. Vấn đề cuối cùng là phải bảo những con kiến khác bám theo pheromone
Phần Interface tiện ở chỗ, bạn có thể nhấp chuột vào kéo để chọn các nút và thanh
Hoặc bạn nhấp chuột phải, chọn Edit để thay đổi chúng
Bây giờ thì ta quay lại phần code và thay đổi cách kiến bò
Đưa chuột đến phần lệnh to look-for-food ta sẽ thêm code vào đây, tạo biến mới
let pheromone-ahead? scent-at-angle 0 tôi sẽ giải thích sau
let pheromone-right? scent-at-angle 45 let pheromone-left? scent-at-angle -45
Phần code này tương tự phần trong mô hình về lũ kiến trong thư viện của Netlogo
Căn bản là ta đang yêu cầu lũ kiến quan sát xung quanh để xác định pheromone
và sau đó bò theo hướng pheromone chứ không đơn thuần là bò ngẫu nhiên
Phần code dưới này sẽ được giữ nguyên. ifelse (pheromone-right? > pheromone-ahead?
or pheromone-left? > pheromone-ahead?) [ifelse pheromone-right? > pheromone-left?
[rt 45] (bò sang phía phải 45 độ) [lt 45] (bò sang trái 45 độ)
Nếu cả 2 mệnh đề trên đều sai thì phía trước có thể có pheromone hoặc không
if pheromone-ahead? = 0 thì con kiến sẽ theo phần code này
vì vậy ta thêm ngoặc [ vào đây và ngoặc ] vào cuối này
Ấn check, Netlogo báo lỗi: chưa có lệnh scent-at-angle
vì ta chưa viết code cho lệnh đó. Cuộn xuống cuối cùng và thêm vào
to-report scent-at-angle [angle] let p patch-right-and-ahead angle 1
lệnh patch-right-and-ahead này có sẵn, ta chỉ việc ấn chuột phải, chọn quick help
và phần mô tả lệnh đó sẽ hiện ra. if p = nobody [report 0] (không có phero)
report [pheromone] of p end
Ấn Check, tôi đã quên ngoặc ở chỗ này và thiếu cả ngoặc ở dòng này
Ổn rồi, giờ quay lại Interface, chạy mô hình, có vẻ tốt
Từ đây bạn có thể phân tích sâu hơn và đưa ra kết luận của bạn.
Bạn có thể thấy là đám kiến đang tắc ở bờ tường và chúng ta có thể sửa
bằng cách mở Settings và chọn world wrap horizontally and world wrap vertically, OK
Giờ thì bọn kiến đang kiếm ăn rất nhanh chỉ trong 73 ticks, trong mô hình trước
trước khi thêm pheromone vào, lũ kiến phải mất 128 ticks
Thế là xong bài tập số 1. Chúc bạn vui vẻ. Hẹn gặp lần sau.