''' 利用SARAS学习解决出租车问题 '''
"""
智能体必须在一个位置上接上乘客并在另一个位置放下乘客。
成功放下乘客,那么智能体将会得到奖励+20分,且每经过一
个时间步得到-1分。如果智能体错误搭载和放下,则会得到
-10分。因此,智能体的目标就是学习在最短时间内在正确的
位置搭载和放下乘客,且不会搭载非法乘客。
+---------+
|R: | : :G|
| : : : : |
| : : : : |
| | : | : |
|Y| : |B: |
+---------+
其中字母(R, G, Y, B)分别表示4个不同位置。
"""
import random
import gym
env = gym.make('Taxi-v1')
env.render() # 输出出租车环境
alpha = 0.4
gamma = 0.999
epsilon = 0.017
# 将Q表初始化为字典来保存状态-行为值
Q = {}
for s in range(env.observation_space.n):
for a in range(env.action_space.n):
Q[(s, a)] = 0.0
# 定义一个称为epsilon_greedy 的函数来根据epsilon贪婪策略选择行为
def epsilon_greedy(state, epsilon):
if random.uniform(0, 1) < epsilon:
return env.action_space.sample()
else:
return max(list(range(env.action_space.n)), key=lambda x: q[(state, x)])
for i in range(4000):
# 在r中保存每个情景的累计奖励
r = 0
# 在每次迭代中初始化状态
state = env.reset()
# 根据贪婪策略选择行为
action = epsilon_greedy(state, epsilon)
while True:
# 在状态下执行行为,并转移到下一状态
nextstate, reward, done, _ = env.step(action)
# 根据贪婪策略选取下一行为
nextaction = epsilon_greedy(nextstate, epsilon)
# 利用更新规则计算上一状态的Q值
Q[(state, action)] += alpha * (reward + gamma * Q[(nextstate, nextaction)] - Q[(state, action)])
# 最后,将状态和行为更新为下一状态和行为
action = nextaction
state = nextstate
r += reward
# 若情景到达终止状态,则停止
if done:
break
print("total reward: ", r)
env.close()
强化学习之利用SARAS学习解决出租车问题
最新推荐文章于 2024-10-12 23:20:11 发布
本文介绍了一个使用SARAS算法解决出租车问题的例子。智能体需在正确位置接载和放下乘客,以获得最大奖励。通过4000次迭代训练,智能体学会了在最短时间内完成任务,避免非法操作。
820

被折叠的 条评论
为什么被折叠?



