强化学习实践一:Tic-Tac-Toe游戏

2024-06-02 20:58

本文主要是介绍强化学习实践一:Tic-Tac-Toe游戏,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这里给出一个简单的强化学习例子Tic-Tac-Toe。这是一个简单的游戏,在一个3x3的九宫格里,两个人轮流下,直到有个人的棋子满足三个一横一竖或者一斜,赢得比赛游戏结束,或者九宫格填满也没有人赢,则和棋。

这个例子的完整代码在我的github。例子只有一个文件,很简单,代码首先会用两个电脑选手训练模型,然后可以让人和机器对战。当然,由于这个模型很简单,所以只要你不乱走,最后的结果都是和棋,当然想赢电脑也不是不可能的。

我们重点看看这个例子的模型,理解上面第二节的部分。如何训练强化学习模型可以先不管。代码部分大家可以自己去看,只有300多行。

首先看第一个要素环境的状态S。这是一个九宫格,每个格子有三种状态,即没有棋子(取值0),有第一个选手的棋子(取值1),有第二个选手的棋子(取值-1)。那么这个模型的状态一共有3^{9}=19683个。

接着我们看个体的动作A,这里只有9个格子,每次也只能下一步,所以最多只有9个动作选项。实际上由于已经有棋子的格子是不能再下的,所以动作选项会更少。实际可以选择动作的就是那些取值为0的格子。

第三个是环境的奖励R,这个一般是我们自己设计。由于我们的目的是赢棋,所以如果某个动作导致的改变到的状态可以使我们赢棋,结束游戏,那么奖励最高,反之则奖励最低。其余的双方下棋动作都有奖励,但奖励较少。特别的,对于先下的棋手,不会导致结束的动作奖励要比后下的棋手少。

# give reward to two players
def giveReward(self):if self.currentState.winner == self.p1Symbol:self.p1.feedReward(1)self.p2.feedReward(0)elif self.currentState.winner == self.p2Symbol:self.p1.feedReward(0)self.p2.feedReward(1)else:self.p1.feedReward(0.1)self.p2.feedReward(0.5)

第四个是个体的策略(policy)π,这个一般是学习得到的,我们会在每轮以较大的概率选择当前价值最高的动作,同时以较小的概率去探索新动作,在这里AI的策略如下面代码所示。

里面的exploreRate就是我们的第八个要素探索率ϵ。即策略是以1−ϵ的概率选择当前最大价值的动作,以ϵ的概率随机选择新动作。

# determine next action
def takeAction(self):state = self.states[-1]nextStates = []nextPositions = []for i in range(BOARD_ROWS):for j in range(BOARD_COLS):if state.data[i, j] == 0:nextPositions.append([i, j])nextStates.append(state.nextState(i, j, self.symbol).getHash())if np.random.binomial(1, self.exploreRate):np.random.shuffle(nextPositions)# Not sure if truncating is the best way to deal with exploratory step# Maybe it's better to only skip this step rather than forget all the historyself.states = []action = nextPositions[0]action.append(self.symbol)return actionvalues = []for hash, pos in zip(nextStates, nextPositions):values.append((self.estimations[hash], pos))np.random.shuffle(values)values.sort(key=lambda x: x[0], reverse=True)action = values[0][1]action.append(self.symbol)return action

第五个是价值函数,代码里用value表示。价值函数的更新代码里只考虑了当前动作的现有价值和得到的奖励两部分,可以认为我们的第六个模型要素衰减因子γ为0。具体的代码部分如下,价值更新部分的代码加粗。具体为什么会这样更新价值函数我们以后会讲。

# update estimation according to reward
def feedReward(self, reward):if len(self.states) == 0:returnself.states = [state.getHash() for state in self.states]target = rewardfor latestState in reversed(self.states):value = self.estimations[latestState] + self.stepSize * (target-self.estimations[latestState])self.estimations[latestState] = valuetarget = valueself.states = []

第七个是环境的状态转化模型, 这里由于每一个动作后,环境的下一个模型状态是确定的,也就是九宫格的每个格子是否有某个选手的棋子是确定的,因此转化的概率都是1,不存在某个动作后会以一定的概率到某几个新状态,比较简单。

以上就是强化学习的模型基础,从这个例子,相信大家对于强化学习的建模会有一个初步的认识了。

 

本文转自:https://www.cnblogs.com/pinard/p/9385570.html

 

 

这篇关于强化学习实践一:Tic-Tac-Toe游戏的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1025069

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个