在NetLogo模拟中合并流量通道

时间:2015-12-14 08:45:27

标签: netlogo

我想写一个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度。

What I want

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

What is actually happening

我的代码是:

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

3 个答案:

答案 0 :(得分:2)

您写道:

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
  [
    ...

这就是你如何表达“如果ycor是-10.75,做到这一点;但如果ycor是-14.25,那就改为”。

答案 1 :(得分:2)

我认为你的问题是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
  ]
]

答案 2 :(得分:0)

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