海龟"睡觉"半天

时间:2014-06-16 11:52:09

标签: countdown netlogo

我的模型中有一群海龟,猴子,他们应该移动半天并为另一半睡觉。当他们移动时,他们会吃水果并从中获取能量,他们在移动时也会失去能量,如果他们有7个能量他们饿死(他们以100的能量开始)我假设蜱是一天。现在发生的事情是,在我添加了移动和睡眠状态之后,他们都只在一两个嘀嗒声后挨饿,我无法弄清楚原因。我认为问题在于倒计时或滴答......下面是部分代码。非常感谢!

to move 
  ask monkeys [
  move-monkeys
   set count-down count-down - 1   
   if count-down <= 0
   [set state task sleep
    set count-down 0.5 + 0.5 
   ] 
  ]

 end

to sleep 
   ask monkeys [
  set count-down count-down - 1
  set label count-down
  if count-down <= 0 
  [set state task move 
   set label ""
     set count-down 0.5 + 0.5 
  ] 
  ]
 end 
to move-monkeys

  ask monkeys [

     set best-patch patches with-max [calories] in-radius 3

    right random 360 fd 1

     set energy energy - 10 ;; monkeys lose energy when they move. 

    if is-patch? best-patch 
     [ ifelse patch-here = best-patch   
[eat-fruit] 

 [evaluate]]


  if energy < 10
      [output-print "starve"
      set nostarve nostarve + 1
      die] 

    ]


          end 

1 个答案:

答案 0 :(得分:2)

also posted on Netlogo user group - 代码在那里。

在你的模型中,听起来你正让猴子在蜱之间移动。因此,对于每个周期,猴子移动12小时。你不会看到所有这些,除非你要求猴子更新显示器 - 这在你找到错误时可能会有所帮助。如果你这样做,只能使用几只猴子。

我能看到的一些事情

1)为什么需要睡眠和移动周期?他们在睡觉时恢复精力吗?如果没有,请让他们在24小时内移动12小时,否则不要做任何其他事情。当他们停下来时,他们会将计数重置为12或他们每隔几个小时移动一次。像

这样的东西
ask monkeys
[
ifelse my-time >=0  
[move
set my-time my-time - 1]
[set my-time 12]                   -sets my-time 12 and stops whats it's doing
]

2)你要求他们寻找最好的补丁,然后让他们随机移动。你想让他们搬到最好的补丁吗?如果是这样,请使用移动到一个最好的补丁。