Go-Bigger访谈录|巧用模块化工作拆分法,锵锵三人行

2023-10-18 08:10

本文主要是介绍Go-Bigger访谈录|巧用模块化工作拆分法,锵锵三人行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2022年5月28日,OpenDILab举办了全球首届“AI球球大作战:Go-Bigger多智能体决策智能挑战赛”(以下简称“Go-Bigger决策智能挑战赛”)线上颁奖典礼及Workshop。

经过半年多的激烈角逐,最终有6支队伍从近1500支队伍中脱颖而出,获得15万赛事奖金。

比赛共设冠军、亚军各1名,优胜奖4名,共同瓜分15万赛事奖金,目前各类奖项得主已出。

OpenDILab将发布“Go-Bigger决策智能挑战赛访谈录”系列报道,为您揭秘挑战赛选手背后的故事。

玩个球队在本次Go-Bigger决策智能挑战赛中获得第4名的成绩。


2021年末,首届Go-Bigger多智能体决策智能挑战赛宣布开赛后,玩个球队队长温添在公众号上看到Go-Bigger比赛的相关信息。其中类似球球大作战的玩法以及多智能体决策模型让温添觉得非常有趣,便转发给了自己的好友潘登和戴维恒。戴维恒也对游戏智能体设计的这个领域非常感兴趣,而潘登正在寻找一个学习算法的好机会。三人一拍即合,说干就干,便组队参赛了。

三名成员都对Go-Bigger决策智能挑战赛非常地感兴趣。首先球球大作战这个主题对于这三个游戏爱好者而言吸引力满满。特别是在比赛中设计出具有自我决策能力的游戏AI,会让他们觉得充满了成就感。

其次,相比于传统的科创大赛,Go-Bigger决策智能挑战赛官方发布的baseline以及详尽的文档降低了这次比赛的参赛门槛。只需要有一定的Python编程基础就可以参加比赛了。另外就是这次比赛所采用的是天梯机制,让选手们之间互相PK来决定排名。这样的赛制显然比评委打分或者固定题目的测试来得更加刺激。潘登说他现在回忆起来,每天看天梯录像改进算法的日子还是很心潮澎湃的。


战术上的扬长避短

扬长避短,说起玩个球队的战术,队长温添用这四个字做了归纳总结。

玩个球队提交的模型并没有使用强化学习方法,而是将一些传统的算法作为其解决方案。温添认为,游戏智能体的设计其实不存在完美的战术。关键就是要发挥出自己的战术风格,并把它贯彻执行下去。在比赛中,成员们大目标不是去把智能体所有的方方面面都做得尽善尽美,而是找到自己最擅长的一个战术并最大可能地发挥它的优势同时规避它的弱点,这也正是扬长避短战术的精髓。

扬长避短战术可能看似简单,但是在这长达半年的比赛周期中,在执行上也遇到了不少的挑战。对此,温添和潘登借鉴了他们过往设计程序时的一些经验,采用模块化的开发方法来提高开发效率并保证设计的一贯性。队员们将游戏智能体按照功能划分为若干个小程序模块,每个小模块完成一个确定的功能,并在这些模块之间建立必要的联系,通过模块间的互相协作完成整个游戏智能体的设计。

版本的控制是他们参赛过程中遇到的另外一个挑战。对此,潘登把比赛的游戏智能体比作开发一个互联网产品,它不可避免地要经历版本迭代的过程。三名成员除了还在学校的大学生,也有刚刚工作的职场新人。他们都认为自己对于版本迭代的流程还是比较陌生的,因此,他们也在版本更新的过程中格外地小心翼翼,生怕把扬长避短变成“扬短避长”,又或者在不断的变化中迷失了自我、原地踏步。而最终智能体完美的落地和在比赛中的精彩表现也让大家对自己版本控制的能力信心倍增。

| 战略上的持之以恒

如果说扬长避短是玩个球队的战术,那么持之以恒就是玩个球队的战略。

这次比赛,对于温添、潘登和戴维恒三人而言也是这特别的意义:这次Go-Bigger决策智能挑战赛是他们三人第一次从零到一地完成一个项目。在此之前,这三位游戏爱好者经常时不时地一起开发游戏。团队三人各有所长,兼顾了游戏制作中产品、开发、美工和运营等多个工种。但每次的项目却又总是半途而废。

戴维恒认为,这次比赛之所以能够坚持到最后,是因为比赛客观上给他们设置了一个具体的目标,并伴随着一个明确的时间流程。通过完成一个个模块化的“小目标”让他们最终达成了“大目标”。作为队长,温添也认为这是他们团队最大的收获和成就。

正所谓“DDL 是第一生产力”,戴维恒觉得坚持完赛也很好地提升了他们的时间规划能力。他说:“比赛中会有时间节点。这给我们提供了一个清晰的时间线,让我们明白什么时候该做什么事。”而实时排名又能让参赛者意识到比赛的竞争性。“知己知彼,方能百战不殆。这个天梯机制让可以清晰地看待我们和对手之间差距的变化”潘登补充到。

