国际象棋和大模型的内部世界 (2)

news2024/11/25 16:19:30

国际象棋和大模型的内部世界 (2)

最近一直在做大模型的一些实践和应用工作。最近看了一些agent的一些在大模型上的探索,包括基于大模型驱动的类似MUD类的游戏。
最近2篇论文都是基于国际象棋的,作者的思路基本上差不多,采用比较小的模型,通过chess的PGN棋谱,训练后模型可以达到专业级的国际象棋水准。
这个非常有趣,LLM模型不仅可以训练一般的语料,还可以把符号化的类似棋谱一样记录决策的过程当做训练数据,从而实现LLM具备在此领域具备决策能力,
未来可以把很多决策类的行为符号化,训练LLM,使得具备决策能力,这个方向也很不错哦。

下一步的思路是:

  • 了解一下国际象棋(比较尴尬,我以前一点都不了解)
  • 通过大模型实现PGN棋谱的理解和决策
  • 编写代码,通过写一个agent(智能体),以大模型为驱动,实现国际象棋的对弈。

后续,找一个类似nanoGPT的模型,自己训练一下PGN棋谱,让自己的LLM模型具备PGN棋谱的理解和决策能力。

本文将使用大模型比如:openai的chatgpt,文心一言,智谱AI的GLM进行国际象棋的棋谱的测试:

  • 棋谱的理解
  • 下一步决策

01.建一个开局棋谱

import chess
import chess.pgn 
# 创建一个新的棋局对象
board = chess.Board()

# 执行一些棋子移动
board.push_san("e2e4")
board.push_san("e7e5")
board.push_san("g1f3")
board.push_san("b8c6")

# 打印棋盘的当前状态
print(board)
r . b q k b n r
p p p p . p p p
. . n . . . . .
. . . . p . . .
. . . . P . . .
. . . . . N . .
P P P P . P P P
R N B Q K B . R

02.大模型对棋谱的理解能力

首先我们构建一个简单的prompt,看一下大模型对当前棋谱的理解能力。

这是一个国际象棋棋谱:
r . b q k b n r
p p p p . p p p
. . n . . . . .
. . . . p . . .
. . . . P . . .
. . . . . N . .
P P P P . P P P
R N B Q K B . R

解释一下当前棋谱。
文心一言大模型

这个国际象棋棋谱描述了游戏开始时的棋子位置,以及白方已经走出的第一步棋。下面是对这个棋谱的详细解释:

  • r . b q k b n r:这是描述黑方棋子的行。从左到右,它表示黑方有一个车(r)在最左边,然后是一个空位,接着是象(b)、皇后(q)、国王(k)、象(b)、马(n)和另一个车(r)在最右边。这是国际象棋标准开局时黑方棋子的初始位置。

  • p p p p . p p p:这是描述黑方棋盘的第二行,也就是兵的位置。从左到右,黑方有8个兵(p),分别占据棋盘的第二行。注意,这里的点(.)表示该位置没有棋子。

  • 接下来的几行描述的是白方的棋子位置,但在这个棋谱里,白方的棋子位置并未发生改变,所以它们仍处于初始位置。然而,在实际的国际象棋记录中,通常不会重复写出未发生变动的白方棋子位置,这里可能是为了完整性而写出的。

  • . . n . . . . .:这通常应该是描述白方棋盘的第二行,但在这个棋谱中看起来有些不标准。在标准的初始位置中,这里应该是白方的兵(P),像这样:P P P P P P P P。不过,由于这个棋谱可能只关注于已经移动的棋子,所以未移动的棋子就没有写出来。但这里的表示方法并不常见,容易造成混淆。更常见的表示方法是在棋谱的开头给出完整的初始位置,然后只记录发生移动的棋子。

  • e2e4:这是白方已经走出的第一步棋,表示白方的e2位置的兵(实际上应该是P,代表Pawn,即兵)向前移动到了e4位置。这一步棋是国际象棋开局中非常常见的一步,旨在控制中心并为后续的棋子开发打开道路。

