我是NetLogo的新手。我需要你帮忙安置海龟。我有两种品种:房屋和人类。我已经建立了如下的房子:
create-houses 10[
setxy random-xcor random-ycor
set shape "house"
set size 3
]现在我得到了n个人类特工,我想把他们的XY设置成这样的方式,人类特工应该被放置在房屋代理人的顶部。任何一位房产经纪人都会假设这个人属于那所房子。我使用了以下代码将人工代理置于房屋代理之上:
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个家庭代理。
发布于 2021-01-12 10:10:23
这里有两个不同的概念问题。
这是一个使用所有权概念的完整模型。每个房子和人都有一个属性来标识它的合作伙伴(解决问题1)。请注意,还有其他方法可以做到这一点,比如使用链接。然而,下面的方法引入了最少的新思想,也是理解海龟属性的好方法,这是NetLogo中的一个基本概念。
对于问题2,当你有像海龟一样的目标时,你可以使用move-to。
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除了我发现的问题之外,这段代码使用了with和myself。with很简单,它只是创建了一组满足条件的海龟。myself有点让人困惑--它指的是海龟在问什么。因此,海龟要求这所房子设置它的“我的人”变量。当您在代码中使用myself时,检查代码是否已经完成了您认为的代码是很好的做法。在这种情况下,您可以为一个房子和一个人打开一个inspect窗口,并确保这两个变量匹配。
编辑代码允许多人在每间房子。这就需要为每个房子明确地构建人类的代理集。它从一个空的代理集(使用特殊代理nobody)开始,然后接受前一个代理集和新的人工的结合(使用turtle-set)。
https://stackoverflow.com/questions/65678512
复制相似问题