对弈人工智能!myCobot 280开源六轴机械臂Connect 4 四子棋对弈

Connect 4 myCobot280

Introduction

Hi,guys.今天我们来介绍一下人工智能下棋,我们将用机械臂来作为对手跟你进行下棋。

人工智能下棋的研究可以追溯到20世纪50年代。当时,计算机科学家开始探索如何编写程序,使计算机能够下象棋。其中最著名的例子是由IBM研发的Deep Blue,它在1997年以3.5-2.5的成绩击败了当时的世界象棋冠军加里·卡斯帕罗夫。

人工智能下棋,就好像给电脑一个思考的方式让它在比赛中取得胜利。这个思考的方式有很多种,大多数都源于优秀的算法。Deep Blue的核心算法是基于暴力穷举:生成所有可能的走法,然后执行尽可能深的搜索,并不断对局面进行评估,尝试找出最佳走法。

今天我将要介绍一款AI机械臂下棋是如何来实现的。

Connect 4

Connect4是今天要介绍的一种策略棋类游戏,也被称为是四子棋。Connect4的游戏目标是在一个垂直放置的6行7列网格中先达成连续四个棋子的横向、纵向或斜向排列。两名玩家轮流在网格的顶部插入自己的棋子,棋子会落到当前列的最底部可用的位置。玩家可以选择将自己的棋子放置在任意一列,但棋子只能被放置在已有棋子下方的位置。

就如动图中所示,这就是connect4。

myCobot 280

机械臂这边选择的是myCobot 280 M5Stack,它是一款功能强大的桌面型六轴机械臂,它采用M5Stack-Basic作为控制核心,支持多种编程语言开发。Mycobot280的六轴结构使其具有高度的灵活性和精度,能够进行各种复杂的操作和运动。它支持多种编程语言,包括Python、C++、Java等,使开发者能够根据自己的需求对机械臂进行编程和控制。它的简单操作界面和详细的用户手册使得用户能够快速上手,而且其嵌入式设计使得机械臂的体积小巧,易于携带和存储。

下面是我们搭建的场景。

用myCobot来作为人工智能来跟我们进行下棋。

对弈算法

首先,我们得解决一个最关键的问题,就是应该用什么算法来进行对弈。换句话说就是给机械臂提供一个能够进行思考的大脑。我们将为你简单介绍几种常见的对弈算法:

极小化极大算法:

这是一种经典的博弈算法,适用于两人对弈的游戏。它通过递归地模拟对手和自己的行动,评估每个可能的走法的得分,并选择具有最优得分的行动。极小化极大算法可以通过搜索棋局的树状结构来找到最佳的下棋策略。该算法是一个零总和算法,即一方要在可选的选项中选择将其优势最大化的选择,另一方则选择令对手优势最小化的方法。而开始的时候总和为0。简单举例井字棋说明一下。

Max代表我们,Min代表对手。这个时候我们需要给每一种结果一个分数,就是这里的Utility。这个分数是站在我们(也就是Max)的角度评估的,比如上图中我赢了就是+1,输了是-1,平局时0。所以,我们希望最大化这个分数,而对手希望最小化这个分数。(在游戏中,这个分数被称为static value。)这里要说一下,井字棋是个比较简单的游戏,所以可以列出所有可能的结果。但是,大部分游戏是不太可能把所有结果都列出来的。根据计算机运算量,我们可能只能往前推7,8步,所以这个时候分数就不只-1,1,0这么简单了,会有专门的算法来根据当前结果给不同的分数。

Alpha-Beta剪枝算法:

这是对极小化极大算法的优化。它通过剪枝来减少搜索的分支数,从而加快搜索速度。Alpha-Beta剪枝算法利用上下界(Alpha和Beta值)来判断哪些分支可以被丢弃,从而减少搜索的深度。

神经网络+深度学习:

我们设计的对弈算法connect4中用到的也是神经网络+深度学习来解决对弈的算法。

神经网络:

科学家一直希望模拟人的大脑,造出可以思考的机器。人为什么能够思考?科学家发现,原因在于人体的神经网络。神经网络是一种模拟人脑神经系统结构和功能的数学模型,通过模拟神经元之间的连接和信号传递来进行信息处理和学习。神经网络是一切人工智能的开始。

神经网络算法的基本思想是将输入数据传递给网络的输入层,然后通过一系列中间层(隐藏层)的计算和传递,最终得到输出层的结果。训练过程通过调整连接权重来最小化实际输出与期望输出之间的差异,以优化网络的性能。

深度学习:

深度学习是一种机器学习的分支,专注于利用深度神经网络进行学习和推理。深度学习通过构建深层次的神经网络,也就是有多个中间层(隐藏层)的神经网络,来解决复杂的学习和决策问题。可以说深度学习是利用神经网络作为核心工具的一种学习方法。深度学习不仅包括了神经网络的结构和算法,还包括了训练方法、优化算法和大规模数据处理等方面的内容。

项目的构建

项目主要分为,硬件和软件两个部分:

