Дайте специфику c автомобилей этой породы по собственной инструкции Netlogo - PullRequest
1 голос
/ 12 марта 2020

Хорошо, я уже некоторое время занимаюсь моделированием, чтобы продемонстрировать, как умные автомобили будут вести себя на автомагистрали в реальном мире. У меня есть ползунок, который меняет цвет половины автомобилей на дороге, и я хотел бы, чтобы у этих автомобилей были свои настройки и другие автомобили вели себя одинаково. Вот код, который меняет цвет.

Это процедура настройки и переменные для автомобиля.

cars-own [
speed ; the current speed of the car
top-speed ; the maximum speed of the car (different for all cars)
target-lane ; the desired lane of the car
patience ; the driver's current level of patience
autonomy-level ; the cars current level of autonomy
]

to setup
clear-all
set-default-shape turtles "car"
draw-road
draw-footpath
make-people
create-or-remove-cars
set-level-of-autonomy
reset-ticks
end

И это go процедура, которая заставляет автомобили двигаться.

to go
create-or-remove-cars
ask cars [ move-forward ]
ask cars with [ patience <= 0 ] [ choose-new-lane ]
ask cars with [ ycor != target-lane ] [ move-to-target-lane ]
tick
end
to set-level-of-autonomy
  let num-change number-of-cars / 2 - count turtles with [color = orange or color = red or color = yellow]
  ask n-of num-change cars
  [ if level-of-autonomy = 0 [set color blue]
    if level-of-autonomy = 1 [set color blue + 1.0]
    if level-of-autonomy = 2 [set color cyan]
    if level-of-autonomy = 3 [set color turquoise]
    if level-of-autonomy = 4 [set color green]
    if level-of-autonomy = 5 [set color lime]
  ]
end

Если после запуска процедуры go я хотел, чтобы заданные c автомобили, у которых их цвета менялись на go по дороге, по-разному, в зависимости от скорости машины или терпения водителей, чтобы переключиться Лейн, как мне их конкретно идентифицировать?

Я попробовал утверждение If, где я говорю, что цвет машины не оранжевый, а красный или желтый, но ..... это не сработает. Любая помощь будет принята с благодарностью.

1 Ответ

1 голос
/ 12 марта 2020

Один из подходов состоит в том, чтобы определить другой тип автомобиля, а затем те автомобили, которые изменили цвет, также меняют свою породу. Затем вы можете ссылаться на все такие автомобили по названию их новой породы. Например,

breed [cars2 car2]
cars2-own [
the same variables as cars-own
]
....
to set-level-of-autonomy
  let num-change number-of-cars / 2 - count turtles with [color = orange or color = red or color = yellow]
  ask n-of num-change cars
  [ if level-of-autonomy = 0 [set color blue set breed cars2]
    if level-of-autonomy = 1 [set color blue + 1.0 set breed cars2]
    if level-of-autonomy = 2 [set color cyan set breed cars2]
    if level-of-autonomy = 3 [set color turquoise set breed cars2]
    if level-of-autonomy = 4 [set color green set breed cars2]
    if level-of-autonomy = 5 [set color lime set breed cars2]
  ]
end

Когда cars изменяет свои breed на cars2, значения их "собственных" переменных останутся неизменными, пока эти переменные были перечислены как cars2-own переменные как хорошо. Теперь вы можете ссылаться на автомобили и автомобили2 отдельно. Обратите внимание, что если все автомобили имеют одно из пяти указанных значений уровня автономности, вы можете немного упростить.

to set-level-of-autonomy
      let num-change number-of-cars / 2 - count turtles with [color = orange or color = red or color = yellow]
      ask n-of num-change cars
      [ if level-of-autonomy = 0 [set color blue]
        if level-of-autonomy = 1 [set color blue + 1.0]
        if level-of-autonomy = 2 [set color cyan]
        if level-of-autonomy = 3 [set color turquoise]
        if level-of-autonomy = 4 [set color green]
        if level-of-autonomy = 5 [set color lime set]
        set breed cars2
      ]
    end

Другой подход заключается в определении набора агентов автомобилей с измененными цветами, а не новая порода.

globals [changed-cars]
......
let changed-cars no-turtles
........
    to set-level-of-autonomy
          let num-change number-of-cars / 2 - count turtles with [color = orange or color = red or color = yellow]
          ask n-of num-change cars
          [ if level-of-autonomy = 0 [set color blue]
            if level-of-autonomy = 1 [set color blue + 1.0]
            if level-of-autonomy = 2 [set color cyan]
            if level-of-autonomy = 3 [set color turquoise]
            if level-of-autonomy = 4 [set color green]
            if level-of-autonomy = 5 [set color lime set]
            set changed-cars (turtle-set changed-cars self)
          ]
        end

Каждый измененный автомобиль помещает себя в набор агентов changed-cars. Теперь cars относится ко всем автомобилям, а changed-cars относится только к тем машинам, которые изменились. changed-cars является подмножеством cars. С breeds эти две породы независимы друг от друга.

Надеюсь, это поможет, Чарльз

...