【问题标题】:How can I tell turtles to avoid stepping on certain patches?我怎样才能告诉海龟避免踩到某些斑块?
【发布时间】:2020-03-03 09:10:42
【问题描述】:

我目前正在模拟一个火灾疏散模型,我试图告诉海龟在不踩到黑色斑块的情况下进入出口,但我的代码无法正常工作。

这是我用来解决问题的代码: 去吧

 ask people
  [face one-of patches with [pycor <= -24  and pycor >= -30  and 
  pxcor <= 26  and pxcor >= 20 ]
  fd 0.5 ]

 ask people with [ points = 1 ] [ set color pink ]
 ask people with [ points = 0 ] [ set color red ]
 ask people with [ color = red ] [ fd 0 ]
tick
end

to avoid-black

 ask people [
 if [pcolor] of patch-ahead 0.5 = grey - 3
 [ set heading ( - heading ) fd 0.5 ]]
 end

【问题讨论】:

    标签: simulation netlogo


    【解决方案1】:

    Ave555,嗨!您来对地方了!

    您的代码存在几个不同的问题。

    • 黑色与“灰色 - 2”不同,因此您的黑色测试可能会失败,具体取决于 关于如何在墙上设置补丁颜色。

    • 命令“avoid-black”永远不会在您的“go”步骤中调用,因此它没有任何效果

    • 我猜你将屏幕设置为大于默认值 坐标在 -16 和 16 之间,否则您对 32 左右的补丁的测试将失败。

    • 您可能还没有忘记要求视口不要环绕。 你必须设置它,否则你会得到非常奇怪的行为。 (试试看)

    • 顺便说一句,将标题设置为 -heading 不是您想要的。标题是 一个角度。您想从中减去 180 以反转方向。或者加 180。

    • 试试下面的代码。穿过它 正如所写的那样,一次一步,你可以看到它大部分都有效。检测到黑色 人旋转180度,跳了5步!到目前为止,一切顺利。

    • 但是,他们只是转身回到墙上,因为什么都没有说明 他们不这样做。

    下面的代码非常冗长。一次运行一个 go-step 并观察输出。它告诉您避免黑色决策代码正在查看什么。

    我希望这会有所帮助!

    
    ;; This code is incomplete but should make it easier to see why the people are not going where you expect
    
    breed [people person]
    people-own [ points]
    
    to setup
      clear-all
      ask patches [ set pcolor white]
      ask patches with [pycor < -5] [ set pcolor black ]
    
      create-people 1 [ setxy random-pxcor 5 set points random 2 set color green set size 3 ]
      reset-ticks
    end
    
    to go
      let chosen-patch one-of patches with [pycor <= -12  and pycor >= -15  and 
        pxcor <= 15  and pxcor >= 10 ]
    
    
      ask chosen-patch [ set pcolor red]
    
      ask people
        [
              face chosen-patch
          fd 0.5 ]
    
     ask people with [ points = 1 ] [ set color pink ]
     ask people with [ points = 0 ] [ set color red ]
     ask people with [ color = red ] [ fd 0 ]
    
      avoid-black
    
      tick
    end
    
    to avoid-black
      ;; note:    grey -3   is 2.   black is zero. 
      ;;let wall-color grey - 3
      let wall-color black
    
     ask people [
        print " "
       type ticks type ", pcolor of patch-ahead is " type [pcolor] of patch-ahead 0.5 type ", and wall-color is " print wall-color
     if-else ([pcolor] of patch-ahead 0.5 = wall-color)
     [    print "test succeded, wall ahead, reverse and jump"
          set heading (  heading - 180 ) fd 5]
      [ print "test failed, no wall ahead. Keep going." ]
      ]
     end
    
    

    【讨论】:

    • 非常感谢您的回答,非常感谢我询问黑色只是为了更容易理解,我正在使用 gray-2 执行此代码时,海龟不会移动。 ..你能告诉我这个有什么问题吗:为了避免墙问人们[如果[pcolor]的patch-ahead 1 =黑色[设置标题(180)fd 3]]结束我做了-180你已经告诉我
    猜你喜欢
    • 2020-09-27
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 2013-10-08
    • 1970-01-01
    • 2022-12-08
    相关资源
    最近更新 更多