强化学习相关
强化学习下两类:有模型和无模型。意思就是字面意思,就是算法里有没有网络模型。
没有模型的强化算法有: 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)
策略迭代也很好理解:
它的基本思想是通过不断地评估和改进策略来找到最优策略。
比如学习打篮球。刚开始,随便投篮,这就是我们的初始策略。然后观察投篮的结果,看看哪些动作能让我们投中篮球,这就是策略评估。接着我们会根据这些观察结果调整我们的投篮动作,比如调整投篮的角度或力度,这就是策略改进。然后我们再次投篮,观察结果,调整动作,如此反复,直到我们找到一个最好的投篮动作,这就是最优策略。
在策略迭代中,策略评估就是在给定策略的情况下,计算每个状态的值函数,也就是预期的总回报。策略改进就是在给定值函数的情况下,选择能使值函数最大的动作作为新的策略。这两个步骤交替进行,直到策略不再改变,此时得到的策略就是最优策略。