0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

對弈人工智能!myCobot 280開源六軸機(jī)械臂Connect 4 四子棋對弈

大象機(jī)器人科技 ? 來源: 大象機(jī)器人科技 ? 作者: 大象機(jī)器人科技 ? 2023-05-29 15:26 ? 次閱讀

Introduction

Hi,guys.今天我們來介紹一下人工智能下棋,我們將用機(jī)械臂來作為對手跟你進(jìn)行下棋。

人工智能下棋的研究可以追溯到20世紀(jì)50年代。當(dāng)時,計算機(jī)科學(xué)家開始探索如何編寫程序,使計算機(jī)能夠下象棋。其中最著名的例子是由IBM研發(fā)的Deep Blue,它在1997年以3.5-2.5的成績擊敗了當(dāng)時的世界象棋冠軍加里·卡斯帕羅夫。

人工智能下棋,就好像給電腦一個思考的方式讓它在比賽中取得勝利。這個思考的方式有很多種,大多數(shù)都源于優(yōu)秀的算法。Deep Blue的核心算法是基于暴力窮舉:生成所有可能的走法,然后執(zhí)行盡可能深的搜索,并不斷對局面進(jìn)行評估,嘗試找出最佳走法。

今天我將要介紹一款AI機(jī)械臂下棋是如何來實現(xiàn)的。

**Connect 4 **

Connect4是今天要介紹的一種策略棋類游戲,也被稱為是四子棋。Connect4的游戲目標(biāo)是在一個垂直放置的6行7列網(wǎng)格中先達(dá)成連續(xù)四個棋子的橫向、縱向或斜向排列。兩名玩家輪流在網(wǎng)格的頂部插入自己的棋子,棋子會落到當(dāng)前列的最底部可用的位置。玩家可以選擇將自己的棋子放置在任意一列,但棋子只能被放置在已有棋子下方的位置。

就如動圖中所示,這就是connect4。

myCobot 280

機(jī)械臂這邊選擇的是myCobot 280 M5Stack,它是一款功能強(qiáng)大的桌面型六軸機(jī)械臂,它采用M5Stack-Basic作為控制核心,支持多種編程語言開發(fā)。Mycobot280的六軸結(jié)構(gòu)使其具有高度的靈活性和精度,能夠進(jìn)行各種復(fù)雜的操作和運(yùn)動。它支持多種編程語言,包括Python、C++Java等,使開發(fā)者能夠根據(jù)自己的需求對機(jī)械臂進(jìn)行編程和控制。它的簡單操作界面和詳細(xì)的用戶手冊使得用戶能夠快速上手,而且其嵌入式設(shè)計使得機(jī)械臂的體積小巧,易于攜帶和存儲。

下面是我們搭建的場景。

用myCobot來作為人工智能來跟我們進(jìn)行下棋。

對弈算法

首先,我們得解決一個最關(guān)鍵的問題,就是應(yīng)該用什么算法來進(jìn)行對弈。換句話說就是給機(jī)械臂提供一個能夠進(jìn)行思考的大腦。我們將為你簡單介紹幾種常見的對弈算法:

極小化極大算法:

這是一種經(jīng)典的博弈算法,適用于兩人對弈的游戲。它通過遞歸地模擬對手和自己的行動,評估每個可能的走法的得分,并選擇具有最優(yōu)得分的行動。極小化極大算法可以通過搜索棋局的樹狀結(jié)構(gòu)來找到最佳的下棋策略。該算法是一個零總和算法,即一方要在可選的選項中選擇將其優(yōu)勢最大化的選擇,另一方則選擇令對手優(yōu)勢最小化的方法。而開始的時候總和為0。簡單舉例井字棋說明一下。

