'''
目标:本程序为强化学习第一个例子,cartPole,目标是保持Pole在直立状态,如果角度大于12度或者小车位置距离中心超过2.4个单位则算是失败了
作者:laowubiji
日期:2024年9月3日
'''
import sys
import gymnasium as gym
env=gym.make("CartPole-v1")
print(env.action_space)
'''
上面一条语句打印输入 Discrete(2)
即 离散值0和1,分别代表向左和向右推动小车
'''
observation, info= env.reset(seed=42)
print(observation,info)
'''
上面两条语句的打印结果如下:
[ 0.0273956 -0.00611216 0.03585979 0.0197368 ] {}
其中observation的输出是4元组,四个数值分别表示:小车位置、小车速度、棍的倾斜角度、棍的角速度
'''
def action_pos(status):
pos,v,ang,va=status
if pos<=0:
return 1
else:
return 0
def action_angle(status):
pos,v,ang,va=status
if ang>0:
return 1
else:
return 0
steps=0
for _ in range(1000):
action=env.action_space.sample()
# observation, reward,terminated,truncated,info=env.step(action)
# observation,reward,terminated,truncated,info=env.step(action_angle(observation))
observation,reward,terminated,truncated,info=env.step(action_pos(observation))
print(observation,reward,terminated,truncated,info)
'''
reward是强化学习所用的奖励,本实例中只要没有终结则为1.
termininated即代表游戏是否结束。
truncated在官方定义中用于处理诸如超市等特殊结束的情况
实际上在本实例中,truncated以及info都没有实际用到
'''
if terminated or truncated:
print("Episode finished after {} steps".format(steps))
observation,info=env.reset()
steps=0
else:
steps+=1
env.close()