本文分享了由Vitor Lemos编写的关于AnyLogic的使用实践技巧,希望能为正在学习或使用AnyLogic的用户提供帮助。
原文:https://www.theanylogicmodeler.com/post/coordinates-inception
作者:VitorLemos
更新:2022,Jan18
阅读时间:2min
在AnyLogic中,获取智能体的坐标(在离散或连续空间中)相当简单:
myAgent.getX() or myAgent.getY()
但是如果智能体嵌入到另一个智能体中会怎么样?
想象一下,我们有一个仓库(智能体),其中有三个不同的存储区域,每个区域的尺寸为100x100,每个区域的中心正好有一个箱子:
仓库位于Main中,位于坐标x=10,y=10处。
现在想确定仓库内某个箱子的X坐标,以便您可以计算去哪里取箱子或确定箱子占用的空间或其他类似的计算。
假设我们的箱子在区域3的中心位置。根据心算,应该正好是260,(2个存储区域100,盒子在第三个存储区的中间,所以100/2=50,仓库的X=10[81] ,因此是100+100+50+10)
但是,当你获取箱子的X坐标时,结果是:50?
这是因为那个箱子位于存储区域3内,而所获取的是相对于所在区域起点的坐标。所以它会返回存储区域内的X坐标。为了获得相对于Main原点的绝对X坐标,需要对所有父智能体的X坐标求和:
Box X w.r.t. Main=box X + parent storage area X + warehouse X
使用此计算,您将得到预期的260,这同样适用于Y和Z坐标或任何其他坐标系。但这仅在所有智能体具有完全相同的比例时才有效,因此请首先确保是这种情况;-),否则您需要做更 多的数学杂技才能得到正确的答案。
上面的比较简单,但是如果不知道有多少层嵌套怎么办?例如,你有一个箱子,在仓库内的存储区域内的一个箱子,的箱子,的箱子...... 的箱子里
通过递归添加父智能体的X坐标可以达到相同的结果:
Agent agent = myBox;
double x = myBox.getX();
while (agent.getOwner != null) {
agent = agent.getOwner();
double += agent.getX();
}
欢迎此处下载示例模型,或您也可以从云中运行或下载模型了解本文的功能: