NetLogo, вопросы об отрицании (абсолютном дополнении), HubNet и переопределении hubnet-send

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

Мне удалось заставить это работать, установив флажок «Зеркальное 2D-представление на клиентах» в Центре управления Hubnet и добавив следующий код.

ask turtles[hubnet-send-override [user-id] of self turtles "hidden?" [true]]
ask turtles[hubnet-send-override [user-id] of self [turtlesicansee] of self "hidden?" [false]]

Хотя в настоящее время это работает, у меня есть два вопроса о коде:

1) Первая строка является избыточной, если бы я мог взять дополнение Tursicansee во второй строке (и заменить false на true). Есть ли способ сделать это, эффективно заявив, что я хочу спрятать всех черепах не в Turtlesicansee?

2) Я не уверен в количественной оценке во втором утверждении. Я хочу сказать каждой черепашке (клиенту), что единственные черепахи, которых она может видеть, это черепахи в ЕЕ черепаховом озере. Это то, что я получаю? Частично меня смущает то, что я прошу черепах отправлять сообщения переопределения, но я действительно не понимаю, почему это имеет значение, от какой черепахи пришло сообщение (но я не понял, как получить правильную количественную оценку без спросите команду черепах)

В любом случае, может ли кто-нибудь помочь мне с этим?


person ProfessorHelloKittyNr1    schedule 05.02.2014    source источник
comment
of self всегда избыточен и может быть опущен. замените [foo] of self просто foo.   -  person Seth Tisue    schedule 06.02.2014
comment
Хорошо спасибо. Любая идея о вопросе дополнения?   -  person ProfessorHelloKittyNr1    schedule 07.02.2014
comment
Я не совсем знаком с HubNet. Надеюсь, кто-то еще ответит.   -  person Seth Tisue    schedule 07.02.2014


Ответы (1)


О дополнении и необходимости вашей первой линии (говорите каждому клиенту спрятать всех черепах)

Во-первых, что я предполагаю... 1) каждая черепаха в модели связана с клиентом концентратора (студентом) 2) в модели нет других черепах или видов черепах. 3) набор агентов «turtlesicansee» — это переменная черепахи, которая меняется со временем.

С учетом этих предположений один из способов получить дополнение для turtlesicansee — это

let onesicantsee turtles with [ not member? self turtlesicansee ] 

Это создаст временную переменную с дополнениемtursicansee.

Таким образом, вы можете выполнить свои две команды с меньшей избыточностью, сказав:

ask turtles[
  let onesicantsee turtles with [ not member? self turtlesicansee ]
  hubnet-send-override user-id   turtlesicansee   "hidden?" [false] 
  hubnet-send-override user-id   onesicantsee     "hidden?" [true]
]

ОДНАКО установка переопределения на клиенте (по крайней мере, в моем понимании/ментальной модели вещей) не дорогая. На самом деле это ничего не вызывает, а устанавливает «фильтр» при следующем обновлении дисплея. Итак, ваш исходный код не так уж плох. Вам нужно манипулировать поведением фильтра для всех черепах, и ваш подход может быть быстрее, чем тот, который я написал здесь.

К вопросу о «логике» команды HubNet здесь и вашей заметке «Часть того, что меня смущает...». Согласен, это очень странно. Команда «hubnet-send-override» может быть запущена вне блока ask-turtles. Но в этом случае (и в большинстве случаев) вам необходимо персонализировать «фильтр» для каждой черепахи (ученика), используя их идентификатор пользователя и их переменные turtlesicansee. Таким образом, выполнение команды внутри черепашек ask устанавливает область действия этих переменных для каждого ученика по очереди. [Имеет ли это смысл?]

person corey    schedule 08.02.2014
comment
Согласитесь, я бы, вероятно, просто использовал исходный подход (установил все на false, переопределил некоторые на true), вместо того, чтобы беспокоиться о вычислении дополнения. Во всяком случае, nbd в любом случае, насколько я вижу. - person Seth Tisue; 08.02.2014
comment
Благодарю вас! Это было очень полезно! - person ProfessorHelloKittyNr1; 09.02.2014