Как MAP через агентский набор?

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

Я бы сделал что-то вроде

reduce patch-set (map [patch-set neighbors self] patches with [somecondition?]) 

Но MAP и REDUCE не будут работать на наборах агентов!

2 ответа

Решение

Нормальная идея map на самом деле не имеет смысла для набора, но вы можете создать список с of, а затем преобразовать его в набор патчей.

let _nbrs patch-set [neighbors] of mypatches

Вы фильтруете либо mypatches или же _nbrs с with на любых условиях вы хотите.

Вот сумасшедший взлом, который я сделал, чтобы справиться с такой проблемой. Обратите внимание, что я действительно хотел сделать список числовых значений, полученных в результате применения функции к каждому агенту в наборе агентов, но нет. Мне нужно, чтобы они все применили функцию, касающуюся меня, а затем я должен вызвать функцию еще один раз, чтобы выяснить, какой результат был передан мне. Мне также пришлось переписать функцию, чтобы в качестве аргумента можно было указать интересующего меня агента (если я запускаю его) или меня в качестве аргумента (если агент запускает его для меня). Шиш!

to-report min-edge-distance [agentset maxsize]
  report ifelse-value (any? agentset)
    [edge-distance min-one-of agentset [edge-distance myself true] false]  ; grr, what I want is min map edge-distance agentset, instead I have to do backflips
    [maxsize]
end


to-report edge-distance [alex me?]
  report ifelse-value (me?)  ;because of netlogo's perverse syntax, I've been forced to ask someone else to figure out my edge distance – alex may be me!
   [(distance alex) * (sqrt [energy] of alex / (sqrt [energy] of alex + sqrt energy) )] ;alex is me!
   [(distance alex) * (sqrt energy / (sqrt [energy] of alex + sqrt energy) )] ; alex is not me
end
Другие вопросы по тегам