首页 > 解决方案 > 计算邻居之间海龟的步数

问题描述

在世界上,个体和消息这两种主体随机定位在二维的态度空间中。

如果个人相信这些消息,他或她会创建与这些消息的链接。

然后,个人根据从自己到消息的距离的计算来调整他或她的态度位置。

在这里,我有一个问题。

我想让一个人在接触高价值信息时比接触低价值信息时多移动两倍。

但我现在能做的只是平均消息之间的距离。

这是我到目前为止所做的

breed [individuals individual]
breed [messages message]
messages-own [value]
undirected-link-breed [messagelinks messagelink]

to setup
  ca
  create-individuals 100 [initiate-individuals]
  reset-ticks
end


to go
  new-messages
end


to initiate-messages
  ifelse random-float 1 < value-p [ set value "H" ] [set value "L"]
end

to initiate-individuals
  setxy random-xcor random-ycor
end

to new-messages
  create-messages 30 [
  initiate-messages
  ask individuals [
    integrate-messages myself
]
]
end

to integrate-messages [newmessages]
  if random-float 1 < 0.3
    [create-messagelink-with newmessages
    setxy mean [xcor] of messagelink-neighbors mean [ycor] of messagelink-neighbors]
end

标签: netlogo

解决方案


我假设integrate-messages旨在处理一组消息,即使当接收者在您的代码中执行它时,它只是新创建的消息本身,而不是所有新创建的消息。可能有几种方法可以处理赋予“H”消息比“L”消息更大的影响的问题,但可能是最简单的方法,即简单地使用消息的 xcors 和 ycors 的加权平均值。我已经写了一个简短的模型,在integrate-messages.

breed [messages message]
breed [receivers receiver]
undirected-link-breed [messagelinks messagelink]

messages-own [value]

to setup
  clear-all
  create-receivers 1 [
    setxy random-xcor random-ycor
    set color green
  ]
  create-messages 5 [
    setxy random-xcor random-ycor
    set value ifelse-value (random-float 1 < 0.5) ["H"] ["L"]
    set color blue
    set label value
  ]
  reset-ticks
end

to go
  ask one-of receivers [
    integrate-messages n-of 3 messages
  ]
end

to integrate-messages [newmessages]
  ;to indicate which messages are being received.
  ask newmessages [set color red ]
  create-messagelinks-with newmessages [set color red]

  ;now calculate the weighted position relative to ALL linked messages.
  let mssgs [other-end] of my-messagelinks
  let wghts map [x -> ifelse-value ([value] of x = "H") [2] [1]] mssgs
  let xc sum (map [[m w] -> w * [xcor] of m ] mssgs wghts)
  let yc sum (map [[m w] -> w * [ycor] of m ] mssgs wghts)
  set xcor xc / sum wghts
  set ycor yc / sum wghts

  ;to show where the receiver ends up.
  set color red
end

推荐阅读