0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

大象机器人科技 来源: 大象机器人科技 作者: 大象机器人科技 2023-05-29 15:26 次阅读

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的六轴结构使其具有高度的灵活性和精度,能够进行各种复杂的操作和运动。它支持多种编程语言,包括PythonC++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神经网络与预训练的或其他对手进行对弈评估,以评估智能体的性能。直至达到预设的要求。

总结:

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

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

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

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    206

    文章

    27033

    浏览量

    201389
  • 人工智能
    +关注

    关注

    1776

    文章

    43845

    浏览量

    230596
  • 机械臂
    +关注

    关注

    9

    文章

    471

    浏览量

    23821
收藏 人收藏

    评论

    相关推荐

    子棋游戏里如何实现悔棋功能啊

    基于labview的五子棋游戏,有人机对弈和双人对弈模式,双人对弈在不联网的情况下
    发表于 10-10 14:18

    人工智能是什么?

    机器人就是工厂中常见的类似机械,能够代替工人更高效的完成简单且重复率高的流水线上的工作。 说到第二类服务机器人时,先给大家科普一下,当前人工智能大致分为三个阶段:弱人工智能阶段、强
    发表于 09-16 15:40

    开源工业机械开发套件

    `一、产品介绍: 小型码垛工业机器人是由一款桌面级开源迷你机器组成,配合本系统的二
    发表于 10-23 11:26

    labview 上位机 机械

    大家好,我是一个labview的新人,最近我要做一个毕业设计,需要用USB摄像头采集数据,在用labview做一个上位机控制机械手,请问我要怎么实现?
    发表于 04-15 14:10

    "星阵"大胜柯洁 中国人工智能的崛起之路

    ``这场对弈是柯洁时隔11个月,继去年5月0:3不敌&quot;阿尔法围棋&quot;(AlphaGo)之后,柯洁重拾心情,在4月27日,再次公开挑战围棋人工智能
    发表于 04-29 22:05

    【NanoPC-T4试用申请】NanoPC-T4智能机械

    项目名称:NanoPC-T4智能机械试用计划:申请理由本人在AR领域有五年多的学习和开发经验,曾设计过桌面级五加工中心、便携式口袋打印机
    发表于 09-12 16:46

    【瑞芯微RK1808计算棒试用申请】基于机器学习的视觉机械研究与设计

    的视觉控制系统,在五自由度的机械进行建模推导与控制设计实现。项目计划①根据文档,对RK1808人工智能计算棒AI加速器快速入门②通过学习RK1808人工智能计算棒AI加速器,熟悉开发
    发表于 09-23 15:39

    路径规划用到的人工智能技术

    路径规划用到的人工智能技术二 人工智能编程语言/数据结构与算法三 人工智能基础原理 智能信息获取(简称爬虫) 与数据分析1、发起请求3、解
    发表于 07-20 06:53

    怎样去设计一种人机对弈子棋程序

    子棋游戏应达到几方面的要求?怎样去设计一种人机对弈子棋程序?
    发表于 09-29 07:26

    嵌入式人工智能学习路线

    系统项目简介:人工智能工业分拣系统基于AI计算机视觉、AI语音识别+机械控制为一体的机械控制、仓库货物分拣、整理功能,基于TensorF
    发表于 09-16 17:07

    实现人与机器人的直接对弈_强大的对弈系统如何实现

    机器人技术是综合了计算机、控制论、结构学、信息与传感技术、仿生学及人工智能等多学科的一门高新技术。目前的人机对弈软件不直观、缺乏真正的对弈环境,而人机对弈机器人正是针对这些不足而设计的
    发表于 02-12 12:05 4405次阅读

    3个时代,3盘对弈人工智能是否能继续战胜人类?

    从人机对弈这件小事,和你聊聊人工智能的发展。
    的头像 发表于 03-30 10:19 1.1w次阅读

    对弈机器人与图像识别

    对弈机器人是河南省人工智能展览馆的明星展品之一,参与者可以体验到“人机对战”的挑战与乐趣,在往期活动中深受大小学生的欢迎。与对弈机器人的对战简单来说可以分为:图像识别信息获取分析计算控制落子四个阶段,其中图像识别可谓是重中之重,
    的头像 发表于 01-13 11:28 2075次阅读

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

    前言 在上篇文章中,我们探讨了如何创造一个能够进行Connect4的对弈大脑。简单的介绍了几种对弈算法,例如极小化极大算法,Alpha-Beta剪枝算法等,最关键的是目前最流行的神经网络算法和深度
    的头像 发表于 06-16 17:16 482次阅读
    <b class='flag-5'>对弈</b><b class='flag-5'>人工智能</b>!<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b><b class='flag-5'>开源</b>六轴<b class='flag-5'>机械</b>臂<b class='flag-5'>Connect</b> 4 四子棋<b class='flag-5'>对弈</b>下篇

    开源六轴机械myCobot 280末端执行器实用案例解析

    使用。 本文中主要介绍4款常用的机械臂的末端执行器。 Product myCobot 280 M5Stack myCobot 280 系列是
    的头像 发表于 10-16 16:28 554次阅读
    <b class='flag-5'>开源</b>六轴<b class='flag-5'>机械</b>臂<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b>末端执行器实用案例解析