该项目中最为重要的就是信息收集和信息分析和处理这一部分内容。

前面也提到了神经算法和深度学习的相关知识,我们使用到的是DQN神经网络。

DQN神经网络

DQN神经网络是由DeepMind公司提出的,它结合了深度学习和强化学习的思想。DQN通过使用深度神经网络来估计状态-动作值函数(Q函数),从而实现对复杂环境中的最优决策DQN的核心思想是使用深度神经网络作为函数逼近器来近似状态-动作值函数。通过将当前状态作为输入,神经网络输出每个动作的对应Q值,即预测该动作在当前状态下的长期回报。然后,根据Q值选择最优的动作进行执行。

环境搭建

首先我们要定义Connect4这个游戏,用一个二维数组表示游戏棋盘,两种颜色的棋子,红色R,黄色Y。再定义游戏结束的条件,当有四个统一颜色的棋子连成一线就退出游戏。

#Define a 6*7 chessboard
self.bgr_data_grid = [[None for j in range(6)] for i in range(7)]#Used to display the state of the board
def debug_display_chess_console(self):for y in range(6):for x in range(7):cell = self.stable_grid[x][y]if cell == Board.P_RED:print(Board.DISPLAY_R, end="")elif cell == Board.P_YELLOW:print(Board.DISPLAY_Y, end="")else:print(Board.DISPLAY_EMPTY, end="")print()print()

复制

下面是定义游戏是否结束的code:

def is_game_over(board):# Check if there are four consecutive identical pieces in a row.for row in board:for col in range(len(row) - 3):if row[col] != 0 and row[col] == row[col+1] == row[col+2] == row[col+3]:return True# Check if there are four consecutive identical pieces in a column.for col in range(len(board[0])):for row in range(len(board) - 3):if board[row][col] != 0 and board[row][col] == board[row+1][col] == board[row+2][col] == board[row+3][col]:return True# Examine if there are four consecutive identical pieces in a diagonal line.for row in range(len(board) - 3):for col in range(len(board[0]) - 3):if board[row][col] != 0 and board[row][col] == board[row+1][col+1] == board[row+2][col+2] == board[row+3][col+3]:return Truefor row in range(len(board) - 3):for col in range(3, len(board[0])):if board[row][col] != 0 and board[row][col] == board[row+1][col-1] == board[row+2][col-2] == board[row+3][col-3]:return True# Verify if the game board is filled completely.for row in board:if 0 in row:return Falsereturn True

复制

构建DQN神经网络

定义神经网络的输入层和输出层,其中输入层的维度应与游戏板的状态表示方式相匹配,输出层的维度应与合法动作的数量相匹配。简而言之,输入层接受游戏棋盘的状态信息,输出层产生对应的动作选择。

经验缓存区

机器是需要学习,我们要构建一个经验缓存区,来存储智能体的经验。这可以是一个列表或队列,用于存储游戏过程中的状态、动作、奖励和下一个状态等信息。

下面是构建经验缓存区的伪代码:

class ReplayBuffer:def __init__(self, capacity):self.capacity = capacityself.buffer = []def add_experience(self, experience):if len(self.buffer) >= self.capacity:self.buffer.pop(0)self.buffer.append(experience)def sample_batch(self, batch_size):batch = random.sample(self.buffer, batch_size)states, actions, rewards, next_states, dones = zip(*batch)return states, actions, rewards, next_states, dones

复制

决策

我们定义了一个名为EpsilonGreedyStrategy的策略类,使用ε-greedy策略进行动作选择和探索。在初始化函数__init__()中,我们指定了探索率ε。select_action()方法根据Q值选择动作,根据探索率的概率随机选择动作或选择具有最高Q值的动作。

class EpsilonGreedyStrategy:def __init__(self, epsilon):self.epsilon = epsilondef select_action(self, q_values):if random.random() < self.epsilon:action = random.randint(0, len(q_values) - 1)else:action = max(enumerate(q_values), key=lambda x: x[1])[0]return action

复制

训练框架

使用python的PyTorch框架构建训练,循环训练。定期使用当前的DQN神经网络与预训练的或其他对手进行对弈评估,以评估智能体的性能。直至达到预设的要求。

link:https://twitter.com/i/status/1651528699945291776

总结:

本篇文章的内容暂告一段落。本文主要介绍了DQN神经算法是如何在Connect4 当中实现的,下一篇文章将介绍机械臂是如何根据的出来的最优解来执行的。文中算法的介绍只是冰山一角,如果你感兴趣对弈算法可以自行查阅相关的书籍去进一步了解。

现在我们正处于时代的大变革,人工智能无处不在,不仅仅是在下棋中能够战胜顶尖的人们,在各个的领域都有着它们的身影。我们得抓住时代,抓住机会跟上这个充满科技的21世纪。

我们会很快的更新出下一篇文章,如果你感兴趣的话欢迎关注我们,在下方留言就是对我们最好的支持!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/8154.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 解决root用户被限制连接服务器

