Netlogo отличается глобальными значениями от черепах

Я не понимаю, почему что-то появилось в моем коде netlogo, но, наконец, я обнаружил, что глобальные переменные меняют значения с черепах на черепах, возможно ли это? Я заметил это, потому что у меня есть 2 значения для печати в моем коде, например:

breed [players player]
breed [balls ball]

globals [
  TURNS;
  TEAM-OWNER
]
to setup
  clear-all
  reset-ticks
  set TURNS 0
  setup-players
  setup-ball
end

to setup-ball
  create-balls 1 [
    setxy 0 0
    set color orange
    set shape "bug"
    set size 2.5
  ]
end 

to setup-players
  create-players 5 [
    setxy 0 0
    set color white
    set shape "bug"
    set size 2.5
  ]
end 

to go 
  set TURNS TURNS + 1
  print word "this is the turns " TURNS
  print ( word " values " TEAM-OWNER)
  if ticks >= 1000 [ stop ]

    ask players [
    print ( word " values " TEAM-OWNER)
    fd 2 
    set TEAM-OWNER "red"
  ]

  ask balls [
    fd 2
    set TEAM-OWNER "black"
  ]

end

Это возможно? Глобальные значения не меняют значения во всех черепахах? Вот такая печать у меня получилась:

this is the turns  1
values 0
values 0
values red
values red
values red
values red
this is the turns 2
values black
values black
values red
values red
values red
values red

Это не было похоже на черный 1 раз? а красный другой раз? И почему я получаю 2 черных?

Так не должно быть - глобалы у всех одинаковые. Вам нужно будет добавить больше кода, чтобы люди заметили проблему — объявление globals, любые объявления turtles-own или breeds-own, а также любой код, который игроки запускают до или после printMY-GLOBAL-VALUE, поскольку они могут изменить его (скорее всего, причина ).

Jasper 26.04.2019 18:57

@Jasper Я поставил весь код

Liz Lamperouge 27.04.2019 18:40
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Глобальная переменная является глобальной - существует только ОДНА ее копия, и все черепахи извлекают и изменяют одну и ту же копию.

Посмотрите на этот кусок кода:

ask players [
  print ( word " values " TEAM-OWNER)
  fd 2 
  set TEAM-OWNER "red"
]

ask balls [
  fd 2
  set TEAM-OWNER "black"
]

Сначала каждый из ваших игроков перемещается вперед на две единицы расстояния, а затем устанавливает значение КОМАНДА-ВЛАДЕЛЕЦ на «красный». Если у вас 10 игроков, глобальная переменная TEAM-OWNER становится красной 10 раз. Затем каждый из ваших шаров перемещается вперед на две единицы расстояния и устанавливает переменную TEAM-OWNER в «черный». Пока у вас есть один (или несколько) шаров, глобальная переменная будет перезаписана.

Глобальная переменная используется для того, что одинаково для каждой черепахи в вашей модели.

хорошо, но почему в первую очередь значения 0 печатаются 2 раза? и то же самое произошло с черными значениями?

Liz Lamperouge 29.04.2019 13:02

Потому что в начале второго хода первое, что вы делаете, это печатаете КОМАНДНОЕ ЗНАЧЕНИЕ (это первое «черное»), затем первый игрок печатает его снова (второе), прежде чем изменить его на «красное» для другого. 4 игрока для печати.

JenB 29.04.2019 13:48

Другие вопросы по теме