Netlogo:将一种海龟放置到另一种类型
Netlogo: Placing one type of turtle to other type
我是 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 个内部代理。
这里在概念上有两个不同的问题。
- 使用space表示所有权。所以一旦你把人和房子放在同一个地方,那么你可能会编写代码,意思是“在我所在的同一个地方找到房子”。在 NetLogo 中,一个更好的方法是使用代理变量将房子分配给一个人,再将一个人分配给房子。
- 搬到选定的房子。
这是一个使用所有权概念的完整模型。每个房子和人都有一个属性来标识其合作伙伴(解决问题 1)。请注意,还有其他方法可以做到这一点,例如使用链接。然而,下面的方法引入了最少的新思想,也是理解 turtle 属性的好方法,这是 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
window,并确保这对变量匹配。
编辑了代码以允许每个房子有多个人。这需要为每个房屋明确构建人类代理集。它从一个空的代理集开始(使用特殊代理 nobody
),然后将之前的代理集和新的人合并(使用 turtle-set
)。
我是 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 个内部代理。
这里在概念上有两个不同的问题。
- 使用space表示所有权。所以一旦你把人和房子放在同一个地方,那么你可能会编写代码,意思是“在我所在的同一个地方找到房子”。在 NetLogo 中,一个更好的方法是使用代理变量将房子分配给一个人,再将一个人分配给房子。
- 搬到选定的房子。
这是一个使用所有权概念的完整模型。每个房子和人都有一个属性来标识其合作伙伴(解决问题 1)。请注意,还有其他方法可以做到这一点,例如使用链接。然而,下面的方法引入了最少的新思想,也是理解 turtle 属性的好方法,这是 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
window,并确保这对变量匹配。
编辑了代码以允许每个房子有多个人。这需要为每个房屋明确构建人类代理集。它从一个空的代理集开始(使用特殊代理 nobody
),然后将之前的代理集和新的人合并(使用 turtle-set
)。