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

news2024/9/21 12:26:57

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 True

    for 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 False

    return True

复制

构建DQN神经网络

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

经验缓存区

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

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

class ReplayBuffer:
    def __init__(self, capacity):
        self.capacity = capacity
        self.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 = epsilon

    def 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.coloradmin.cn/o/714359.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【React组件通讯的三种方式】

React组件通讯的三种方式 父组件传递数据给子组件子组件传递数据给父组件 React组件之间的通讯分为三种&#xff1a; 父组件 →子组件子组件 →父组件兄弟组件 父组件传递数据给子组件 步骤&#xff1a; 父组件提供要传递的state数据给子组件标签添加属性&#xff0c;值为st…

Spring Boot 中的分布式配置中心:什么是它,原理及如何使用

Spring Boot 中的分布式配置中心&#xff1a;什么是它&#xff0c;原理及如何使用 在分布式应用程序中&#xff0c;配置管理是一项重要的任务。通常情况下&#xff0c;配置信息被硬编码在应用程序中&#xff0c;这样一来&#xff0c;当应用程序需要相应的配置信息时&#xff0…

$.ajax 怎么进行 json请求

$.ajax请求默认是form表单的格式&#xff0c;这次给到的接口需要的是json的格式&#xff0c;一开始只是将dataType调整为application/json; charsetutf-8&#xff0c;在f12看到的确实是将请求方式改变了&#xff0c;但是参数格式不对劲&#xff0c;应该是个json对象才对 通过查…

PyTorch示例——ResNet34模型和Fruits图像数据

PyTorch示例——ResNet34模型和Fruits图像数据 前言导包数据探索查看数据集构建构建模型 ResNet34模型训练绘制训练曲线 前言 ResNet34模型&#xff0c;做图像分类数据使用水果图片数据集&#xff0c;下载见Kaggle Fruits Dataset (Images)Kaggle的Notebook示例见 PyTorch——…

android_mars老师_蓝牙学习1

实现功能&#xff1a; 查看本机是否有蓝牙功能、扫瞄周边蓝牙获取其地址。 效果展示&#xff1a; 具体流程&#xff1a; AndroidManifest.xml配置蓝牙权限activity_main.xml绘制页面_按钮MainActivity实现&#xff1a;点击事件监听按钮------>创建一个bluetoothAdapter对…

Check Point R81.20 Gaia - 下一代防火墙 (NGFW)

Check Point R81.20 Gaia - 下一代防火墙 (NGFW) Quantum Security Gateway 请访问原文链接&#xff1a;https://sysin.org/blog/check-point-r81/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Quantum Security Gateway a…

