Q-Learning分桶函数报错:数组真值歧义问题求解及代码修正
Q-Learning分桶函数ValueError问题分析与修复
错误原因
触发错误的核心原因是输入的state元素是numpy数组而非单个数值。OpenAI Gym环境返回的状态(比如env.reset()的返回值)是numpy数组类型,当通过state[i]取元素时,得到的仍是一个0维numpy数组,直接和数值做比较会生成布尔数组,而if条件判断无法解析布尔数组的真假,因此抛出"数组的真值不明确"的ValueError。
修正后的代码
只需将state[i]转换为单个数值即可,这里使用numpy数组的.item()方法提取标量值:
def state_to_bucket(state): bucket_indice = [] for i in range(len(state)): max_bucket = NUM_BUCKETS[i] - 1 minimum = STATE_BOUNDS[i][0] maximum = STATE_BOUNDS[i][1] # 将numpy数组元素转换为单个数值 state_value = state[i].item() if state_value <= minimum: bucket_index = 0 elif state_value >= maximum: bucket_index = max_bucket else: bound_width = maximum - minimum bucket_index = int(round(max_bucket*(state_value - minimum)/bound_width)) bucket_indice.append(bucket_index) return tuple(bucket_indice)
内容的提问来源于stack exchange,提问作者misoneder
相关产品推荐
相关产品推荐

