我正在尝试在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 x 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]