У меня следующая ситуация. В дискретной области 0, 1, ..., L имеется M независимых случайных блуждающих. Сделаем это для N одинаковых областей. В результате получается матрица X
, где X[i, j]
— это позиция пешехода i
в домене j
. Чтобы сделать случайный шаг, я добавляю матрицу идентичной формы со случайными +1 и -1 к матрице X
. Затем занимаюсь краями. Это хорошо работает.
Однако я хочу расширить эту модель, чтобы иметь твердые частицы, которые не могут проходить друг через друга. Это показано в 2 случаях.
- Одна частица находится в позиции
i
, вторая в позицииi+1
. Первая частица движется вправо, а вторая — влево. - Одна частица находится в позиции
i
, вторая — в позицииi+2
. Первая частица движется вправо, а вторая частица движется влево.
Если я выполняю все шаги независимо, я могу проверить каждый шаг вручную, чтобы убедиться, что это законный шаг. Однако это плохая O(M^2N)
производительность. Есть ли более эффективный способ определить, какие пары матричных элементов X[i,j], X[k, j]
приводят к прохождению двух частиц друг через друга, желательно векторизованным способом? Таким образом, я могу заставить симуляцию пропустить эти шаги.