执行shell脚本时,提示:第xxx行:[: xxxxxxxxxxxxxxxxxxxxxxxxxxxx:需要一元表达式

定位到 283行看看情况。。。 # ... 此处省略诸多脚本命令isContinue1for item_id in "${ENABLE_BURNER_ARRAY[]}"doif [ $item_id $idd_serial ];then isContinue0continuefidoneif [ $isContinue -eq 0 ];thencontinuefi# ... 此处省略诸多脚本命令# 该行即为 283行…

入侵排查与响应-window和linux版

目录 &#xff08;一&#xff09;关于这方面的一些简单了解 1、我们的电脑为什么会被黑客入侵 2、黑客攻击的方式 &#xff08;二&#xff09;window入侵排查 1、查看异常特征 2、系统账户安全 3、检测异常端口、进程 4、查看启动项、计划任务、服务 5、检查系统相关信…

三、eureka-server端和客户端配置文件讲解

常用配置文件设置 通过这张图理解为什么要进行文件配置 server 中常用的配置 server:port: 8761spring:application:name: eureka-servereureka:client:service-url: #eureka 服务端和客户端的交互地址,集群用,隔开defaultZone: http://localhost:8761/eureka #自己注册自…

中移物联车联网项目,在 TDengine 3.0 的应用

小T导读&#xff1a;在中移物联网的智慧出行场景中&#xff0c;需要存储车联网设备的轨迹点&#xff0c;还要支持对车辆轨迹进行查询。为了更好地进行数据处理&#xff0c;他们在 2021 年上线了 TDengine 2.0 版本的 5 节点 3 副本集群。 3.0 发布后&#xff0c;它的众多特性吸…

C语言入门篇(五)

前言   函数是 C 语言中的重要组成部分&#xff0c;它可以将程序分解为模块&#xff0c;提高代码的可读性和可维护性。   &#x1f352;本篇文章将详细介绍 C 语言中的函数。 函数 1. 函数是什么&#xff1f;2. 函数的分类2.1 库函数2.2 自定义函数 3. 函数的参数3.1 实际参…

select下拉框---无限滚动加载

需求&#xff1a; select的下拉框&#xff0c;后端做了分页&#xff0c;此时前段需要同步加分页 解决思路&#xff1a; 考虑到交互和性能&#xff0c;采用触底请求下一页&#xff08;无限滚动加载&#xff09; 代码示例&#xff1a; import { Select, message } from antd; im…

UE5.1.1 C++从0开始(16.作业5思路分享)

教程的链接&#xff1a;https://www.bilibili.com/video/BV1nU4y1X7iQ 总结一下这次的任务点&#xff1a; 用PlayerState来做一个Credit系统&#xff0c;需要在我们的ui内显示我们的分数更新血药对象&#xff0c;每次使用血药都会扣除相应的分数新增一个金币对象&#xff0c;…

【Python】Sphinx 文档生成器

目录 1. Sphinx 介绍 2. Sphinx 实战 2.1. 初始化 Sphinx 工程 2.2. 编译项目 2.3. Sphinx 主题 2.4. 增加 Sphinx 文档 1. Sphinx 介绍 Sphinx是一个Python文档生成器&#xff0c;它基于reStructuredText标记语言&#xff0c;可自动根据项目生成HTML,PDF等格式的文档。…

使用 OpenCV 进行按位运算和图像屏蔽

在本教程中,我们将了解如何使用按位运算 AND、OR、XOR 和 NOT。 图像处理中使用按位运算从图像中提取感兴趣区域 (ROI)。 正如您所看到的,两个矩形重叠的区域已被删除(黑色),因为在该区域中两个像素都大于 0。 按位非<

浅析代谢组学最常用到的数据分析方法 图形详解pca pls-da opls-da

代谢组学是一门对某一生物或细胞所有低分子质量代谢产物&#xff08;以相对分子质量<1000的有机和无机的代谢物为研究核心区&#xff09;进行分析的新兴学科。生物样本通过NMR、GC-MS、LC-MS等高通量仪器分析检测后&#xff0c;能产生大量的数据&#xff0c;这些数据具有高维…

网页版在线流程图绘制工具Diagram

网页地址&#xff1a;Diagram 可以将流程图保存为图片、网址等多种格式。 界面&#xff1a;

【PortAudio】PortAudio 音频处理库Demo

1. 介绍 PortAudio是一个免费、跨平台、开源的音频I/O库。看到I/O可能就想到了文件&#xff0c;但是PortAudio操作的I/O不是文件&#xff0c;而是音频设备。它能够简化C/C的音频程序的设计实现&#xff0c;能够运行在Windows、Macintosh OS X和UNIX之上&#xff08;Linux的各种…

SAP从入门到放弃系列之生产车间相关单据打印

文章目录概览 一、前言二、系统相关设置2.1、配置:1&#xff1a;2.2、配置点2&#xff1a;2.3、配置点3 三、主数据准备四、测试场景准备五、小结 一、前言 通常在项目实施的时候&#xff0c;如果没有MES&#xff0c;那么生产调度相关岗位下达订单后&#xff08;订单下达感觉没…

K8s部署微服务(springboot+vue)

文章目录 前言一、使用到的K8s资源1.1 Deployment1.2 Service 二、Springboot基础服务部署2.1 网关gateway2.2 鉴权auth2.3 文件file2.4 流程flow2.5 消息message2.6 组织org2.7 系统通用system2.8 用户user2.9 Node 三、Vue前端部署3.1 项目前端nginx3.2 静态资源服务nginx 四…