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语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓工欲善其事,必先利其器,本文将... 目录1. 使用了错误的time.Duration2. time.After导致的内存泄漏3. jsO

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

Python实现合并与拆分多个PDF文档中的指定页

《Python实现合并与拆分多个PDF文档中的指定页》这篇文章主要为大家详细介绍了如何使用Python实现将多个PDF文档中的指定页合并生成新的PDF以及拆分PDF,感兴趣的小伙伴可以参考一下... 安装所需要的库pip install PyPDF2 -i https://pypi.tuna.tsingh

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

Go 1.23中Timer无buffer的实现方式详解

《Go1.23中Timer无buffer的实现方式详解》在Go1.23中,Timer的实现通常是通过time包提供的time.Timer类型来实现的,本文主要介绍了Go1.23中Timer无buff... 目录Timer 的基本实现无缓冲区的实现自定义无缓冲 Timer 实现更复杂的 Timer 实现总结在

Go使用pprof进行CPU,内存和阻塞情况分析

《Go使用pprof进行CPU,内存和阻塞情况分析》Go语言提供了强大的pprof工具,用于分析CPU、内存、Goroutine阻塞等性能问题,帮助开发者优化程序,提高运行效率,下面我们就来深入了解下... 目录1. pprof 介绍2. 快速上手:启用 pprof3. CPU Profiling:分析 C

Python进行PDF文件拆分的示例详解

《Python进行PDF文件拆分的示例详解》在日常生活中,我们常常会遇到大型的PDF文件,难以发送,将PDF拆分成多个小文件是一个实用的解决方案,下面我们就来看看如何使用Python实现PDF文件拆分... 目录使用工具将PDF按页数拆分将PDF的每一页拆分为单独的文件将PDF按指定页数拆分根据页码范围拆分