强化学习相关

强化学习下两类:有模型和无模型。意思就是字面意思,就是算法里有没有网络模型

 

没有模型的强化算法有: Q-learning,  Sarsa.     (PS: 垃圾中的战斗机,了解就行, 有一个Q表,不停迭代)

有模型的强化算法有: 有太多了,没有必要纠结。 常见的就是DQN家族算法,PPO,A2C, A3C, DDPG, TD3等等

其他文章里叫基于模型, 有一个高大上英文名叫什么model based  啥玩意。 这个玩意听着高大上, 其实就是在算法里嵌入里深度神经网络

 

基于模型分两个派别:值迭代和策略迭代

值迭代很好理解: 

给一个状态,把这个这个状态输入到模型,模型给一个值。  这个值就是状态值, 迭代过程就是训练这个网络模型,更状态值选择目标。 当然根据动作来训练。  状态价值或者动作价值,他们是一种确定性策略, 因为每次选择都是动作集里的最大值

 

import numpy as np

# 定义网格世界的大小和每个状态的奖励
grid_size = (4, 4)
rewards = np.zeros(grid_size)
rewards[-1, -1] = 10  # 终点的奖励为10
print (rewards)
# 定义动作集合和状态转移概率
actions = ['up', 'down', 'left', 'right']
transition_probabilities = {
    'up': lambda x, y: (max(x-1, 0), y),
    'down': lambda x, y: (min(x+1, grid_size[0]-1), y),
    'left': lambda x, y: (x, max(y-1, 0)),
    'right': lambda x, y: (x, min(y+1, grid_size[1]-1)),
}

# 初始化状态值函数和策略
values = np.zeros(grid_size)
policy = np.random.choice(actions, grid_size)

# 定义折扣因子和收敛阈值
gamma = 0.9
theta = 1e-3

while True:
    delta = 0
    for x in range(grid_size[0]):
        for y in range(grid_size[1]):
            old_value = values[x, y]
            new_values = []
            for action in actions:
                next_x, next_y = transition_probabilities[action](x, y)
                new_values.append(rewards[next_x, next_y] + gamma * values[next_x, next_y])
            values[x, y] = max(new_values)
            policy[x, y] = actions[np.argmax(new_values)]
            delta = max(delta, abs(old_value - values[x, y]))
    if delta < theta:
        break

print("最优状态值函数:")
print(values)
print("最优策略:")
print(policy)

 

策略迭代也很好理解:

它的基本思想是通过不断地评估和改进策略来找到最优策略。

比如学习打篮球。刚开始,随便投篮,这就是我们的初始策略。然后观察投篮的结果,看看哪些动作能让我们投中篮球,这就是策略评估。接着我们会根据这些观察结果调整我们的投篮动作,比如调整投篮的角度或力度,这就是策略改进。然后我们再次投篮,观察结果,调整动作,如此反复,直到我们找到一个最好的投篮动作,这就是最优策略。

在策略迭代中,策略评估就是在给定策略的情况下,计算每个状态的值函数,也就是预期的总回报。策略改进就是在给定值函数的情况下,选择能使值函数最大的动作作为新的策略。这两个步骤交替进行,直到策略不再改变,此时得到的策略就是最优策略。

posted @ 2023-11-16 23:58  Please Call me 小强  阅读(6)  评论(0编辑  收藏  举报