然而,棋谱中关于白方第二行的表示方法(. . n . . . . .)是不规范的。在正常的棋谱记录中,我们不会看到这样的表示。正确的表示应该是白方的初始兵位置(P P P P P P P P),然后跟随棋子的移动记录。如果这里想要表示的是黑方的某个马(N)已经移动了,那么它应该出现在棋谱的移动记录部分,并且需要指明是从哪个位置移动到了哪个位置。但在你提供的棋谱中,并没有这样的记录。

总结一下,这个棋谱似乎有些混淆和不规范。它正确地描述了黑方的初始位置和白方的第一步棋(e2e4),但在表示白方棋子位置时存在错误或不清晰的地方。在实际的国际象棋比赛中,棋谱通常会更加准确和清晰地记录每一步棋的移动。

chatgpt

这是一个标准的国际象棋棋盘,每个棋子都用一个字母表示,其中小写字母代表黑色棋子,大写字母代表白色棋子。每个字母的含义如下:

  • r: 车 (Rook)
  • n: 马 (Knight)
  • b: 象 (Bishop)
  • q: 女王 (Queen)
  • k: 国王 (King)
  • p: 兵 (Pawn)

棋盘的排列是从白色方的视角描述的,所以白色方在底部,黑色方在顶部。每一行表示一个水平排列,而每个字符代表相应位置的棋子。

现在解释每个棋子的位置:

白色方(大写字母):

  1. 白色车 (Rook) 位于 a1 和 h1。
  2. 白色马 (Knight) 位于 b1 和 g1。
  3. 白色象 (Bishop) 位于 c1 和 f1。
  4. 白色女王 (Queen) 位于 d1。
  5. 白色国王 (King) 位于 e1。
  6. 白色兵 (Pawn) 从 a2 到 h2。

黑色方(小写字母):

  1. 黑色车 (Rook) 位于 a8 和 h8。
  2. 黑色马 (Knight) 位于 b8 和 g8。
  3. 黑色象 (Bishop) 位于 c8 和 f8。
  4. 黑色女王 (Queen) 位于 d8。
  5. 黑色国王 (King) 位于 e8。
  6. 黑色兵 (Pawn) 从 a7 到 h7。

注意到棋盘中有一些位置没有棋子,用"."表示。这是一个初始局面,每个玩家都有16个棋子,按照规则,游戏将从这个状态开始。

智谱AI GLM4

当前棋谱显示的是国际象棋的棋盘布局。棋盘由8x8的方格组成,每一行代表棋盘上的一行,从白方的视角来看,最下面一行是第1行,最上面一行是第8行。每一列用字母a到h表示,也是从白方的视角来标识。
棋谱中用不同的字母来代表不同的棋子:

  • "R" 代表车(Rook)
  • "N" 代表马(Knight)
  • "B" 代表象(Bishop)
  • "Q" 代表后(Queen)
  • "K" 代表王(King)
  • "P" 代表兵(Pawn)
    小写的字母代表黑方的棋子,大写的字母代表白方的棋子。点(.)代表该位置上没有棋子。
    根据您提供的棋谱,我们可以看到:
  • 黑方(从第8行到第1行)的布局是:车、马、象、后、王、象、马、车,其中第7列(g列)上应该有一个马,但现在缺失了。
  • 黑方有8个兵,分别在第7行和第6行。
  • 第5行全部为空。
  • 第4行只有一个白方的兵(Pawn),位于第5列(e列)。
  • 第3行全部为空。
  • 第2行只有一个黑方的马(Knight),位于第6列(f列)。
  • 白方(从第1行到第8行)的布局是:车、马、象、后、王、象、兵、车,其中第2列(b列)上应该有一个兵,但现在缺失了。
  • 白方有8个兵,分别在第2行和第3行。
    这个棋谱可能是在某个棋局进行中或刚开局不久的状态,因为双方都还没有进行太多的移动,且兵的布局符合国际象棋的开局规则。棋谱中缺失的棋子可能是已经被吃掉或者在棋谱记录时被省略了。

