และถ้าคำสั่งใน NetLogo

ฉันกำลังพยายามสร้างแบบจำลองของผึ้งที่กำลังแพร่กระจายละอองเกสรดอกไม้ ฉันหวังว่าจะทำมันได้ เมื่อผึ้งไปเยี่ยมดอกไม้ มันจะเปลี่ยนสีเป็นสีน้ำเงิน และ 'ผึ้ง' เต่าจะได้รับค่าละอองเกสรดอกไม้เป็น +1 จากนั้นเมื่อมี ค่าละอองเรณูเป็น +3 และไปเยี่ยมดอกไม้สีจะเปลี่ยนเป็นสีเขียว

ฉันได้ลองหลายวิธีในการดำเนินการนี้ หากมี และ if คำสั่งที่จะเป็นประโยชน์ เช่น

to pollenate 
ask turtles [
if pollen > 3
and if pcolor = yellow or blue [ 
set pcolor white
set pollen pollen - 3
]
]
end 

ฉันไม่แน่ใจว่ามีข้อความและข้อความอยู่หรือไม่

ดังนั้นฉันจึงลองใช้เมื่อเต่ามีจำนวนเรณูมากกว่า 3 พวกมันเปลี่ยนสี จากนั้นลองใช้โค้ดด้านล่างแต่ได้รับข้อความแสดงข้อผิดพลาดอยู่เรื่อยๆ

to pollenate
ask turtles with [ color = white ] [
if pcolor = blue
[set pcolor = green
set pollen pollen -3
]
]
end

ฉันได้รับข้อผิดพลาด 'ตั้งค่าคาดหวัง 2 อินพุต' อยู่ตลอดเวลา

ความช่วยเหลือใด ๆ ในทั้งสองวิธีจะได้รับการชื่นชมอย่างมาก หรือหากฉันทำสิ่งผิดทั้งหมดโปรดแจ้งให้เราทราบ 555


person Josh Finkill    schedule 27.11.2019    source แหล่งที่มา
comment
เปลี่ยนเป็น set pollen pollen - 3 โดยมีช่องว่างหลังเครื่องหมายลบ แก้ไขได้ไหม ถ้าคุณเขียน -3 NetLogo จะคิดว่าคุณหมายถึงเลขลบ 3 ไม่ใช่ลบ 3   -  person Seth Tisue    schedule 28.11.2019
comment
สำหรับส่วน if ของสิ่งนี้ ให้ลอง if pollen > 3 and (pcolor = yellow or pcolor = blue) or คาดหวังผู้รายงานที่สมบูรณ์และมีความสมบูรณ์ในตนเองทั้งสองฝ่าย   -  person Seth Tisue    schedule 28.11.2019


คำตอบ (1)


นี่คือคำตอบสำหรับคำถามสองข้อของคุณ

(1) "และถ้า" สามารถทำได้โดยใช้ตรรกะ AND ในการทดสอบ ฉัน มี เพื่อใช้วงเล็บล้อมรอบการทดสอบสีที่เชื่อมต่อกันด้วย OR แล้วตามด้วย AND กับการทดสอบละอองเกสร > 3 เช่นเดียวกับในทางคณิตศาสตร์ วงเล็บด้านในจะถูกประเมินก่อน ฉันชอบใช้วงเล็บกับการทดสอบเชิงตรรกะทั้งหมด เช่น ( เกสร > 3) -- ไม่จำเป็น แต่ฉันพบว่าอ่านง่ายกว่ามาก

to pollenate 
ask turtles [
    if (pollen > 3) and ((pcolor  = yellow) or (pcolor = blue))
            [ 
               set pcolor white
               set pollen pollen - 3
           ]
]
end 

คุณสามารถใช้การทดสอบ pcolor ที่พบในรายการสีได้เช่นกัน เช่นนี้

to pollenate 
ask turtles [
    if (pollen > 3) and (member? pcolor [yellow blue] )
            [ 
               set pcolor white
               set pollen pollen - 3
           ]
]
end 

สำหรับคำถามที่สองของคุณ เวอร์ชันที่ใช้งานได้จะเป็น

o pollenate
ask turtles with [ color = white ] [
if pcolor = blue
[set pcolor = green
set pollen pollen - 3
]
]
end

ไม่เห็นความแตกต่าง? ฉันเว้นวรรคไว้ทั้งสองด้านของเครื่องหมายลบ ไม่เช่นนั้น Netlogo จะเห็นพารามิเตอร์สามตัว: ละอองเกสร ละอองเกสร และ -3 แทนที่จะเป็นสองตัวที่คุณต้องการ นั่นคือ เกสรดอกไม้ และ (ละอองเกสร - 3)

person Wade Schuette    schedule 28.11.2019