首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Netlogo:将一种海龟放到另一种海龟上。

Netlogo:将一种海龟放到另一种海龟上。
EN

Stack Overflow用户
提问于 2021-01-12 05:37:15
回答 1查看 126关注 0票数 0

我是NetLogo的新手。我需要你帮忙安置海龟。我有两种品种:房屋和人类。我已经建立了如下的房子:

代码语言:javascript
复制
create-houses 10[
    
    setxy random-xcor random-ycor
    set shape "house"
    set size 3
    
  ]

现在我得到了n个人类特工,我想把他们的XY设置成这样的方式,人类特工应该被放置在房屋代理人的顶部。任何一位房产经纪人都会假设这个人属于那所房子。我使用了以下代码将人工代理置于房屋代理之上:

代码语言:javascript
复制
 create-humans n-numbers
  [
    setxy random-xcor random-ycor
    set xcor [xcor] of min-one-of houses [distance myself]
    set ycor [ycor] of min-one-of houses [distance myself]
]

上面的方法的问题是,我仍然没有几个人的代理人,没有被放在任何家庭代理。我不想让任何经纪人无家可归。有什么办法解决这个问题吗?换句话说,我想把(随机)n个人代理分配给10个家庭代理。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 10:10:23

这里有两个不同的概念问题。

  1. 使用空间来表示所有权。所以,一旦你把人和房子放在同一个地方,那么你大概就是在写代码,意思是“在同一个地方找到房子”。在NetLogo中实现这一点的一个更好的方法是使用代理变量将房屋分配给个人,将人分配给房屋。
  2. 移动到选定的房子。

这是一个使用所有权概念的完整模型。每个房子和人都有一个属性来标识它的合作伙伴(解决问题1)。请注意,还有其他方法可以做到这一点,比如使用链接。然而,下面的方法引入了最少的新思想,也是理解海龟属性的好方法,这是NetLogo中的一个基本概念。

对于问题2,当你有像海龟一样的目标时,你可以使用move-to

代码语言:javascript
复制
breed [houses house]
houses-own [my-humans]

breed [humans human]
humans-own [my-house]

to setup
  clear-all
  create-houses 10
  [ setxy random-xcor random-ycor
    set shape "house"
    set size 3
    set my-humans nobody
  ]
  create-humans 50
  [ set my-house one-of houses
    move-to my-house
    ask my-house [set my-humans (turtle-set my-humans myself)]
  ]
end

除了我发现的问题之外,这段代码使用了withmyselfwith很简单,它只是创建了一组满足条件的海龟。myself有点让人困惑--它指的是海龟在问什么。因此,海龟要求这所房子设置它的“我的人”变量。当您在代码中使用myself时,检查代码是否已经完成了您认为的代码是很好的做法。在这种情况下,您可以为一个房子和一个人打开一个inspect窗口,并确保这两个变量匹配。

编辑代码允许多人在每间房子。这就需要为每个房子明确地构建人类的代理集。它从一个空的代理集(使用特殊代理nobody)开始,然后接受前一个代理集和新的人工的结合(使用turtle-set)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65678512

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档