在 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
[
...
ifelse
在if
里面,所以它只在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
]
]
我想写一个 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
[
...
ifelse
在if
里面,所以它只在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
]
]