Вложенный запрос со ссылкой на разные породы в Netlogo

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

Допустим, у меня две породы, мужчины и женщины. женщины имеют случайные значения характеристик (переменные, сгенерированные при рождении), скажем, некоторое значение от 0 до 10 для интеллекта и привлекательности. У мужчин есть предпочтения (также переменные, генерируемые при рождении) относительно того, насколько им важны эти характеристики. Я бы хотел, чтобы мужчины выбрали, какую женщину они предпочитают больше всего, используя функцию полезности, и перешли к ним.

мой код выглядит примерно так:

мужчины владеют [pref-int pref-att] женщины владеют [int att утилита]

to choose-mate
 ask men [
  let pref-int [pref-int] of myself
  let pref-att [pref-att] of myself
  ask women [
     let int [int] of myself
     let att [att] of myself
     set utiilty pref-int*int + pref-att*att
     ]
  move to max-one-of women [ utilty ] 
 ]
end

но netlogo, похоже, не может получить доступ к переменным значениям женщин, о которых я спрашивал мужчин.

Любой совет?


person user3369508    schedule 01.03.2014    source источник


Ответы (1)


Я вижу пару проблем:

  1. Одна из проблем заключается в том, что ваши локальные переменные pref-int и pref-att имеют одно и то же имя и имеют собственные переменные. Как правило, переменным нужны уникальные имена.
  2. myself относится к агенту, который вызывает текущего агента (вероятно, это примитив с самым запутанным названием в NetLogo). self относится к текущему агенту. Похоже, вы используете myself вместо self. Однако [ some-variable ] of self совпадает с some-variable, поэтому вы редко используете self. NetLogo автоматически определяет, на какую переменную вы ссылаетесь из контекста.
  3. Вам нужны пробелы вокруг *s.
  4. move to должно быть move-to.

Итак, вот два способа сделать то, что вы пытаетесь сделать.

Использование локальных переменных:

to choose-mate
 ask men [
  let mans-pref-int pref-int
  let mans-pref-att pref-att
  ask women [
     set utiilty mans-pref-int * int + mans-pref-att * att
     ]
  move-to max-one-of women [ utilty ] 
 ]
end

Использование myself:

to choose-mate
 ask men [
  ask women [
     set utiilty ([pref-int] of myself) * int + ([pref-att] of myself) * att
     ]
  move-to max-one-of women [ utilty ] 
 ]
end

Я предпочитаю myself версию, но это дело вкуса.

Также еще одно наблюдение. utility меняется с каждым мужчиной. Это не глобальный атрибут конкретной женщины, а что-то особенное для каждого мужчины. Поэтому я бы не рекомендовал хранить его как женскую переменную. Вместо этого вы можете:

to choose-mate
 ask men [
  move-to max-one-of women [ 
    ([pref-int] of myself) * int + ([pref-att] of myself) * att
  ] 
 ]
end
person Bryan Head    schedule 02.03.2014