Linux 解决root用户被限制连接服务器 1. 问题描述2. 解决问题2.1 方式一&#xff08;忘记root密码的情况&#xff09;2.2 方式二&#xff08;知道root密码的情况&#xff09; 3. 其他 1. 问题描述 使用 root 用户不能链接服务器&#xff0c;密码对&#xff0c;就是连接不上&am…

VBA之正则表达式(42)-- 快速提取名称

实例需求&#xff1a;A列为待处理数据&#xff0c;现需要从中提取商品名、通用名、胰岛素笔相关信息&#xff0c;保存到B列至D列&#xff0c;需要注意如下几点&#xff1a; 胰岛素笔&#xff08;E列&#xff09;数据只存在于每组产品的第一行记录中&#xff0c;例如第2行数据中…

Apikit 自学日记:保存、使用测试用例

API测试用例是SaaS版本企业版才能使用的功能&#xff0c;免费版用户可通过付费升级后使用。 API管理应用中的测试用例管理涉及到两个场景&#xff1a;单接口测试用例管理 和 多接口测试用例批量测试。 一、单接口测试用例管理 功能入口&#xff1a;API管理应用 / 选中某个项目…

vscode copilot长时间没反应

检测问题 首先看一下OUPUT插件信息有什么异常 如果没有异常&#xff0c;但是也没输出 那是请求没有相应的原因 可以在vscode里设置一下代理 参考&#xff1a;https://github.com/orgs/community/discussions/29127

ArcPy学习心得系列(5)遥感数据中值滤波与均值滤波实现方法(不计入NoDATA)

在数据处理与应用的过程中,我们难免会遇到一些低质量的遥感数据,低质量遥感数据一般是由于天气因素导致的,在云量较多时,卫星传感器所采集到的地面信息被云层所遮挡,导致遥感图像成像过程中产生了较多噪声,对遥感数据的精确度造成了一定影响,如果不解决这些数据中的噪声…

【UE5 Cesium】05-Cesium for Unreal 在子关卡中添加Actor

上一篇&#xff1a;【UE5 Cesium】04-Cesium for Unreal 将不同地区的倾斜摄影作为不同子关卡 步骤 首先将关卡切换到“DenverRooftop” 添加一个“立方体” 将关卡切换到“Globe” 然后再向场景中添加一个“椎体” 此时如果我们将关卡切换到“Boston”&#xff0c;只能看到“…

我的毕业故事

前言 2023年6月25日&#xff0c;在拿到双证(毕业证书/学士学位证书)之后&#xff0c;我正式毕业&#xff0c;结束了本科学习阶段。 由于毕业设计中了盲审&#xff0c;因此在大致顺利的过程中平添了不少故事&#xff0c;这里就对近两个月做一个回顾。 盲审 首先解释一下什么…

c++高性能264/265实时h5流媒体服务器前后端整体解决方案

c高性能264/265实时h5流媒体服务器前后端整体解决方案 1.效果展示 下图展示了前端播放效果。 播放1路264视频流&#xff0c;4路265视频流 CPU占用率10%(测试机器上运行着c服务端和其他工具程序) GPU0占用率17% 1.1 作者测试机器配置 处理器 11th Gen Intel Core™ i7-118…

AI 语音 - 人物音色训练

前情提要 2023-07-02 周日 杭州 阴晴不定 AI 入门三大项&#xff0c;AI 绘画基础学习&#xff0c;AI 语音合成&#xff0c;AI 智能对话训练&#xff0c;进入 AI 语音合成阶段了&#xff0c;搓搓小手很激动的&#xff0c;对于一个五音不全的我来说&#xff0c;这个简直了(摆脱…

Spring容器获取Bean的9种方式 | 京东云技术团队

1 前言 随着SpringBoot的普及&#xff0c;Spring的使用也越来越广&#xff0c;在某些场景下&#xff0c;我们无法通过注解或配置的形式直接获取到某个Bean。比如&#xff0c;在某一些工具类、设计模式实现中需要使用到Spring容器管理的Bean&#xff0c;此时就需要直接获取到对…

4.设计模式之后七种模式后11种模式命令访问者迭代器发布订阅中介者忘备录解释器状态策略职责链和空模式

1.命令(command)模式 不知道命令接收者(对象)是谁,支持撤销 (接受者 间接调用执行 的具体行为) 命令调用者和接收者解耦 //只要实现命令接口即可 (就是客户端给个命令,然后命令类传给接收类执行) 优点和缺点 容易撤销操作 命令队列可以多线程操作 增加过多的命令类 空命令也是一…

Devops之制品库平台实践-nexus

Devops之制品库平台实践-nexus 目录 本节实践 实战名称&#x1f498; 实践&#xff1a;配置Maven代理仓库(测试成功)-2022.6.7&#x1f498; 实践&#xff1a;创建Maven本地仓库&#xff08;依赖&#xff09;-2022.6.10(测试成功)&#x1f498; 实践&#xff1a;创建Raw本地仓…