之前发过一个贴,展示了我基于ygopro-core与强化学习开发的游戏王AI https://github.com/sbl1996/ygo-agent 19 最近感觉AI训练已经初有成效,想做一下可视化,实现类似Windbot的效果,涉及到对YGOPro服务器及客户端的代码修改。请问各位大佬现有兼容ygopro-core的库哪个比较适合入门与自定义修改,有没有方便和ygopro开发者讨论的地方比如QQ群,discord等,能深入交流的。谢谢!
我理解ygopro-core
在整个ygopro生态中是一个比较底层的基础库,训练一个游戏王对战AI的话应该不需要修改这个库才对。
Anyway,我是网页版YGOPro(Neos)的作者,如果您有想要了解的关于ygopro的东西的话可以联系我邮箱ccc@neos.moe。Neos是一个我参考ygopro客户端源码重新实现的网页版前端,可以自信地说相比ygopro(2)客户端它的代码结构更合理,可读性也更强。如果您感兴趣,我们可以一起讨论游戏王AI如何可视化。
另外MC社团有个qq群用于技术讨论,不过我没管理员权限。您可能需要联系社区管理员星光pokeboy
。
可能是我的表述有误,不需要修改ygopro-core,需要修改的是ygopro的服务器与客户端交互逻辑。我刚发现Neos的文档很详细,我先参考一下。
我粗略研究了一下Neos,发现一种可能的AI整合方式。我的AI核心是每步接受状态输入,输出动作,这里的动作就是所有要玩家做选择的,包括select_card, select_ position, select_chain等。状态输入包括我方及对方的卡的信息(对方的信息需要确定哪些不显示),全局状态(双方LP,回合数,当前阶段,双方卡组/手牌/场上/墓地/额外卡片数),双方历史动作信息。如果Neos能提供这些信息,AI就能正常运行,我的AI模型很小,甚至可以用CPU实时跑在浏览器上。
实现和AI对战的方式,我猜想可能是,玩家选择AI对战模式,Neos像正常匹配一样在服务器创建一个房间,对于服务器来说两方都是正常玩家,而对于Neos,一方是选择AI对战的玩家,一方是AI,AI这边由Neos来模拟玩家发送AI的选择。
对于Neos能否提供AI需要的状态输入,我只有一点不太确定,上面这种方式,能准确记录双方的历史动作信息吗,就是动作类型是什么(e.g., select_card),选择的结果是什么。
Neos还可以针对AI给出一些专有的提示,比如AI预测的结果其实是当前所有可行动作的概率,以及我方当前状态下的胜率,Neos可以用专门的UI来显示这些信息。
因为我也懂一些Web开发,所以只要告诉我如何获得模型需要的输入,我可以实现上面的模型相关的部分,最终可能表现为一个函数,在需要玩家选择时调用,给出AI预测的选择结果。对于剩下的如何实现玩家和AI对战部分,我就完全不懂了,可能就需要您帮忙了。
非常期望一起实现游戏王AI的可视化。
厉害我这几天花时间看下,尽快回复朋友。感谢
我大概理解了您的意思,首先Neos是一个前端,它无法获取对手的手牌和盖卡信息,除此之外所有的信息都可以获得;历史动作信息这个如果我没理解错的话,它是不是和Master Duel的对战历史框的内容比较类似?历史动作信息这个Neos暂时没有保存下来,但我们后面打算做的事情正好需要实现这一点。
另外看起来您的意思是想让AI模型跑在浏览器上,让它作为一名玩家进行部署。对于这点,我的想法是:
- 和AI对战:如果要想实现AI对战的话,在边缘测(玩家浏览器上)部署AI模型不是最佳方案,技术上也不太可行(因为你无法和自己进行websocket连接)。比较好的做法是在服务器侧,整体上作为一种人机部署AI模型(类似“我太帅了”这样的WinBot)。这样做工程上更合理,后续也更方便拓展和优化。
- Neos显示AI预测结果:这个功能像朋友说的那样在Neos侧实现则是一个比较合理的做法。Neos增加UI来显示这些AI预测信息也是比较方便。但这里有个问题是朋友的AI模型应该是python实现的?还是说这个模型是一种专有的格式?简而言之,我们需要考虑下如何在浏览器上执行模型的推理功能。
对于上面两点,我觉得2可行性高一点,因为ygopro生态里后端的架构比较复杂,如果您想要做1的话需要找到MyCard服务器的管理员,和他进行沟通。第2点的话只需要在Neos上做实现就好了。
对于分工,我觉得您的提案就是没问题,核心工作就是需要实现一个模块,这个模块接收当前状态和历史动作输入,然后输出预测结果,也就是推荐给玩家的下一步动作。并且这个模块可以在浏览器上运行(WebAssambly好像可行?)。
最后,您可以加入我们的研发qq群进行深一步的讨论: