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.