Google Colab中OpenAI Gym Taxi-v3的env.render()输出错误不一致问题
解决OpenAI Gym Taxi-v3在Colab中状态显示不一致的问题
问题原因
你遇到的显示异常是因为函数中调用的env.reset()会随机初始化环境内部状态,尽管之后手动设置了env.s,但Gym的渲染模块可能残留了重置后的临时状态,导致第一次渲染时显示的出租车位置与设定状态不匹配。
修复方案
移除函数中的env.reset()调用,直接手动设置环境状态即可,同时修正render()结果的打印方式:
def showStateVec(txR=3, txC=1, pxI=2, des=0): state = env.encode(txR, txC, pxI, des) env.s = state # 直接指定目标状态,无需重置环境 print("State ", env.s, list(env.decode(env.s))) p = env.render() print(p) # ansi模式返回完整字符串,直接打印即可 for k, v in env.P[state].items(): print(v)
说明
- 去掉
env.reset()后,环境不会被随机初始化,手动设置的env.s会完全控制当前状态,渲染结果会严格匹配设定的出租车、乘客位置和目的地。 - 原代码中
print(p[0])是错误用法,render(mode='ansi')返回的是完整的网格字符串,直接打印p才能正确显示整个环境状态。
调用修改后的函数showStateVec(3,1,2,0),每次都会正确显示出租车在第4行第2列(对应坐标(3,1),行索引从0开始)的位置,不会再出现显示错位的问题。
内容的提问来源于stack exchange,提问作者Calcutta
相关产品推荐
相关产品推荐

