【发布时间】:2021-01-11 14:11:14
【问题描述】:
我有以下情况。在离散域 0、1、...、L 上有 M 个独立的随机游走者。我们对 N 个相同的域执行此操作。这会产生一个矩阵X,其中X[i, j] 是walker i 在域j 上的位置。为了进行随机步骤,我向矩阵X 添加了一个具有随机+1 和-1 的形状相同的矩阵。然后我处理边缘。这很好用。
但是,我想将此模型扩展为具有不能相互穿过的固体粒子。这在 2 种情况下显示。
- 一个粒子在
i位置,第二个在i+1位置。第一个粒子向右移动,第二个向左移动。 - 一个粒子在
i位置,第二个在i+2位置。第一个粒子向右移动,而第二个粒子向左移动。
如果我独立完成所有步骤,我可以手动检查每个步骤,看看它是否合法。但是,O(M^2N) 的性能很差。是否有更有效的方法来检测哪些矩阵元素对X[i,j], X[k, j] 导致两个粒子相互穿过,最好以矢量化方式?这样,我可以让模拟跳过这些步骤。
【问题讨论】:
-
案例 1 和 2 的预期行为是什么?您是要采样直到没有碰撞,还是要手动解决?即第一个步行者走了,然后第二个步行者向另一个方向移动?
-
我觉得最简单的方法就是在那个时间步不更新这两个步行者。
-
你有进步吗?
标签: python numpy collision-detection random-walk discrete-space