强化学习之利用SARAS学习解决出租车问题

本文介绍了一个使用SARAS算法解决出租车问题的例子。智能体需在正确位置接载和放下乘客,以获得最大奖励。通过4000次迭代训练,智能体学会了在最短时间内完成任务,避免非法操作。
''' 利用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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值