【问题标题】:Netlogo Turtles - sharing the difference between two turtlesNetlogo 海龟 - 分享两只海龟之间的区别
【发布时间】:2023-06-22 09:21:02
【问题描述】:

我对 Netlogo 还很陌生,一直在阅读 Railsback 和 Grimms 的优秀书籍,同时尝试自己的东西

目前,我正在尝试编写一种汇款方式,即两只乌龟相遇(例如乌龟 1 和乌龟 2),然后两只乌龟分享钱(例如 T1 有 4 美元,T2 有 6 美元,它们都带着 5 美元离开) 我尝试使用的代码如下

 to currency-share
   let neighbor one-of bystanders-here                    ; identify neighbor around
   if neighbor != nobody                             ;; is there a neighbor?  if there is
    [ set currency round ((currency + neighbor currency) / 2)] ; share money
 end

不幸的是,代码不起作用,我无法通过论坛找到任何使用类似想法的示例。也许我搜索不正确(使用龟交换,共享等关键词通常会出现补丁共享)。如果有人有任何模型可以推荐这种交换发生的地方,或者如果有人知道我可以如何改进我的代码,请告诉我。谢谢。

【问题讨论】:

    标签: netlogo turtle-graphics


    【解决方案1】:

    乍一看,这似乎是一个简单的语法问题。要获取邻居的currency,您应该使用of

    set currency round ((currency + [ currency ] of neighbor) / 2)
    

    但既然你也说过要两只海龟得到新的金额,你还需要加上:

    ask neighbor [ set currency [ currency ] of myself ]
    

    或者,也许你可以做一些不那么令人困惑的事情:

    set new-amount round ((currency + [ currency ] of neighbor) / 2)
    set currency new-amount
    ask neighbor [ set currency new-amount ]
    

    最后一个变体,在我看来稍微好一点,因为更通用(甚至可能更清晰)是:

    let sharers (turtle-set self one-of bystanders-here)
    let new-amount mean [ currency ] of sharers
    ask sharers [ set currency new-amount ]
    

    在最后一个中,您甚至不需要 if neighbor != nobody 检查,因为如果没有旁观者,turtle-set 将构建一个仅包含 self 的代理集,并且该集的平均货币将只是现在货币价值。

    【讨论】:

    • 感谢您的出色回答。你给了我三种不同的方式来看待它,我一定会在将来编写其他代码时参考这篇文章,并将所有三种可能性的逻辑应用到我所使用的模型的特定上下文中建设。
    • 附注我真的很喜欢学习 NetLogo,你对帖子的许多回复真的帮助了我。谢谢