关键点1:强化学习它的基本思路
强化学习它的思路基本是想要遍历穷举计算各种状态的价值,然后尽可能的达到高价值的那些状态。那么什么是状态?什么是状态的价值?不同问题的里面含有的“状态”的内容和数量都不一样。下面我举个例子。
比如玩井字棋(三个相同色在一条线就赢)。看下面这张图**,每张图对应的棋子放置的位置就是一个状态**。(在本例子中我们编程的话那就保存一个状态就只需要用一个3×3的数组来保存棋谱即可)。
# 用3×3的二维数组保存状态1,假设棋盘中没落子的地方值为0,黑棋为1,绿棋为2
state1 = [
[0,1,0],
[2,1,0],
[0,0,0]
]
我们让程序各种尝试然后程序经过统计最后发现,包含状态1和状态3的那种下法赢的次数总是比状态2和状态4的多。然后程序得出一个结论状态1和状态3是高价值状态。然后以后每次都尽可能的往这两种状态靠近。(事实上为何状态1和状态3价值高呢?因为井字棋只要占了中心点那就稳赢,而刚好状态1和状态3就占了中心点。虽然算法不知道占了中心的会稳赢,但是它只要知道状态1和状态3是具有很高价值然后那就会尽量让棋谱达到状态1和3,然后就可以表现的像是有智能的样子)
关键点2:如何知道某个状态的价值大小?
在前面提到了强化学习的核心思想在于计算出各种状态的价值,然后尽可能的让当前状态向高价值状态靠拢。那么问题来了我们如何才能达到高价值状态?