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