| 协作上的齐心协力

作为一个团队的比赛项目,协作的能力自然也是必不可少的。三名成员各有所长,也各有各的想法和思路。如果把每个人的每个想法都要实现出来验证,那难免要花费很多的时间。面对这样的机会成本问题,戴维恒设计了一个量化的衡量方案,即新开发的智能体要与旧版智能体对战要有70%以上的胜率才会被接纳。虽然这样的硬指标也会有它一定的局限性,但是它对团队整体进展推进的效率还是有不少提升的。

工作的接力也是协同开发中经常碰到的问题。在提到这个问题时,温添又一次提到了他之前分享过的模块化的工作拆分法:每位成员都研究自己负责的模块,同时,由队长对版本进行一个控制,以防止这个某个模块越改越弱的情况发生。

| 收获与展望

通过参与本次比赛,玩个球队的成员们都对于深度强化学习有了新的感受和体验。

主要负责技术的戴维恒同学觉得自己在强化学习实践上面得到了实实在在的锻炼。戴维恒同学对于大规模分布式强化学习一直都有着浓厚的研究兴趣,但是他在此之前并没有使用过大规模分布式RL的经验。通过这次赛事自己的实践和对其他选手战术的理解,戴维恒十分看好分布式RL在大型吃鸡类游戏中的使用价值。

一直想学习Python的潘登同学也借此机会摸索了一下算法。他也将智能体团队协作作为后续参加类似项目的发展方向。潘登提到,“因为我们的模型在单智能体策略上几乎达到瓶颈了,转向团队协作的话虽然难度很大,但上限也会更高”。

而队长温添则觉得自己和团队成员在协作能力和时间规划能力上得到了提升的同时,对深度强化学习的适用性有了更多的认识,温添认为目前强化学习的落地应用,主要局限在真实环境下的训练样本获取成本过高。一个可行的解决方案是建立一个足够逼真的仿真环境获取低成本训练样本(例如OpenAI的机器手,还有腾讯的机器狗),并加以微调,把模型部署在真实环境中使用。

对于智能体开发的整体的方向,队长温添还是认为,要扬长避短。因为智能体是无法做到面面俱到的,过于追求智能的完美反而会导致智能体表现不稳定。相反,在设计智能体前,应当找到一个主要的策略方向,并将其不断深入,把开发的策略(如贪婪发育/侵略进攻)利用到极致。

第一届Go-Bigger决策智能挑战赛刚刚落下了帷幕,温添、潘登和戴维恒三人已经开始憧憬起来下一届决策智能挑战赛起来了。对于下一届赛事,他们都希望有更多志同道合的小伙伴参与进来,能有更多的“球球”在深度强化学习的舞台上“PK 大作战”。

 

这篇关于Go-Bigger访谈录|巧用模块化工作拆分法,锵锵三人行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/231301

相关文章

从基础到高级详解Go语言中错误处理的实践指南

《从基础到高级详解Go语言中错误处理的实践指南》Go语言采用了一种独特而明确的错误处理哲学,与其他主流编程语言形成鲜明对比,本文将为大家详细介绍Go语言中错误处理详细方法,希望对大家有所帮助... 目录1 Go 错误处理哲学与核心机制1.1 错误接口设计1.2 错误与异常的区别2 错误创建与检查2.1 基础

Go语言中json操作的实现

《Go语言中json操作的实现》本文主要介绍了Go语言中的json操作的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录 一、jsOChina编程N 与 Go 类型对应关系️ 二、基本操作:编码与解码 三、结构体标签(Struc

C#利用Free Spire.XLS for .NET复制Excel工作表

《C#利用FreeSpire.XLSfor.NET复制Excel工作表》在日常的.NET开发中,我们经常需要操作Excel文件,本文将详细介绍C#如何使用FreeSpire.XLSfor.NET... 目录1. 环境准备2. 核心功能3. android示例代码3.1 在同一工作簿内复制工作表3.2 在不同

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

GO语言短变量声明的实现示例

《GO语言短变量声明的实现示例》在Go语言中,短变量声明是一种简洁的变量声明方式,使用:=运算符,可以自动推断变量类型,下面就来具体介绍一下如何使用,感兴趣的可以了解一下... 目录基本语法功能特点与var的区别适用场景注意事项基本语法variableName := value功能特点1、自动类型推

GO语言中函数命名返回值的使用

《GO语言中函数命名返回值的使用》在Go语言中,函数可以为其返回值指定名称,这被称为命名返回值或命名返回参数,这种特性可以使代码更清晰,特别是在返回多个值时,感兴趣的可以了解一下... 目录基本语法函数命名返回特点代码示例命名特点基本语法func functionName(parameters) (nam

Go之errors.New和fmt.Errorf 的区别小结

《Go之errors.New和fmt.Errorf的区别小结》本文主要介绍了Go之errors.New和fmt.Errorf的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考... 目录error的基本用法1. 获取错误信息2. 在条件判断中使用基本区别1.函数签名2.使用场景详细对

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作