2014-11-04 2 views
1

Я пытаюсь создать модель, в которой вопрос задается черепахам. Каждая черепаха представляет собой уникальную область знаний (1, 2, 3, 4, 5 ...), и каждый вопрос содержит случайное подмножество доменов, например (3 5 8).NetLogo: Создать случайный массив для глобальной переменной

Затем я хочу спросить черепах с идентификаторами, которые содержатся в вопросе, чтобы ответить на него. Я надеюсь получить совет:

  1. как создать случайный массив для вопроса (глобальная переменная) и;
  2. как сравнить это с идентификаторами черепах.

Это мой первый опыт использования NetLogo, поэтому я приношу свои извинения за незнание. И я определенно не прошу вас написать proc для меня, но я мог бы использовать некоторые советы в правильном направлении/командах, чтобы попробовать.

Для сравнения, я написал следующее, но я не уверен, что это сработает. Я беспокоюсь, если он ищет точное совпадение массива вопросов с идентификатором черепахи, совпадение никогда не будет найдено. То, что я намереваюсь, если идентификатор черепахи ЛЮБИМОСТЬ в массиве, THEN [set expert? 2]:

to give-an-answer 
    foreach question [ 
    if question = who [set expert? 2] 
    ] 
end 

Очень благодарен за любой совет, который вы можете мне дать!

Благодаря Джон

+0

Благодаря Seth и King-Ink, я думаю, что я взломал проблему. Я собираюсь проанализировать вывод, чтобы узнать, имеет ли он смысл, но вот код: –

ответ

1

Спасибо за ясный вопрос.

Часть первая может быть выполнена с учетом и повторения. Lput добавляет элемент в левую часть списка. Он использует синтаксис

Set mylist lput value mylist 

Значение будет вашей случайной областью знаний. Повторение повторяется так много раз.

Repeat 10 [thing] 

Где есть код, который вы хотите повторить. Поместите его в свой контекст, который вы получите.

Set question lput (random number-of-domains) question 

Часть 2. Первобытный элемент, который вы ищете, является членом? Он принимает форму

Member? Value list 

Он возвращает true, если значение в списке в противном случае неверно.

+0

Спасибо, миллион, King Ink –

2

Проще, если вы используете список агентов вместо списка. Использование агентов-наборов, как правило, является хорошим стилем в NetLogo и обычно проще, чем альтернативные подходы.

Вы можете сделать свой вопрос с n-of:

set question n-of turtles 10 

А потом черепаха может проверить, если это в вопросе с member?:

if member? self question 
    [ set expert? 2 ] 

Хотя, если вы хотите, чтобы все черепахи, которые часть вопроса установить expert? на 2, то проще всего сделать это сразу:

ask question [ 
    set expert? 2 
] 

Сделано! Нет необходимости в if или member? или в петле.

Несколько других биты советов:

  • В NetLogo, это только идиоматические закончить переменный со знаком вопроса, если он содержит истинное или ложное значение. Так странно set expert? 2. Почему не set expert? true? Если вам действительно нужно использовать целое число здесь, вы должны удалить знак вопроса из имени переменной.

  • Лучше всего избегать использования чисел, на которых вообще нет. Использование чисел в NetLogo почти всегда делает ваш код сложнее и сложнее писать - редко проще.

+0

Спасибо, спасибо, спасибо! Не только для решения моей проблемы, но и для сбора некоторых других недостатков в моем коде. Я отправлю заполненный код ниже ... –

Смежные вопросы