1.9 Mô hình NetLogo thứ hai Chúng ta xây dựng mô hình thứ hai dựa trên cái thứ nhất Điều đầu tiên chúng ta sẽ làm là tạo ra một bản copy của file "Ant1.nlogo" Tôi có thể làm việc này bằng cách nhấn chuột phải vào đây và chọn Copy sau đó nhấn Command+V hoặc Ctrl+V hoặc bất cứ cách nào mà bạn dùng trong hệ điều hành của bạn để copy các tập tin Tôi sẽ đổi tên tập tin mới này thành Ant2.nlogo Sau đó tôi sẽ nhấp đúp để mở file này Tôi sẽ thay tiêu đề bằng cách nhấp phải vào phần tiêu đề này và đổi nó thành Ant 2 Chúng ta đã có sẵn một đàn kiến mà có thể bò xung quanh bây giờ hãy tạo thêm thức ăn cho chúng Tôi nhấp vào tab Code để thêm thức ăn cho đàn kiến Trong phần setup chúng ta sẽ viết: grow food Sau đó chúng ta sẽ phải nói cho hệ thống biết làm thế nào để grow food (tạo ra đồ ăn) Vì vậy chúng ta kéo xuống dưới này và viết thêm một quy trình mới để thêm thức ăn (grow food) Những gì chúng ta cần gõ là: ask patches [set pcolor green] end Tôi sẽ giải thích từ patches sau Chúng ta quay trở lại tab Interface Phần màu đen này là bức tường bạn có thể nhấp phải và chọn Edit Bạn sẽ thấy cửa sổ này chứa hệ tọa độ của bức tường Trong hình này thì không rõ lắm nhưng bạn có thể mở Netlogo của bạn ra để thấy điểm gốc O (0,0) ở chính giữa và theo trục tung ta có -16 đến 16 Cũng như vậy, ta có -16 đến 16 theo trục hoành Cả bức tường này là một mạng lưới 33x33 hình vuông ta gọi những hình vuông này là patches Trong ô này là số lượng điểm ảnh (pixel) cho một hình vuông (patch) ở đây ta có sẵn 13 điểm ảnh Mỗi hình vuông có tính chất riêng của nó ví dụ như: màu sắc Tôi quay trở lại phần Code vì tôi muốn tất cả hình vuông có màu xanh lá (pcolor green) pcolor là viết tắt của patch-color Hãy xem điều gì xảy ra khi tôi nhấp setup bạn có thể thấy là tất cả đã chuyển màu xanh lá Chúng ta có thể coi đây là mô hình của tổ kiến sống trong một bãi cỏ Bây giờ, ta quay trở lại tab Code để viết lệnh cho lũ kiến ăn cỏ Chúng ta sẽ viết thêm if pcolor = green tôi sẽ thêm bình luận sau dấu ; if the turtle is located on a green patch Lệnh này có nghĩa là chúng ta yêu cầu con rùa nhìn vào vị trí nó đang đứng Vì mỗi con rùa đều được đặt trên một ô vuông nhất định nên nếu ô vuông đó màu xanh thì đây là những gì nó phải làm tiếp theo: Nó sẽ ăn một ít cỏ bằng cách cài đặt màu của ô vuông trở lại thành màu đen: set pcolor black Sau đó nó sẽ phải ghi nhớ nó đã ăn bao nhiêu thức ăn bằng cách set food-eaten (food-eaten + 1) Chúng ta sẽ làm thêm 1 động tác nữa đó là gắn nhãn lên lưng nó để thể hiện số lượng đồ ăn mà nó đã ăn set label food-eaten Đây là tất cả những gì mà chúng ta muốn con rùa làm À tôi sẽ phải đóng mở ngoặc cho phần này và tôi sẽ nhấn tab đầu dòng cho tất cả những phần trong ngoặc để dễ nhìn hơn Bạn thấy là tôi có ngoặc ở đây và ở đây và tôi cũng viết thêm bình luận Chúng ta sẽ yêu cầu con rùa quay trái, quay phải sau đó kiểm tra ô vuông mà nó đang đứng nếu màu ô vuông là xanh thì đổi sang đen và tăng số lượng đồ đã ăn lên 1 hiển thị số đó lên nhãn Điều cuối cùng là ta phải viết thêm biến số lượng đồ ăn Bạn có thể thấy là mỗi con rùa có các biến đi kèm ví dụ như food-eaten (đồ đã ăn) Bạn có thể hiểu biến đó như dạ dày con rùa để lưu lại lượng đồ đã ăn Trong mô hình này thì con rùa không tiêu hóa bớt đi phần thức ăn nào cả vì vậy ta sẽ viết turtle-own [food eaten] Phương trình này sẽ thiết lập một biến gọi là food eaten cho từng con rùa một Tức là mỗi con rùa sẽ có biến food-eaten của riêng nó Biến đó sẽ lưu lại lượng đồ ăn mà nó ăn vào Ở trong phần setup này, tôi sẽ cài đặt lượng đồ ăn ban đầu là 0 set food-eaten 0 Cần phải để lượng đồ ăn ban đầu là 0 để mỗi khi con rùa ăn vào lượng đồ ăn sẽ tăng dần sau đó, ấn Check trở về phần Interface Kéo phần tốc độ cho chậm lại một chút để chúng ta có thể theo dõi con rùa Con rùa đang... ..tôi xin lỗi..con kiến đang bò quanh bức tường và mỗi lần nó dừng lại ở một ô xanh nó sẽ ăn đồ ăn ở đó Nên nhớ là, nó cần phải đi từ 0-3 bước trước khi dừng lại ăn cỏ Bây giờ ta có thể tăng tốc một chút và bạn có thể ngồi xem con kiến bò quanh và ăn cỏ. Có thể bạn không nhìn rõ nhưng con kiến có gắn nhãn ở lưng thể hiện bao nhiêu đồ ăn nó đã ăn Hiện đang thừa đồ ăn cho một con kiến nhỏ, ta sẽ tạo thêm một tổ kiến lớn Ta sẽ thêm vào mấy con kiến nữa bằng cách tạo biến population (dân số) biến này cho phép chúng ta cài đặt kích cỡ dân số Tôi sẽ chọn menu này trong phần Interface và chọn slider để thêm 1 thanh trượt Tôi đặt tên của biến tổng quát này là population Tôi đặt giá trị tối thiểu (minimum) của dân số là 1 giá trị tối đa (maximum) là 200 mức tăng dân số sẽ là 1 và giá trị ban đầu là 50 sau đó nhấn Apply, OK Nhấn Select để chọn thanh trượt sau đó di chuyển nó lên trên Bây giờ ta sẽ viết code để bảo hệ thống phải làm gì với biến population vừa tạo Tôi sẽ chuyển sang tab Code và thay dòng create-turtle 1 bằng create-turtle population Khi đó người dùng có thể cài đặt population (dân số) theo ý họ và hệ thống sẽ tạo ra đúng lượng rùa đó Hãy xem điều gì xảy ra khi ta ấn setup. Ta có toàn bộ 50 con kiến ở chính giữa Ấn Go và bạn có thể thấy chúng đang bò. Tôi sẽ cho tốc độ chậm lại Chúng đang làm 1 việc giống nhau nhưng do việc di chuyển là ngẫu nhiên ta thấy chúng bò theo hướng khác nhau một chút Nếu tôi tăng tốc thì trông chúng không khác gì những con kiến thật đang bò quanh và kiếm thức ăn Hãy thử tăng dân số lên 130 Oh bây giờ thì đông quá ..đông quá Chúng ta nên vào phần Code và làm bọn kiến bé hơn Hãy cài đặt kích cỡ của chúng về 1 set size 1 Để xem thay đổi, ấn setup Trông chúng bé hơn hẳn Bạn có thể không nhìn rõ nhưng chúng không phải chen chúc nhau nữa Trông trên màn hình thì rất bé nhưng mỗi con kiến đều gắn nhãn ghi lại lượng đồ ăn chúng đã ăn Thường thì chúng ta muốn biết là cả tổ kiến này đã ăn bao nhiêu Tôi sẽ thêm vào một khung vẽ vẽ lượng đồ ăn của chúng qua thời gian Ta tiếp tục chọn trong menu này chọn Plot, tôi sẽ nhấn chuột ở đây Cửa sổ Plot sẽ hiện ra và sẽ yêu cầu ta nhập một số biến Tôi sẽ đặt tên biểu đồ là Total food eaten Tọa độ lớn nhất và nhỏ nhất sẽ được cài đặt tự động Ở phần X axis label tôi sẽ gõ vào Total food eaten ở Y axis label là Time Tôi sẽ gõ Total food eaten vào phần Pen name Hãy để màu vẽ màu đen Tôi thêm vào đây lệnh vẽ plot sum [food-eaten] of turtles Lệnh này có nghĩa là kiểm tra lượng thức ăn của từng con rùa Sau đó tính tổng và vẽ lại tổng đó theo thời gian nhấn Apply À chưa Tôi nhầm rồi chúng ta đổi lại trục Y là Total food eaten và X là trục Time được rồi OK Ta sẽ Select khung này và di chuyển nó lên trên này sau đó kéo dài nó ra cho dễ nhìn Và bây giờ hãy xem nó làm việc ra sao ấn setup, go Bạn có thể thấy biểu đồ đang tự điều chỉnh và nó cũng cho thấy đồ ăn được tiêu thụ nhanh thế nào Bạn có thể thay đổi dân số và xem nó ảnh hưởng đến tốc độ ăn Để hoàn thành mô hình này hãy thêm vào một vài biến khác Ví dụ hãy thêm vào một thanh trượt mà cho phép người dùng lựa chọn số bước tối đa một con kiến bò đi trước khi dừng lại ăn và cả góc độ quay đầu của con kiến. Hãy chọn khung vẽ (select) và di chuyển nó xuống dưới để có chỗ cho 2 thanh trượt nữa Tôi lại chọn slider và đặt tên biến mới này là max-step-size Hãy để giá trị bé nhất là 1 lớn nhất là 10 giá trị ban đầu là 4 hãy di chuyển nó lên đây Chọn thêm cả khung này và di chuyển cả hai lên trên sau đó tạo thêm 1 thanh trượt nữa gọi là max-turn-angle Hãy để giá trị bé nhất là 1 độ giá trị lớn nhất là 180 giá trị ban đầu là 60. Hãy sắp xếp lại 1 chút. Bây giờ ta sẽ chèn những biến này vào phần code Ở đây, thay vì gõ 60 hãy gõ vào max-turn-angle ở đây cũng thế khi đó ta có right random max-turn-angle và left random max-turn-angle Nếu bạn để ý bạn có thể thấy rằng chữ random này sẽ trả về một số ngẫu nhiên giữa 0 và giá trị max-turn-angle trừ đi 1 vì vậy thực ra góc tối đa quay đầu của con kiến sẽ là giá trị max-turn-angle này trừ đi 1 nhưng điều này không ảnh hưởng nhiều. Và ở đây, tôi thay 4 bằng max-step-size Nhấn vào Check để kiểm tra phần code này Có vẻ là bạn sẽ không nhìn rõ tôi sẽ tải file này lên cho khóa học ở phần Course material tên là Ant2.nlogo Bạn có thể tải nó về và tự kiểm tra hoặc có thể dùng nó để làm bài tập. Bây giờ hãy xem mô hình làm việc ra sao Có vẻ tốt! Một điều nên biết nữa đó là thi thoảng Netlogo sẽ bị đơ dù bạn đã ấn Go nó vẫn không làm việc bởi vì nó đang phải xử lý quá nhiều lệnh. Trên menu Tools bạn có lệnh Halt mà bạn có thể dùng để dừng chương trình lại bất cứ lúc nào Lệnh này luôn có tác dụng và sẽ rất tiện nếu chương trình của bạn bị treo và bạn không thể nhấn Go nữa OK, hãy làm vài thử nghiệm tăng max-step-size lên 10 và xem điều gì xảy ra. Oh lũ kiến bị mắc ở rìa tường và bạn có thể thử nghiệm với cả 3 biến ta có ở đây xem bao lâu thì tất cả chỗ thức ăn được tiêu thụ hết Sau đó ta cần nhấn stop để xem chính xác sau bao nhiêu lượt thì hết thức ăn. Tôi sẽ viết thêm một lệnh để làm điều đó tự động Tôi thêm vào phần Go lệnh này sẽ làm hệ thống dừng lại if not any? patches with [pcolor = green] [stop] Đây là một cú pháp đơn giản trong netlogo bạn có thể viết not, sau đó thêm vào một câu hỏi cho một vật thể nào đó với tính chất nhất định sau đó là hành động stop. Bây giờ hãy thử với population 200 step-size là 4, turn-angle là 60 và xem lũ kiến ăn nhanh như thế nào Chúng ăn xong trong 105 lượt! Bây giờ ta lưu mô hình bằng cách mở menu File nhấn Save Thế là hoàn tất mô hình thứ 2