写一个驾驶模拟,我想一次使用三个命令,以保持汽车单个文件在三个补丁道路

时间:2018-01-27 13:28:35

标签: netlogo

这是为了让汽车不能将汽车从前方或前方向左侧和右侧通过。我如何使用所有命令,如何链接它们?

  to place-cars-level0                                    ;creating basic real life driver

 ;make a random placement of cars
  ask n-of (num-of-cars-level0 / 3) patches with [meaning = "road-up"] [
    if not any? cars-on patch pxcor (pycor + 1) and not any? cars-here and not any? cars-on patch pxcor (pycor - 1) and not any? patches with [meaning = "crossing"] in-radius 2 [
  sprout-cars 1 [
    set size 3
    set will-turn? "maybe"
    set will-stop? "maybe"
    set shape "car top"
    set politeness basic-politeness + random (101 - basic-politeness)
    if random 100 > basic-politeness [set politeness random 21]
    set heading 0
    let s random 10
    if s < 7 [set maxSpeed speed-limit - 15 + random 16]
    if s = 7 [set maxSpeed speed-limit - 20 + random 6]
    if s > 7 [set maxSpeed speed-limit + random 16]
    set speed maxSpeed - random 20
  ]
]
]    ; set the number of cars for the level, size, politness,speed

 ask n-of (num-of-cars-level0 / 3) patches with [meaning = "road-down" and count turtles-on neighbors = 0] [
if not any? cars-on patch pxcor (pycor + 1) and not any? cars-here and not any? cars-on patch pxcor (pycor - 1) and not any? patches with [meaning = "crossing"] in-radius 2 [
  sprout-cars 1 [
    set size 3
    set shape "car top"
    set politeness basic-politeness + random (101 - basic-politeness)
    if random 100 > basic-politeness [set politeness random 21]
    set heading 180
    set will-turn? "maybe"
    set will-stop? "maybe"
    let s random 10
    if s < 7 [set maxSpeed speed-limit - 15 + random 16]
    if s = 7 [set maxSpeed speed-limit - 20 + random 6]
    if s > 7 [set maxSpeed speed-limit + random 16]
    set speed maxSpeed - random 20
  ]
  ]
  ]

   ask n-of (num-of-cars-level0 / 3) patches with [meaning = "road-left" and 
 count turtles-on neighbors = 0] [
  if not any? cars-on patch (pxcor + 1) pycor and not any? cars-here and not 
any? cars-on patch (pxcor - 1) pycor and not any? patches with [meaning = 
"crossing"] in-radius 2 [
  sprout-cars 1 [
    set will-turn? "maybe"
    set will-stop? "maybe"
    set size 3
    set shape "car top"
    set politeness basic-politeness + random (101 - basic-politeness)
    if random 100 > basic-politeness [set politeness random 21]
    set heading 270
    let s random 10
    if s < 7 [set maxSpeed speed-limit - 15 + random 16]
    if s = 7 [set maxSpeed speed-limit - 20 + random 6]
    if s > 7 [set maxSpeed speed-limit + random 16]
    set speed maxSpeed - random 20
  ]
   ]
  ]

  while [count cars < num-of-cars-level0] [
  ask one-of patches with [meaning = "road-right"] [
  if not any? cars-on patch (pxcor + 1) pycor and not any? cars-here and not 
any? cars-on patch (pxcor - 1) pycor and not any? patches with [meaning = 
"crossing"] in-radius 2 [
    sprout-cars 1 [
      set will-turn? "maybe"
      set will-stop? "maybe"
      set size 3
      set shape "car top"
      set politeness basic-politeness + random (101 - basic-politeness)
      if random 100 > basic-politeness [set politeness random 21]
      set heading 90
      let s random 10
      if s < 7 [set maxSpeed speed-limit - 15 + random 16]
      if s = 7 [set maxSpeed speed-limit - 20 + random 6]
      if s > 7 [set maxSpeed speed-limit + random 16]
      set speed maxSpeed - random 20
    ]
        ]
    ]
  ]

  end

在上面的部分中是用于编写汽车位置的代码,下面是速度和控制

to control-speed
let car-ahead one-of cars-on patch-ahead 4
ifelse car-ahead = nobody  [
  ifelse speed < maxSpeed [set speed speed + acceleration] [set speed speed 
- deceleration]
]
[
ifelse [speed] of car-ahead = 0 [set speed 0] [
  ifelse [speed] of car-ahead >= maxSpeed [
    set speed maxSpeed
    set speed speed - deceleration
  ] [
  ;try to overtake
  ;ifelse [meaning] of patch-left-and-ahead 90 1 = meaning and not any? turtles-on patch-left-and-ahead 90 1 and [meaning] of patch-left-and-ahead 90 1 != "crossroad"
  ;and meaning != "crossing" and [meaning] of patch-left-and-ahead 180 1.3 != "crossing" and not any? turtles-on patch-left-and-ahead 169 3
  ;and not any? turtles-on patch-left-and-ahead 45 1 and not any? turtles-on patch-left-and-ahead 135 1 and not any? turtles-on patch-left-and-ahead 23 2
 ; and not any? turtles-on patch-left-and-ahead 157 2 and not any? turtles-on patch-left-and-ahead 12 3 and [meaning] of patch-ahead 1 != "crossing" [move-to patch-left-and-ahead 90 1] [


   ; ifelse [meaning] of patch-right-and-ahead 90 1 = meaning and not any? turtles-on patch-right-and-ahead 90 14 and [meaning] of patch-right-and-ahead 90 1 != "crossroad"
    ;and meaning != "crossing" and [meaning] of patch-right-and-ahead 180 1.3 != "crossing" and not any? turtles-on patch-right-and-ahead 12 3
    ;and not any? turtles-on patch-right-and-ahead 45 1 and not any? turtles-on patch-right-and-ahead 135 1 and not any? turtles-on patch-right-and-ahead 23 2
    ;and not any? turtles-on patch-right-and-ahead 157 2 and not any? turtles-on patch-right-and-ahead 169 3 and [meaning] of patch-ahead 1 != "crossing"[move-to patch-right-and-ahead 90 1] [
      ;set speed [speed] of car-ahead
      ;set speed speed - deceleration]
  ]



  ]
]

我希望这更有用the image shows the overall simulation

如果你能看到图像,我的目的是在每条车道上保留一辆车而不是每条车道并排三辆,这是为了模拟半自动车道中心

1 个答案:

答案 0 :(得分:1)

好的,而不是做

let car-ahead one-of cars-on patch-ahead 4

您可能想要做的是创建一个潜在汽车可能占据的所有三个补丁的补丁集。在不知道你是如何创建车道的情况下,这有点困难,你需要小心,因为提出要求的汽车也可能是三个补丁中的任何一个。创建该补丁集后,您可以简单地执行之前所做的操作,但使用补丁集。

let in-lane (patch-set patch-ahead 4 <other patches you need go here>)
let car-ahead one-of cars-on in-lane