强化学习的Q-learning算法demo

import numpy as np

# 状态空间大小
state_size = 5
# 动作空间大小
action_size = 1
# 学习率
learning_rate = 0.5
# 折扣因子
discount_factor = 0.95
# 探索率
epsilon = 0.1
# 最大迭代次数
max_iterations = 10000

# Q-table初始化
q_table = np.zeros((state_size, action_size))
print(q_table)


# Q-learning算法
def q_learning():
    for iteration in range(max_iterations):
        state = np.random.randint(state_size)  # 随机选择一个初始状态
        done = False
        while not done:
            if np.random.uniform() < epsilon:  # 以epsilon的概率随机选择动作
                action = np.random.randint(action_size)
            else:  # 以1-epsilon的概率选择最优动作
                action = np.argmax(q_table[state, :])
            next_state = get_next_state(state, action)  # 根据当前状态和动作得到下一个状态
            reward = get_reward(next_state)  # 根据下一个状态得到奖励值
            update(state, action, next_state, reward)  # 更新Q-table
            state = next_state  # 将下一个状态作为当前状态继续迭代
            if state == get_final_state():  # 到达终止状态,结束迭代
                done = True
    return q_table


# 根据当前状态和动作得到下一个状态和奖励值
def get_next_state(state, action):
    if action == 0:  # 下一步状态为0或1,根据当前状态决定
        return state if state == 0 else 1
    else:  # 下一步状态为1或0,根据当前状态决定
        return state if state == 1 else 0

    # 根据下一个状态得到奖励值,如果到达终止状态则奖励值为1,否则为0


def get_reward(next_state):
    if next_state == get_final_state():
        return 1  # 到达终止状态,奖励值为1
    else:
        return 0  # 没有到达终止状态,奖励值为0


# 返回终止状态的索引值,这里假设终止状态为0或1中的任意一个
def get_final_state():
    return 0 if np.random.randint(2) == 0 else 1  # 以50%的概率返回0,以50%的概率返回1作为终止状态


# 更新Q-table
def update(state, action, next_state, reward):
    old_value = q_table[state, action]
    next_max = np.max(q_table[next_state, :])
    new_value = old_value + learning_rate * (reward + discount_factor * next_max - old_value)
    q_table[state, action] = new_value


# 执行Q-learning算法并打印Q-table的最大值和最小值
q_table = q_learning()
print("Q-table的最大值:", np.max(q_table))
print("Q-table的最小值:", np.min(q_table))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值