针对三个模型的输出,因为我也不懂国际象棋,感觉说的都有道理,只是文心一言的那个貌似对n的解释不对。

03.大模型对棋谱的决策能力

首先我们构建一个简单的prompt,看一下大模型对当前棋谱的理解能力。

这是一个国际象棋棋谱:
r . b q k b n r
p p p p . p p p
. . n . . . . .
. . . . p . . .
. . . . P . . .
. . . . . N . .
P P P P . P P P
R N B Q K B . R

你作为一个国际象棋大师,最为白方,采用控制中心策略,你决定如何走下一步?
文心一言大模型

作为一个国际象棋大师,采用控制中心策略时,我会仔细分析局面并做出最有利于控制中心的走法。在当前局面下,我的下一步走法建议是:

d2d4(兵到d4)

这步棋的目的是打开中心,挑战黑方的d7d5位置,并为后续的中心控制奠定基础。d4兵不仅能够直接攻击黑方的中心兵,还能够为白方的后续棋子(如象、后等)提供更好的斜线通道。

如果黑方选择d7d6来巩固中心,白方仍然可以通过后续的c2c4来加强中心的控制,并考虑进一步的棋子开发。如果黑方走d7d5来对抗d4兵,白方可以根据情况选择e4d5来占领中心,或者通过其他方式来维持中心的紧张状态。

此外,走了d4之后,白方还可以根据黑方的回应来调整策略,比如如果黑方没有立即走d5来对抗,白方可以考虑走c4来进一步控制中心,或者发展其他的棋子。

总之,d2d4是一步旨在打开中心并加强控制的走法,符合控制中心策略的原则。然而,需要注意的是,国际象棋中的每一步棋都应该根据当前的具体局面和对手的可能回应来做出决策,因此在实际游戏中还需要结合具体情况进行灵活变通。

chatgpt

在控制中心策略中,通常的目标是占领或控制棋盘中心的方块,这有助于增加棋子的活动性和对整个棋盘的掌控。在当前局面中,白方可以通过移动兵(Pawn)来加强对中心的控制。

因此,一个合理的下一步是向中心移动兵,具体来说,白方可以走 d4(d2-d4)。这一步会打开白方女王(Queen)和白方象(Bishop)的路线,同时增加对棋盘中心的掌控。这样的走法有助于建立更强大的棋盘地势,并为白方的其他棋子提供更多的活动空间。

智谱AI GLM4

作为白方,采用控制中心策略,我的首要目标将是控制棋盘的中心,同时确保王的安全,并寻找机会攻击黑方的王。
在这个局面中,白方的王已经 castle 了王翼,而黑方的王还没有移动。白方有一个兵在中心位置(e4),而黑方在中心没有兵。白方的马在 c3,控制了中心的一些关键格,而黑方的马在 f6,对白方的中心兵构成了威胁。
考虑到这些因素,我会考虑以下几个步骤:

  1. 移动马:将马从 c3 移动到 e5,控制更多的中心格,并威胁黑方的中心兵。这可以防止黑方在中心形成压力,并为白方的其他棋子提供支持。
  2. 发展其他棋子:我会考虑移动 f2 的象到 b4 或 c4,这样可以控制更多中心格,并为未来的攻击做准备。
  3. 保护中心兵:如果黑方移动马到 e4,我会考虑用兵 d2 去保护 e4 的兵,或者用马 e5 去吃掉黑方的马。
  4. 寻找攻击机会:我会寻找机会攻击黑方的王,可能通过 d5 或 f5 的兵前进,或者通过 b1 的象和 a1 的车进行长距离攻击。
    具体的走法取决于黑方的回应,但控制中心并寻找攻击机会是白方的关键策略。记住,国际象棋是一个动态的游戏,每一步棋都需要根据对手的回应来调整策略。