Max代表我們,Min代表對手。這個時候我們需要給每一種結(jié)果一個分?jǐn)?shù),就是這里的Utility。這個分?jǐn)?shù)是站在我們(也就是Max)的角度評估的,比如上圖中我贏了就是+1,輸了是-1,平局時0。所以,我們希望最大化這個分?jǐn)?shù),而對手希望最小化這個分?jǐn)?shù)。(在游戲中,這個分?jǐn)?shù)被稱為static value。)這里要說一下,井字棋是個比較簡單的游戲,所以可以列出所有可能的結(jié)果。但是,大部分游戲是不太可能把所有結(jié)果都列出來的。根據(jù)計算機(jī)運(yùn)算量,我們可能只能往前推7,8步,所以這個時候分?jǐn)?shù)就不只-1,1,0這么簡單了,會有專門的算法來根據(jù)當(dāng)前結(jié)果給不同的分?jǐn)?shù)。

Alpha-Beta剪枝算法:

這是對極小化極大算法的優(yōu)化。它通過剪枝來減少搜索的分支數(shù),從而加快搜索速度。Alpha-Beta剪枝算法利用上下界(Alpha和Beta值)來判斷哪些分支可以被丟棄,從而減少搜索的深度。

神經(jīng)網(wǎng)絡(luò)+深度學(xué)習(xí)

我們設(shè)計的對弈算法connect4中用到的也是神經(jīng)網(wǎng)絡(luò)+深度學(xué)習(xí)來解決對弈的算法。

神經(jīng)網(wǎng)絡(luò):

科學(xué)家一直希望模擬人的大腦,造出可以思考的機(jī)器。人為什么能夠思考?科學(xué)家發(fā)現(xiàn),原因在于人體的神經(jīng)網(wǎng)絡(luò)。神經(jīng)網(wǎng)絡(luò)是一種模擬人腦神經(jīng)系統(tǒng)結(jié)構(gòu)和功能的數(shù)學(xué)模型,通過模擬神經(jīng)元之間的連接和信號傳遞來進(jìn)行信息處理和學(xué)習(xí)。神經(jīng)網(wǎng)絡(luò)是一切人工智能的開始。

神經(jīng)網(wǎng)絡(luò)算法的基本思想是將輸入數(shù)據(jù)傳遞給網(wǎng)絡(luò)的輸入層,然后通過一系列中間層(隱藏層)的計算和傳遞,最終得到輸出層的結(jié)果。訓(xùn)練過程通過調(diào)整連接權(quán)重來最小化實際輸出與期望輸出之間的差異,以優(yōu)化網(wǎng)絡(luò)的性能。

深度學(xué)習(xí):

深度學(xué)習(xí)是一種機(jī)器學(xué)習(xí)的分支,專注于利用深度神經(jīng)網(wǎng)絡(luò)進(jìn)行學(xué)習(xí)和推理。深度學(xué)習(xí)通過構(gòu)建深層次的神經(jīng)網(wǎng)絡(luò),也就是有多個中間層(隱藏層)的神經(jīng)網(wǎng)絡(luò),來解決復(fù)雜的學(xué)習(xí)和決策問題??梢哉f深度學(xué)習(xí)是利用神經(jīng)網(wǎng)絡(luò)作為核心工具的一種學(xué)習(xí)方法。深度學(xué)習(xí)不僅包括了神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和算法,還包括了訓(xùn)練方法、優(yōu)化算法和大規(guī)模數(shù)據(jù)處理等方面的內(nèi)容。

項目的構(gòu)建

項目主要分為,硬件和軟件兩個部分:

該項目中最為重要的就是信息收集和信息分析和處理這一部分內(nèi)容。

前面也提到了神經(jīng)算法和深度學(xué)習(xí)的相關(guān)知識,我們使用到的是DQN神經(jīng)網(wǎng)絡(luò)。

DQN神經(jīng)網(wǎng)絡(luò)

DQN神經(jīng)網(wǎng)絡(luò)是由DeepMind公司提出的,它結(jié)合了深度學(xué)習(xí)和強(qiáng)化學(xué)習(xí)的思想。DQN通過使用深度神經(jīng)網(wǎng)絡(luò)來估計狀態(tài)-動作值函數(shù)(Q函數(shù)),從而實現(xiàn)對復(fù)雜環(huán)境中的最優(yōu)決策DQN的核心思想是使用深度神經(jīng)網(wǎng)絡(luò)作為函數(shù)逼近器來近似狀態(tài)-動作值函數(shù)。通過將當(dāng)前狀態(tài)作為輸入,神經(jīng)網(wǎng)絡(luò)輸出每個動作的對應(yīng)Q值,即預(yù)測該動作在當(dāng)前狀態(tài)下的長期回報。然后,根據(jù)Q值選擇最優(yōu)的動作進(jìn)行執(zhí)行。

環(huán)境搭建

首先我們要定義Connect4這個游戲,用一個二維數(shù)組表示游戲棋盤,兩種顏色的棋子,紅色R,黃色Y。再定義游戲結(jié)束的條件,當(dāng)有四個統(tǒng)一顏色的棋子連成一線就退出游戲。

#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()

復(fù)制

下面是定義游戲是否結(jié)束的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

復(fù)制

構(gòu)建DQN神經(jīng)網(wǎng)絡(luò)

定義神經(jīng)網(wǎng)絡(luò)的輸入層和輸出層,其中輸入層的維度應(yīng)與游戲板的狀態(tài)表示方式相匹配,輸出層的維度應(yīng)與合法動作的數(shù)量相匹配。簡而言之,輸入層接受游戲棋盤的狀態(tài)信息,輸出層產(chǎn)生對應(yīng)的動作選擇。

經(jīng)驗緩存區(qū)

機(jī)器是需要學(xué)習(xí),我們要構(gòu)建一個經(jīng)驗緩存區(qū),來存儲智能體的經(jīng)驗。這可以是一個列表或隊列,用于存儲游戲過程中的狀態(tài)、動作、獎勵和下一個狀態(tài)等信息。

下面是構(gòu)建經(jīng)驗緩存區(qū)的偽代碼:

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

復(fù)制

決策

我們定義了一個名為EpsilonGreedyStrategy的策略類,使用ε-greedy策略進(jìn)行動作選擇和探索。在初始化函數(shù)__init__()中,我們指定了探索率ε。select_action()方法根據(jù)Q值選擇動作,根據(jù)探索率的概率隨機(jī)選擇動作或選擇具有最高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

復(fù)制

訓(xùn)練框架

使用python的PyTorch框架構(gòu)建訓(xùn)練,循環(huán)訓(xùn)練。定期使用當(dāng)前的DQN神經(jīng)網(wǎng)絡(luò)與預(yù)訓(xùn)練的或其他對手進(jìn)行對弈評估,以評估智能體的性能。直至達(dá)到預(yù)設(shè)的要求。

總結(jié):

本篇文章的內(nèi)容暫告一段落。本文主要介紹了DQN神經(jīng)算法是如何在Connect4 當(dāng)中實現(xiàn)的,下一篇文章將介紹機(jī)械臂是如何根據(jù)的出來的最優(yōu)解來執(zhí)行的。文中算法的介紹只是冰山一角,如果你感興趣對弈算法可以自行查閱相關(guān)的書籍去進(jìn)一步了解。

現(xiàn)在我們正處于時代的大變革,人工智能無處不在,不僅僅是在下棋中能夠戰(zhàn)勝頂尖的人們,在各個的領(lǐng)域都有著它們的身影。我們得抓住時代,抓住機(jī)會跟上這個充滿科技的21世紀(jì)。

