2015-10-31 63 views
2

我目前正在与Q学习和我有一个字典Q [状态,行动] 其中每个状态可以是任何东西即字符串,数字,列表..取决于应用。每个州有3或4个可能的行动。对于每个状态,我需要找到具有最高Q值的动作。问题是我不知道如何访问所有可能的行动,该国已直接从具有两个键的字典,所以我曾尝试使用for循环:Python访问字典,有两个键只使用一个键

for statex, actionx in self.array: 
    if statex == state and (actionx != None): 
     y[actionx] = self.array[statex, actionx] 
y.argMax() 

凡argMax()

def argMax(self): 
    """ 
    Returns the key with the highest value. 
    """ 
    if len(self.keys()) == 0: return None 
    all = self.items() 
    values = [x[1] for x in all] 
    maxIndex = values.index(max(values)) 
    return all[maxIndex][0] 

问题是计算时间太长。任何想法,我可以做得更快,可能通过消除循环?

+0

尝试使用'ITER(self.array)'或'ITER(self.items())' – ytpillai

+0

获取元组的列表将键作为第一个元素,将值作为第二个元素,并对其使用迭代器。通常情况下,更快的记忆方式 – ytpillai

+1

没有任何改变 –

回答

0

,如果你使用字典的字典它会快得多:

self.array[state][action] 
相关问题