Я пытаюсь реализовать процесс принятия решений Маркова в Python и у меня возникают некоторые проблемы со скоростью при выполнении следующего кода (что неудивительно ...):
def p(j, state, action):
if (np.linalg.norm(j[0,:]-np.array([-100,-100]))>0.1 and np.linalg.norm(state[0,:]-state[1,:])<0.1):
return 0
elif (np.linalg.norm(j[0,:]-np.array([100,100]))>0.1 and np.linalg.norm(state[0,:]-np.array([5,1]))<0.1):
return 0
elif (np.linalg.norm(j[0,:]-np.array([100,100]))<0.1 and np.linalg.norm(state[0,:]-np.array([5,1]))<0.1):
return 1
else: ....... (here other stuff follows but this isnt the issue)
Функция должна дать мневероятность того, что я нахожусь в состоянии (state
), для перехода в состояние (j
) с использованием входа (action
), который он делает правильно, но медленно.
В настоящее время мне нужно дважды зациклить переменные j
и state
, которые являются массивами 2 на 2.В идеале я бы смог выяснить, как написать такую функцию, которая вводит массивы NOSTATES x 2 x 2, где NOSTATES - число состояний.
Я думаю, мне следует попытаться векторизовать мой код, но, к сожалению,Я не уверен, как реализовать проверки на равенство.
Любая помощь будет принята с благодарностью!
РЕДАКТИРОВАТЬ: Типичный ввод для p()
будет:
j=np.array([[1,1],[3,3]]) state =np.array([[1,2],[2,3]]) action = [0,1]