2013-08-04 51 views
0

我正在与捕食者,猎物和食物进行进化模拟(植物根据生物发出的条件和肉而在地形上生长)。 他们每个人都在一个(x,y)位置。现在,每个生物都有一些对红色,绿色和蓝色色彩通道很敏感的“眼睛”,当一个生物或一块食物在他们的观察距离内时,眼睛反应发送一个输入给他们的神经网络,取决于他们所看到的物体的颜色,它是相对角度,它与生物的距离。移动点距离内的点

我现在正在做的是遍历所有的植物,肉片和生物,并检查它们是否在生物的观察距离内。如果该条件成立,则计算网络的输入。

问题在于,与观看距离的生物相比,世界是巨大的(大约10,000 * 10,000“单位”),通常在150和300“单位”之间。最重要的是,根据地形条件(最多可达几千),植物数量可以变得非常高,与其他所有生物和肉块一起。因此,我通常最终会为每个生物执行一个巨大的循环,当大多数生物和食物被检查完全不相关(太遥远)时,这确实会减慢模拟速度。

我要求的是一些方法或算法,可以减少每个循环中检查距离的点数,限制被检查点的距离或其他技术。 PS:我想过在不同的“区域”中划分模拟,所以如果一个生物在一个区域内,它只会检查该特定区域中的其他点(食物和其他生物)。然而,当他们不断移动时,如果他们在一个区域的边缘,这会使他们的观点非常不准确。 我还通过检查距离^ 2(不执行sqrt)稍微提高了速度,并且只在计算它小于viewing_distance^2时才计算它。

回答

1

划分世界的区域。如果区域宽度稍大于最大观看距离,则只需检查至多4个区域。

使用四叉树或kd树的缺点是需要不断更新结构。但它可能会更好,做一些分析。

0

的四叉树结构可能被用于几何表示: http://en.wikipedia.org/wiki/Quadtree

这一切都取决于你有多少效率的需要。这些区域的回答也有问题,如果你的生物靠近一个区域的边界,你可能会扫描4个区域..