Проблема может быть проиллюстрирована на фиктивном примере. Здесь s ваши преемники, и мы используем state> 100 в качестве текущего состояния.
a = numpy.arange(10)
successors = [a.copy(), a.copy(), a.copy()]
numpy.where(numpy.array_equal(state, state>100) for state in successors)
>>> (array([0], dtype=int64),)
Массив с элементом 0 отвечает за удаление на следующем шаге.
Предполагая, что преемники - это список, мы получаем:
[numpy.array_equal(i, i>100) for i in successor]
>>> [False, False False]
Для которого numpy.where просто возвращает первый элемент.
Чтобы избежать этой проблемы, проверьте, совпадает ли какое-либо из состояний, и если нет, не выполняйте удаление.
a = [np.array_equal(state, current_state) for state in successors]
if any(a):
invalid_moves = np.where(a)
successors = np.delete(successors, invalid_moves, axis=0)