Netlogo-如何创建路径?

Netlogo-如何创建路径?,netlogo,Netlogo,我试图在NetLogo中模拟特定的交叉点。以下是代码(在开发的早期阶段): 品种[有轨电车] 品种[汽车] 设置 清除所有 将默认形状设置为“错误” 将默认形状汽车设置为“汽车” 安装补丁 重置滴答声 结束 外带 制造新车频率-SN-1 1-20 0 制造新车频率-SN-2 2-20 0 制造新车频率-NS-3-320180 设置有轨电车频率 移动有轨电车 想转身吗 搬家 打上钩 结束 设置有轨电车[频率] 如果(随机浮动100

我试图在NetLogo中模拟特定的交叉点。以下是代码(在开发的早期阶段):

品种[有轨电车]
品种[汽车]
设置
清除所有
将默认形状设置为“错误”
将默认形状汽车设置为“汽车”
安装补丁
重置滴答声
结束
外带
制造新车频率-SN-1 1-20 0
制造新车频率-SN-2 2-20 0
制造新车频率-NS-3-320180
设置有轨电车频率
移动有轨电车
想转身吗
搬家
打上钩
结束
设置有轨电车[频率]
如果(随机浮动100<频率)而不是任何?海龟在0-20补丁上[
创建有轨电车1[
setxy 0-20
设置标题0
将颜色设置为黑色
]
]
结束
制造新车[freq x y head]
如果(随机浮动100<频率)而不是任何?x-y地块上的海龟[
创造汽车1[
setxy x y
设航向
将颜色设置为基础颜色之一
]
]
结束
搬家
问车[
如果其他人不能移动?1
[死亡]
[fd 1]
]
结束
转弯
询问补丁2-7上的汽车[
ifelse(随机浮动100<100)和补丁3-7上没有任何海龟
[rt 90 fd 1
lt 90 fd 4
rt 90 fd 2
lt 90 fd 2
rt 90 fd 1]
[fd 1]
]
结束
移动电车
询问有轨电车[
如果其他人不能移动?1
[死亡]
[fd 1]
]
结束
设置修补程序
询问补丁[

ifelse abs pxcor一种方法是使用基于转弯车辆前方补丁颜色的规则。对于一种严格适用于我认为您试图复制的模式的方法,如果前面有绿色补丁,您可以让车辆向左转弯,如果前面有红色补丁,您可以让车辆向右转弯。这允许您控制其hea当补丁移动时,基于补丁的叮当声

我还建议在他们的移动程序中加入这样的内容:如果前面有一辆车(如模型库中的交通模型),他们就永远不要向前移动,就像你在转弯程序中所做的那样。这样,他们就永远不会进入已经被另一辆车占用的区域

您还应该签出
patch set
以创建修补程序代理集,这样您就不必重复像
set pcolor red
这样的命令;您也可以使用
执行此操作

请看一下我对您的代码所做的修改,以获得上述一些实现示例:

breed [ cars car ]

to setup
  ca
  resize-world -20 20 -20 20 
  set-default-shape cars "car"
  setup-patches
  reset-ticks
end

to go
  make-new-car 10 2 -20 0 blue
  make-new-car 10 1 -20 0 yellow
  make-new-car 10 -3 20 180 white
  make-new-car 10 -1 20 180 pink
  make-new-car 10 -20 -3 90 orange 
  want-turn
  move-cars
  tick
end

to make-new-car [freq x y head col ]
  if (random-float 100 < freq) and not any? turtles-on patch x y [
    create-cars 1 [
      setxy x y
      set heading head
      set color col
    ]
  ]
end

to move-cars
  ask cars [
    ifelse not can-move? 1
      [ 
        die 
      ]
      [ 
        if patch-ahead 1 != nobody [
          if [pcolor] of patch-ahead 1 = green - 1 [
            rt -90
          ]
          if [pcolor] of patch-ahead 1 = red [
            rt 90
          ]
          if ( [count turtles-here] of patch-ahead 1 = 0 ) and
            ([pcolor] of patch-ahead 1 = black) [
              fd 1
            ]
        ]
      ]
  ]

end

to want-turn
  ask cars-on patch 2 -7 [
    if (random-float 100 < 50) [ 
      rt 90 
    ]
  ]
end

to setup-patches
  ask patches [
    ifelse abs pxcor <= 3 or abs pycor <= 3
      [ set pcolor black ]     
      [ set pcolor green - 1 ]
    if abs pxcor <= 0.5
      [ set pcolor red ]
    ask ( patch-set patch 3 -2 patch -2 -1 patch -1 -1 patch 8 -1 ) [
      set pcolor red 
    ]

    if ( pycor = -3 and pxcor > 8 ) or (pycor <= 3 and pycor >= -1 and pxcor < -3) or (pxcor = 3 and pycor <= -8) [
      set pcolor green - 1 
    ]
  ]
end
品种[汽车]
设置
ca
调整世界大小-20-20
将默认形状汽车设置为“汽车”
安装补丁
重置滴答声
结束
外带
让新车10 2-20 0蓝色
使新车10 1-20 0黄色
让新车10-320180白色
把新车做成10-120180粉红色
让新车10-20-390橙色
想转身吗
搬家
打上钩
结束
制造新车[freq x y head col]
if(随机浮动100<频率)和补丁x y上没有任何海龟[
创造汽车1[
setxy x y
设航向
设置颜色列
]
]
结束
搬家
问车[
如果其他人不能移动?1
[ 
死亡
]
[ 
如果前面有补丁1!=无人[
如果前面补丁的[P颜色]为1=绿色-1[
rt-90
]
如果前面1个贴片的[pcolor]为红色[
rt-90
]
如果([此处计数海龟]前面的补丁1=0)和
([pcolor]前面的补丁1=黑色)[
fd 1
]
]
]
]
结束
转弯
询问补丁2-7上的汽车[
if(随机浮动100<50)[
rt-90
]
]
结束
设置修补程序
询问补丁[

如果不是abs pxcor Hi Scag,请查看以提高获得有意义答案的机会。我无法按原样运行代码以复制模型(我认为需要在接口上输入一些内容)所以很难准确地说出你想要什么。frequency-SN-1、frequency-SN-2、frequency-NS-3和tram frequency是从1到100的接口值-它们只表示每个滴答函数创建的汽车数量足够新的汽车公平-我的观点是,你越容易重复你的问题,你就越有可能得到一个美国对堆栈溢出的回答很有说服力。通常这意味着删掉与您的问题无关的内容;例如,在本例中,是电车和不重要的汽车。
breed [ cars car ]

to setup
  ca
  resize-world -20 20 -20 20 
  set-default-shape cars "car"
  setup-patches
  reset-ticks
end

to go
  make-new-car 10 2 -20 0 blue
  make-new-car 10 1 -20 0 yellow
  make-new-car 10 -3 20 180 white
  make-new-car 10 -1 20 180 pink
  make-new-car 10 -20 -3 90 orange 
  want-turn
  move-cars
  tick
end

to make-new-car [freq x y head col ]
  if (random-float 100 < freq) and not any? turtles-on patch x y [
    create-cars 1 [
      setxy x y
      set heading head
      set color col
    ]
  ]
end

to move-cars
  ask cars [
    ifelse not can-move? 1
      [ 
        die 
      ]
      [ 
        if patch-ahead 1 != nobody [
          if [pcolor] of patch-ahead 1 = green - 1 [
            rt -90
          ]
          if [pcolor] of patch-ahead 1 = red [
            rt 90
          ]
          if ( [count turtles-here] of patch-ahead 1 = 0 ) and
            ([pcolor] of patch-ahead 1 = black) [
              fd 1
            ]
        ]
      ]
  ]

end

to want-turn
  ask cars-on patch 2 -7 [
    if (random-float 100 < 50) [ 
      rt 90 
    ]
  ]
end

to setup-patches
  ask patches [
    ifelse abs pxcor <= 3 or abs pycor <= 3
      [ set pcolor black ]     
      [ set pcolor green - 1 ]
    if abs pxcor <= 0.5
      [ set pcolor red ]
    ask ( patch-set patch 3 -2 patch -2 -1 patch -1 -1 patch 8 -1 ) [
      set pcolor red 
    ]

    if ( pycor = -3 and pxcor > 8 ) or (pycor <= 3 and pycor >= -1 and pxcor < -3) or (pxcor = 3 and pycor <= -8) [
      set pcolor green - 1 
    ]
  ]
end