Netlogo 演示ask和ask-concurrent命令之间的区别

这个示例演示了ask和ask-concurrent命令之间的区别。 注意:不建议使用ask-concurrent。它只为了向后兼容而存在。

使用方法: 按下SETUP按钮创建一些乌龟。 然后按下两个按钮之一,让乌龟向前移动5个步骤(不要同时按下两个按钮)。 以正常速度进行模拟时,乌龟可能移动得太快,你无法看到这两个按钮的区别。如果需要,可以使用速度滑块减慢模型速度,直到你可以逐个观察乌龟移动。 GO按钮以稍微复杂的方式使用ask-concurrent。它显示出目前正在运行的乌龟,即使每只乌龟都在运行一个while循环,而不仅仅是一个简单的fd命令。

请注意以下事项: 使用ask turtles [ fd 5 ]时,乌龟是如何移动的? 使用ask-concurrent而不是ask时,乌龟是如何移动的?

关于ask-concurrent的详细信息,请阅读NetLogo用户手册中的编程指南中的Ask-Concurrent部分。

NetLogo特性: 视图更新模式设置为“continuous”,因此您可以通过将滑块向“slower”移动来逐个观察代理的移动。

turtles-own [done?]  ;; 这个变量只被GO-TURTLES-ALTERNATE过程使用

to setup
  clear-all  ;; 清除所有的乌龟和patches
  ask patches with [pycor = 0] [
    sprout 1 [ set heading 0 ]  ;; 在y坐标为0的patches上生成一只朝向0度的乌龟
  ]
  reset-ticks  ;; 重置时间步
end

to go
  ;; 在每一列生成一个红色的patch
  ask patches with [pycor = 0] [
    ask patch-at 0 (random world-height) [
      set pcolor red  ;; 将该patch的颜色设置为红色
    ]
  ]
  ;; 让每一只乌龟向前移动,直到它找到所在列的红色patch
  go-turtles
  tick  ;; 时间步增加1
end

to go-turtles
  ask-concurrent turtles [
    while [pcolor != red] [ fd 1 ]  ;; 当乌龟所在的patch颜色不是红色时,向前移动一步
    set pcolor black  ;; 将所在的patch颜色设置为黑色
  ]
end


;; 这里演示了如何使用ASK而不是ASK-CONCURRENT来达到与GO-TURTLES相同的效果。
;; 乌龟的行为是一样的,可视结果(乌龟同时工作,而不是一个一个完成任务)也是一样的。
;; 注意使用了turtles-own变量。

to go-turtles-alternate
  ask turtles [ set done? false ]  ;; 设置done?变量为false,表示乌龟还没有完成任务
  loop [
    let still-moving turtles with [not done?]  ;; 获取还没有完成任务的乌龟
    if not any? still-moving [ stop ]  ;; 如果没有还在移动的乌龟,则停止循环
    ask still-moving [
      ifelse pcolor = red
        [ set pcolor black
          set done? true ]  ;; 如果所在patch的颜色是红色,则将颜色设置为黑色,并将done?变量设置为true,表示任务完成
        [ fd 1 ]  ;; 向前移动一步
    ]
  ]
end

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异数时空

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值