三个模型中,文心一言和chatglm采用了d4,而GLM4选择c3e5,三个模型都给出了下一步策略,我因为不懂国际象棋也不好评测策略的优劣。

04.结论

总之,经过测试,大模型具备了理解国际象棋棋谱的能力和针对下一步走棋的决策能力,如果把大模型作为引擎,实现对弈貌似是一件比较简单的事情了



喜欢的朋友记得点赞、收藏、关注哦!!!

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

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

相关文章

SQL第12课——联结表

三点:什么是联结?为什么使用联结?如何编写使用联结的select语句 12.1 联结 SQL最强大的功能之一就是能在数据查询的执行中联结(join)表。联结是利用SQL的select能执行的最重要的操作。 在使用联结前,需要了解关系表…

Vue组件库Element-ui

Vue组件库Element-ui Element是一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库。Element - 网站快速成型工具 安装element-ui npm install element-ui # element-ui版本(可以指定版本号引入ElementUI组件库,在main.js中添加内容得到&…

【动态规划-最长公共子序列(LCS)】力扣1035. 不相交的线

在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在,可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线,这些直线需要同时满足: nums1[i] nums2[j] 且绘制的直线不与任何其他连线(非水平线&#xff09…

graphql--快速了解graphql特点

graphql--快速了解graphql特点 1.它的作用2.demo示例2.1依赖引入2.2定义schema2.3定义GrapQL端点2.4运行测试2.5一些坑 今天浏览博客时看到graphQL,之前在招聘网站上第一次接触,以为是图数据查询语言, 简单了解后,发现对graphQL的介绍主要是用作API的查询语言,不仅限于图数据查…

dbeaver的使用

新增mysql连接 新增clickhouse 连接 新建编辑器 执行 结果,想看某条结果明细,选中某行安tab键 设置快捷键 窗口-》首选项-》用户界面-》键

ReentrantLock 实现原理

文章目录 ReentrantLock 基本使用可重入锁等待可中断设置超时时间公平锁条件变量 ReentrantLock 原理加锁流程解锁流程可重入锁原理可打断原理公平锁原理条件变量原理 ReentrantLock 基本使用 在Java中,synchronized 和 ReentrantLock 都是用于确保线程同步的锁&am…

JUPITER Benchmark Suite:是一套全面的23个基准测试程序,目的支持JUPITER——欧洲首台E级超级计算机的采购

2024-08-30,由于利希超级计算中心 创建JUPITER Benchmark Suite,这是一个全面的 23 个基准测试程序集合,经过精心记录和设计,目的支持购买欧洲第一台百万兆次级超级计算机 JUPITER。 一、研究背景: 随着E级超级计算机…

AI大模型有哪些,收藏起来防踩坑

大模型是指具有数千万甚至数亿参数的深度学习模型,通常由深度神经网络构建而成,拥有数十亿甚至数千亿个参数。大模型的设计目的是为了提高模型的表达能力和预测性能,能够处理更加复杂的任务和数据。以下是对大模型的详细数据与分析&#xff1…

在网页中渲染LaTex公式

概述 MathJax可以实现网页浏览器中的LaTex公式渲染。 引入 可以使用特定的模板形式引入和配置&#xff0c;具体可参考&#xff1a;配置mathjax — MathJax 3.2 文档 (osgeo.cn)。其中代码可以以CDN形式引入&#xff1a;mathjax (v3.2.2) -BootCDN。 <script> MathJax …

【C++驾轻就熟】vector深入了解及模拟实现

​ 目录 ​编辑​ 一、vector介绍 二、标准库中的vector 2.1vector常见的构造函数 2.1.1无参构造函数 2.1.2 有参构造函数&#xff08;构造并初始化n个val&#xff09; 2.1.3有参构造函数&#xff08;使用迭代器进行初始化构造&#xff09; 2.2 vector iterator 的使…

集全CNS!西北农林发表建校以来第一篇Nature

9月25日&#xff0c;国际学术期刊《自然》&#xff08;Nature&#xff09;在线发表了西北农林科技大学青年科学家岳超研究员领衔的团队题为《极端森林大火放大火后地表升温》的研究成果。该研究首次从林火规模这一独特视角&#xff0c;揭示了极端大火对生态系统破坏性、林火碳排…

受电端取电快充协议芯片的工作原理

随着电池技术的不断进步&#xff0c;快充技术应运而生&#xff0c;它以惊人的速度解决了“电量焦虑”成为手机技术发展的重要程碑。 快充技术&#xff0c;通过提高充电功率&#xff0c;大幅度缩短手机等设备充电时间的技术。相对于传统的慢充方式&#xff0c;快充技术能够在短…

ASP.NET MVC 下拉框的传值-foreach循环

数据表&#xff1a; -- 创建包裹分类表 CREATE TABLE PackageCategories (CategoryID INT PRIMARY KEY IDENTITY(1,1), -- 分类ID&#xff1a;整数类型&#xff0c;主键&#xff0c;自增&#xff0c;包裹分类的唯一标识CategoryName NVARCHAR(255) NOT NULL -- 包裹分类名称&a…

从零开始讲PCIe(11)——数据链路层介绍

一、概述 数据链路层这一层的逻辑是用来负责链路管理的&#xff0c;它主要表现为 3 个功能TLP 错误纠正、流量控制以及一些链路电源管理。它是通过如图 2-24 所示的DLLP&#xff08;Data Link Layer Packet&#xff09;来完成这些功能的。 二、DLLPs 数据链路层包&#xff08;D…

基于Springboot+Vue的在线问诊系统的设计与实现(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

PDFToMarkdown

pdf转markdown 安装Tesseract-OCR项目拉取pytorch安装开始转换转换单个文件转换多个文件总结github开源PDF转markdown git clone https://github.com/VikParuchuri/marker.git 注意该项目有些包的语法需要python3.10,所以需要安装python3.10. 导入pycharm,下面选择取消 安…

Git分支-团队协作以及GitHub操作

Git分支操作 在版本控制过程中&#xff0c;同时推进多个任务> 程序员开发与开发主线并行&#xff0c;互不影响 分支底层也是指针的引用 hot-fix:相当于若在进行分支合并后程序出现了bug和卡顿等现象&#xff0c;通过热补丁来进行程序的更新&#xff0c;确保程序正常运行 常…

【Conda】Conda命令详解:高效更新与环境管理指南

目录 1. Conda 更新命令1.1 更新 Conda 核心1.2 更新所有包 2. 严格频道优先级3. 强制安装特定版本4. 创建与管理环境4.1 创建新环境4.2 激活和停用环境4.3 导出和导入环境4.4 删除环境 5. 清理缓存总结 Conda 是一个强大的包管理和环境管理工具&#xff0c;广泛应用于数据科学…

Linux中环境变量

基本概念 环境变量Environmental variables一般是指在操作系统中用来指定操作系统运行环境一些参数。 我们在编写C、C代码时候&#xff0c;在链接的时候从来不知道我们所链接的动态、静态库在哪里。但是还是照样可以链接成功。生成可执行程序。原因就是相关环境变量帮助编译器…

C#医学影像分析源码,医院影像中心PACS系统源码

医学影像系统源码&#xff0c;影像诊断系统PACS源码&#xff0c;C#语言&#xff0c;C/S架构的PACS系统全套源代码。 PACS系统是医院影像科室中应用的一种系统&#xff0c;主要用于获取、传输、存档和处理医学影像。它通过各种接口&#xff0c;如模拟、DICOM和网络&#xff0c;以…