我們會很快的更新出下一篇文章,如果你感興趣的話歡迎關(guān)注我們,在下方留言就是對我們最好的支持!

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 機(jī)器人
    +關(guān)注

    關(guān)注

    210

    文章

    27859

    瀏覽量

    204720
  • 人工智能
    +關(guān)注

    關(guān)注

    1787

    文章

    46090

    瀏覽量

    235259
  • 機(jī)械臂
    +關(guān)注

    關(guān)注

    12

    文章

    502

    瀏覽量

    24311
收藏 人收藏

    評論

    相關(guān)推薦

    使用myCobot 280 Jeston Nano進(jìn)行物體精確識別追蹤

    ,以便在實際應(yīng)用中發(fā)揮作用,這個項目涉及到許多技術(shù)和算法,包括視覺識別、手眼協(xié)同和機(jī)械控制等方面。 機(jī)械的介紹 mycobot280-J
    的頭像 發(fā)表于 05-24 18:20 ?1465次閱讀
    使用<b class='flag-5'>myCobot</b> <b class='flag-5'>280</b> Jeston Nano進(jìn)行物體精確識別追蹤

    子棋游戲里如何實現(xiàn)悔棋功能啊

    基于labview的五子棋游戲,有人機(jī)對弈和雙人對弈模式,雙人對弈在不聯(lián)網(wǎng)的情況下
    發(fā)表于 10-10 14:18

    怎樣去設(shè)計一種人機(jī)對弈子棋程序

    子棋游戲應(yīng)達(dá)到幾方面的要求?怎樣去設(shè)計一種人機(jī)對弈子棋程序?
    發(fā)表于 09-29 07:26

    基于LabVIEW的五子棋博弈算法

    針對目前五子棋人機(jī)對弈多數(shù)基于電腦、手機(jī),缺少真實環(huán)境的問題,提出一種基于LabVIEW的博弈算法,并運(yùn)用于真實的五子棋人機(jī)對弈。首先通過圖像采集系統(tǒng)獲取當(dāng)前狀態(tài)下棋盤及人機(jī)雙方棋子的
    發(fā)表于 12-17 11:32 ?29次下載

    實現(xiàn)人與機(jī)器人的直接對弈_強(qiáng)大的對弈系統(tǒng)如何實現(xiàn)

    機(jī)器人技術(shù)是綜合了計算機(jī)、控制論、結(jié)構(gòu)學(xué)、信息與傳感技術(shù)、仿生學(xué)及人工智能等多學(xué)科的一門高新技術(shù)。目前的人機(jī)對弈軟件不直觀、缺乏真正的對弈環(huán)境,而人機(jī)對弈機(jī)器人正是針對這些不足而設(shè)計的
    發(fā)表于 02-12 12:05 ?4577次閱讀

    3個時代,3盤對弈,人工智能是否能繼續(xù)戰(zhàn)勝人類?

    從人機(jī)對弈這件小事,和你聊聊人工智能的發(fā)展。
    的頭像 發(fā)表于 03-30 10:19 ?1.2w次閱讀

    對弈機(jī)器人與圖像識別

    對弈機(jī)器人是河南省人工智能展覽館的明星展品之一,參與者可以體驗到“人機(jī)對戰(zhàn)”的挑戰(zhàn)與樂趣,在往期活動中深受大小學(xué)生的歡迎。與對弈機(jī)器人的對戰(zhàn)簡單來說可以分為:圖像識別信息獲取分析計算控制落子
    的頭像 發(fā)表于 01-13 11:28 ?2203次閱讀

    機(jī)械免費(fèi)使用,學(xué)習(xí)ROS、Python火熱報名中

    延續(xù)至今。 今天我們將秉承自由共享的精神,和Arduino社區(qū)發(fā)起“百城萬里公益行”myCobot 280機(jī)械漂流活動。 極客愛好者通過由大象機(jī)器人學(xué)院提供的
    發(fā)表于 03-31 15:28 ?1202次閱讀

    myCobot機(jī)械應(yīng)用于Unity機(jī)器人編程實戰(zhàn)課

    ER myCobot 280 Pi ,采用樹莓派微處理器,內(nèi)置ubuntu18.04系統(tǒng),無需搭配PC主控,鏈接外設(shè),即可快速構(gòu)建機(jī)械 編程教育、
    的頭像 發(fā)表于 06-16 14:33 ?2531次閱讀
    <b class='flag-5'>myCobot</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>應(yīng)用于Unity機(jī)器人編程實戰(zhàn)課

    MyCobot機(jī)械開箱及開發(fā)前的準(zhǔn)備工作(一)

    MyCobot機(jī)械是一款入門級的自由度機(jī)械,目前是國產(chǎn)
    的頭像 發(fā)表于 09-30 10:00 ?1405次閱讀
    <b class='flag-5'>MyCobot</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>開箱及開發(fā)前的準(zhǔn)備工作(一)

    Mycobot機(jī)械各關(guān)節(jié)的運(yùn)動(三)

    這一節(jié)我們開始第一個程序,就是機(jī)械各關(guān)節(jié)的運(yùn)動。讓我們首先打開Mycobot,然后登入一個終端,我們輸入“python”進(jìn)入python環(huán)境。 ? 我們采用一邊實驗一邊介紹MyCobot
    的頭像 發(fā)表于 09-30 18:08 ?1225次閱讀
    <b class='flag-5'>Mycobot</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>各關(guān)節(jié)的運(yùn)動(三)

    對弈人工智能!myCobot 280開源機(jī)械Connect 4 對弈下篇

    前言 在上篇文章中,我們探討了如何創(chuàng)造一個能夠進(jìn)行Connect4對弈大腦。簡單的介紹了幾種對弈算法,例如極小化極大算法,Alpha-Beta剪枝算法等,最關(guān)鍵的是目前最流行的神經(jīng)網(wǎng)絡(luò)算法和深度
    的頭像 發(fā)表于 06-16 17:16 ?714次閱讀
    <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'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>Connect</b> <b class='flag-5'>4</b> <b class='flag-5'>四</b><b class='flag-5'>子</b><b class='flag-5'>棋</b><b class='flag-5'>對弈</b>下篇

    開源機(jī)械myCobot 280末端執(zhí)行器實用案例解析

    使用。 本文中主要介紹4款常用的機(jī)械的末端執(zhí)行器。 Product myCobot 280 M5Stack
    的頭像 發(fā)表于 10-16 16:28 ?1017次閱讀
    <b class='flag-5'>開源</b><b class='flag-5'>六</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>myCobot</b> <b class='flag-5'>280</b>末端執(zhí)行器實用案例解析

    開源獲獎案例】機(jī)械控制系統(tǒng)

    ——來自迪文開發(fā)者論壇本期為大家推送迪文開發(fā)者論壇獲獎開源案例——機(jī)械控制系統(tǒng)。工程師采用T5L
    的頭像 發(fā)表于 12-23 08:13 ?925次閱讀
    【<b class='flag-5'>開源</b>獲獎案例】<b class='flag-5'>四</b><b class='flag-5'>軸</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>控制系統(tǒng)

    大象機(jī)器人開源協(xié)作機(jī)械機(jī)械接入GPT4o大模型!

    本文已經(jīng)或者同濟(jì)豪兄作者授權(quán)對文章進(jìn)行編輯和轉(zhuǎn)載 引言 隨著人工智能和機(jī)器人技術(shù)的快速發(fā)展,機(jī)械在工業(yè)、醫(yī)療和服務(wù)業(yè)等領(lǐng)域的應(yīng)用越來越廣泛。通過結(jié)合大模型和多模態(tài)AI,
    的頭像 發(fā)表于 07-03 14:09 ?559次閱讀
    大象機(jī)器人<b class='flag-5'>開源</b>協(xié)作<b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b><b class='flag-5'>機(jī)械</b><b class='flag-5'>臂</b>接入GPT<b class='flag-5'>4</b>o大模型!