If statement Netlogo:海龟正在检查它是否可以移动到有效的目标

If statement Netlogo:海龟正在检查它是否可以移动到有效的目标,if-statement,conditional-statements,netlogo,move,patch,If Statement,Conditional Statements,Netlogo,Move,Patch,我试图模拟一个邻居参观当地企业。有两个品种的补丁(家庭和企业)和海龟(人和主人)。该计划是让人们能够访问一家商店,如果店主是在业务补丁上,否则被视为关闭 一天分为三个节拍:上午、下午和晚上。所有的商店通常在上午和下午,但随机数目的业主在晚上回家。如果没有商店,店主就回家 运行一段时间后,我得到了错误移动到预期的输入作为代理,但没有得到任何人。指向傍晚移动命令的“ifelse”部分 谢谢你的帮助 to go morning-move ;Morning movement (First shopp

我试图模拟一个邻居参观当地企业。有两个品种的补丁(家庭和企业)和海龟(人和主人)。该计划是让人们能够访问一家商店,如果店主是在业务补丁上,否则被视为关闭

一天分为三个节拍:上午、下午和晚上。所有的商店通常在上午和下午,但随机数目的业主在晚上回家。如果没有商店,店主就回家

运行一段时间后,我得到了错误移动到预期的输入作为代理,但没有得到任何人。指向傍晚移动命令的“ifelse”部分

谢谢你的帮助

to go
  morning-move ;Morning movement (First shopping phase)
  tick

  afternoon-move ;Afternoon movement (Second shopping phase)

  tick

  evening-move ;Evening movement (Return home)

  tick

end

to morning-move
  ask owners [move-to work-xy] ;make owners open their businesses
    ask people [ifelse any? open-busi-patches with [any? owners-here and count people-here < MaxCapacity] ;This checks if there are open businesses
    [ask people [move-to one-of open-busi-patches with [any? owners-here and count people-here < MaxCapacity]]] ;move people to businesses under capacity
    [ask people [move-to home-xy]]]
  ask open-busi-patches [set OpsProfit OpsProfit + count people-here] ;cumulative count of patrons
end

to afternoon-move
  ask people [ifelse any? open-busi-patches with [count owners-here > 0 and count people-here < MaxCapacity] ;This checks 
    [ask people [move-to one-of open-busi-patches with [any? owners-here and count people-here < MaxCapacity]]] ;move people to businesses under capacity
    [ask people [move-to home-xy]]]
  ask open-busi-patches [set OpsProfit OpsProfit + count people-here] ;cumulative count of patrons
end

to evening-move
  ask n-of random count owners owners [move-to home-xy] ;This choses a random number of owners to stay open in the evening.
  ask people [ifelse any? open-busi-patches with [any? owners-here and count people-here < MaxCapacity] ;This checks 
    [ask people [move-to one-of open-busi-patches with [any? owners-here and count people-here < MaxCapacity]]] ;move people to businesses under capacity
    [ask people [move-to home-xy]]]
  ask open-busi-patches [set OpsProfit OpsProfit + count people-here] ;cumulative count of patrons
end
要走了
晨运;晨运(第一阶段)
打上钩
下午搬家;下午运动(第二购物阶段)
打上钩
傍晚搬家;傍晚运动(回家)
打上钩
结束
早起
询问业主[搬家工作xy];让业主开放他们的业务
询问人们[如果有其他人?与[这里有任何?所有者一起打开busi补丁,并计算这里的人数<最大容量];这将检查是否有开放的业务
[询问人员[移动到[any?owners here and count people here0,此处计数人员<最大容量]打开busi修补程序];此检查
[询问人员[移动到[any?owners here and count people here
因此,这是给出错误的代码(重新格式化)

下午移动
问别人
[如果有的话?打开busi补丁程序,其中[count owners here>0,count people here

基本的问题是,我所标记的这条线实际上是在移动人们,并耗尽开放的业务。因此,第一个条件首先测试是否有企业拥有空间,而且永远不会重新测试。

晚上的移动和早上的移动是相同的,只是随机选择了一些人。那么也许一个随机数的人可以是零?那会产生错误,不是吗?也许你需要确保最小随机人数为1的东西?还有,为什么下午搬家的ifelse和其他两个不同呢?我希望如果没有商店可供使用或营业,他们会回家。理想情况下——如果没有现成的商店,人们回家时就不会试图进入一家企业。然而,恐怕我对netlogo还不够熟悉,无法找到一个很好的解决方案。该代码的长期应用是调查疾病如何通过社区传播。因此,如果店主生病不工作,人们就会忽视这家商店。下午的举动不同的是缺乏尽职调查,谢谢你指出这一点!好吧,我不明白为什么ifelse不能处理0家店铺的开门情况——我天真的建议是将最小开门数量设为1家——这对你没有帮助。希望其他人会有一个真正的建议!
openbusi补丁如何变为true或false?似乎移动到使用了与ifelse条件相同的精确约束,因此只有在ifelse有开放业务,并且执行移动到时没有任何业务时,才会失败。我很感激,@JerryJeremiah!如果补丁能够以90个百分点(模拟一个月的运营成本)获得足够的用户,则可以从
开放的busi补丁
切换到
封闭的busi补丁
。我考虑在晚上将补丁设置为
关闭的busi补丁
,但我决定先进行人员运动。至少,我喜欢认为我可以在不破坏代码的情况下更改即将发布的代码版本中的条件。谢谢你指出这一点,@JenB!我在您指出的地方添加了另一条ifelse语句,我已经很久没有收到错误消息了!
to afternoon-move
  ask people
  [ ifelse any? open-busi-patches with [count owners-here > 0 and count people-here < MaxCapacity ]
    [ ask people ;;;; THIS LINE
      [ move-to one-of open-busi-patches with [any? owners-here and count people-here < MaxCapacity]
      ]
    ]
    [ ask people
      [ move-to home-xy]
    ]
  ]
  ask open-busi-patches [set OpsProfit OpsProfit + count people-here]
end