在 NetLogo 仿真中合并车道

Merge traffic lanes in NetLogo simulation

我想写一个 NetLogo 程序来合并汽车车道。车辆分为 4 条车道,车道间隔 3.5 米(每块代表 1 米)。每条车道的中心坐标在 ycor 值 -3.75、-7.25、-10.75 和 -14.25。

车辆有随机 xcor 值,其中一条车道的中心有 ycor 值,并且正在向右行驶。我希望交通合并,以便驶向地图中心 (distancexy 0 0 <50) 的汽车全部移动到 ycor = -14.25 处的同一条车道,如图所示。所以已经在那条车道上的车继续往前走,但是其他车道上的车右转45度换道,到了pycor = -14.25车道再左转45度。

汽车向右转。但是,我设置的当汽车到达 ycor = -14.25 时再次向左转的条件不起作用。相反,汽车继续直行,如下图所示穿过车道。

我的代码是:

ifelse ycor = -14.25
[ fd speed ]
[ rt 45
  fd speed
  ifelse ycor = -14.25
  [ lt 45
    fd speed ]
  [ fd speed ]
]
]

您写道:

if ycor = -10.75
[
  rt 45
  fd speed 
  ;;;fd 5.1
  ifelse ycor = -14.25
  [
    lt 45
    fd speed 
  ]
  [
    fd speed 
  ]
]

如果我遗漏了一些无关紧要的东西,那就是:

if ycor = -10.75
[
  ...
  ifelse ycor = -14.25
  [
    ...

ifelseif里面,所以它只在ycor为-10.75时运行。但是ycor怎么可能等于-10.75,怎么可能等于-14.25呢?它不能,所以第二个条件永远不会触发。

也许您想要的结构是:

ifelse ycor = -10.75
[
  ...
]
[
  ifelse ycor = -14.25
  [
    ...

这就是你表达的方式"if ycor is -10.75, do this; but if ycor is -14.25, do that instead"。

 ifelse ycor = -14.25 [
    fd speed
    ]
    [
    rt 45
    fd speed
    ifelse ycor = -14.25
       [
       lt 45
       fd speed
       ]
       [
       fd speed
       ]
    ]
   ]

我认为你的问题是 ycor 永远不会完全等于 -14.25,除非它从 -14.25 开始。这是因为汽车向前移动并且仅在移动后检查其位置,因此它可能移动到 -14.5 或 -14.0 或其他不是 -14.25 的值。在这种情况下,您希望它在靠近 -14.25 车道时向左转。尝试这样的事情:

ifelse ycor = -14.25
[ fd speed ]
[ if heading = 90 [ rt 45 ]
  fd speed
  if ycor <= -12.5
  [ set heading
    set ycor -14.25
  ]
]