IJCAI2016论文前瞻 | 从吃豆人到星际争霸,人工智能在一些游戏上已经玩得和人类玩家一样好了

编者注:《吃豆人》是一款由南梦宫公司制作的街机游戏,游戏最初于1980年5月22日在日本发行。本游戏由南梦宫公司的岩谷彻设计,游戏于1980年10月由Midway Games公司在美国发行。

星际争霸是由暴雪娱乐有限公司制作发行的一系列战争题材科幻游戏。游戏系列主要由Chris Metzen与James Phinney设计开发。游戏的剧情发生在26世纪初期的克普鲁星区——位于遥远的银河系中心,游戏最初于1998年发行。

修改蒙特卡洛树搜索让人工智能像人类一样玩视频游戏

摘要

在本文中,我们实现了人工智能玩家可以像人类一样玩一些视频游戏。为此,我们使用了几种运用蒙特卡洛树搜索的UCT算法,通过选择偏差行为重复当下行动、暂停、限制行动快速转换。另外,我们使用人类玩家的行动轨迹来对重复行为倾向进行建模,这个模型被用来偏差调整UCT算法。实验证明我们的修正的MCTS(蒙特卡洛树搜索)机器人BoT,在重复动作上表现和人类玩家相似。另外,我们通过调查得出人工智能玩家在一些游戏中表现得和人类一样。

1. 引言与背景

当开发一个算法用来玩游戏时,目标通常是让它玩得尽量好。对于许多游戏来说,成功有一个合适且明确的数字标准。可能是分数、游戏进度(拿到多少东西、多少等级、多远距离),或者是玩家能打败的最高等级对象。这个数字标准也是衡量计算机算法玩游戏是否成功的标准,AI的目的就是使这个数字最大化。这些游戏标准被用来进行AI智能竞赛,包括像象棋、围棋、模拟赛车和星际争霸等游戏。

然而在其他领域有更加适合的度量成功的标准,特别要提到的一种是衡量人工智能能够玩得多类似人类玩家(特定某个玩家或者大多数玩家)的标准。对于不同的场景这个很重要,其中一个例子程序生成内容时,对于一个游戏来说使用基于搜索的程序内容生成方法很重要。这些方法特别倚靠对于内容测试的模拟,人工智能玩家为了测试它的质量去玩新的内容。在这种情况下,这些内容应该是由类似人类一样的人工智能玩家去进行测试,不像人类的人工智能玩家测试的话可能会在很多地方出现很大差异,即便它们都有相同的技能等级。无论是对于专业游戏公司还是业余开发者(最近大获成功的马里奥赛车等),人工智能自动测试都非常重要。类似人类玩家对于创作教程和其它形式的演示也十分重要。最后,对于普通玩家来说在游戏有像人类玩家一样的非人类角也很重要。大部分人认为多人游戏的流行有可能是因为在游戏中缺乏可信的电脑玩家。相似的,如果和太聪明的电脑玩家对抗也没意思,所以一般游戏都会削减部分电脑玩家的实力以期更好的和人类玩家匹配。值得一提的是,虽然在娱乐游戏中这部分还存在争论,但是在比较严肃的游戏、虚拟现实、任务型游戏、实时交互模拟游戏中电脑玩家实力是对等的。

在许多情况下,电脑玩家打游戏的时候和人类并不一样。这是经过许多次观察不同游戏得出的非正式的结论。据称象棋程序即使在拥有和人类同等水准的情况下,它的下法和人类玩家也不一样。当到了视频游戏时,在超级玛丽兄弟和虚幻竞技场等游戏中也出现了同样的情况。许多研究人员尝试为这些游戏特别定制一些AI玩家,最近的两个游戏2K BotPrize和马里奥AI冠军赛就特别尝试让电脑玩家像人类一样行动来进行竞赛。在这些竞赛中,上述电脑玩家直接与人类玩家进行竞争,然后让评委来判定到底谁才是电脑玩家。结果表明,想要创造一个类人类的电脑玩家比创造一个能赢比赛或者拿高分的电脑玩家要难。

另外一个就是这些竞赛以及相关研究提出了一系列初步的计算机游戏算法异于人类玩家不的表现。因为电脑玩家不会受到人类反应次数的限制,我们观察到一个特点,通常人类玩家不可能变化的这么快速且频繁。还有一个就是不暂停,大多数人类玩家都会偶尔暂停来估算下前面的可能性,但是电脑玩家不会。最后,大多数算法在高风险策略上容易表现出懦弱的倾向(有人会说大多数人类玩家容易表现出草率的倾向)。

1.1 通用视频游戏和MCTS

虽然曾经有过许多针对特定游戏的类人类玩家尝试,考虑到游戏设计主要知识不同,很少有人尝试设计通用的类人类电脑玩家。就我们所知,还没有任何一个AI玩家能够在任何游戏中表现的和人类玩家一样。针对所有的游戏而不是特定的某一款的挑战是全局游戏策略(GGP),组合游戏、棋盘游戏或者全局视频游戏AI(GVG-AI)等都是基于AI竞赛的。对于这些竞赛来说,电脑玩家不仅要玩单一的一个游戏,它们还必须玩它们从未见过的游戏。在本文中,我们将主要聚焦在针对GVG-AI竞赛上。

大多数在GVG-AI上表现好的都是基于蒙特卡洛树搜索算法的(MCTS)。这是最近才提出的一个针对随机计划和玩游戏的算法。与其他树形搜索算法主要有两个不同:(1)在节点扩展的时候,MCTS能够平衡探索之间的关系,使得搜索更加有重点。(2)MCTS使用随机步骤来取代评估运算。在革新围棋算法后,MCTS算法变得十分流行。使用MCTS的电脑玩家比其他所有电脑玩家都要表现好,能达到人类玩家中最好的水准。在全局视频游戏AI方面,相关MCTS的成功大部分要归于发展特定游戏修正的不可能性。MCTS因为它的通用性变得十分有用。

标准的MCTS在玩实时视频游戏(如马里奥)上比棋盘游戏(如围棋)表现要糟一些,主要有这些因:必须实时做出决定(大约每40毫秒),电脑玩家可以随机做出决定,但是由于缺乏及时反馈,通常不能评估决定之后的所隐含的信息。另外,游戏树需要针对每个时间步做出修正调整。虽然标准MCTS在实时视频游戏上存在这些问题,但是它在2014GVG-AI竞赛上仍然取得了不错的成绩。

1.2 主旨

本文所提出的难题是创造出针对GVG框架的表现良好的类人类玩家。这类玩家需要在这些游戏上能够表现得和人类一样好。

本文的架构如下,首先我们介绍GVG-AI和我们用来获取数据的游戏,然后介绍用来衡量人类玩家行为和电脑玩家行为的量化标准。接着,为了提高电脑玩家的人类相似度我们对MCTS核心算法进行了一系列的修改,以及我们的模拟结果。

再后我们进行了一系列调查,让受访者来在大量的游戏录像中区分人类玩家和电脑玩家,结合受访者判断的结果我们对量化结果进行了讨论。通过讨论,我们得出这项工作能够更进一步拓展,创造出类人类的通用游戏AI是可能的。

2. 试验平台和数据收集

我们使用GVG-AI平台来进行试验,因为它包含大量的拥有相同玩家API的视频内容,且它很容易被用来进行数据收集。这些游戏是用VGDL来进行编码的,能够代表许多2D游戏。目前,这些游戏包括:Seaquest、Frogger和Space Invaders。

为了和标准MCTS玩家进行对比,我们首先收集了人类玩家行为来进行分析。为了实现这个目的,我们设计了一个小程序用来让玩家对指定游戏进行存档到服务器以便追踪。每一个追踪轨迹都包含了这个玩家的暂停、存档等一系列行为。我们一共收集了11个不同玩家的209条游戏记录,这11个玩家全是我们实验室的。我们也记录了包括GVG-AI在内50条标准MCTS玩家的游戏记录。所有的玩家都完了三个不同游戏的第一关:

l 太空侵略者(Aliens):VGDL编码的Space Invaders。外星怪物能够左右移动和发射子弹,这个游戏的目的是杀光所有的外星怪物。 l 吃豆人(PacMan):VGDL编码的Pac-Man(吃豆人),怪物在迷宫中朝四个方向运动。目标是吃掉所有的点,同时避免被追赶的幽灵抓住。 l 塞尔达传说(Zelda) :VGDL在早期的塞尔达传说中实现了地牢系统。游戏角色可以向四个方向运动,并且用剑向它的正面方向进攻。其目标是获得钥匙并且在未死亡的情况下到达出口。怪兽会随机移动,如果与玩家相遇,它便会杀死玩家。玩家既不能躲避怪兽,也不能在其它的点用剑杀死它。

3.玩家行动的定量测量

我们分析了收集的数据,并且对比了人类和标准MCTS游戏路径的不同之处。对比结果显示,他们在几个方面有着很大的不同。我们注意到在一排的两个帧中,标准的MCTS几乎很少重复两个同样的行动(例如,左,右,上,下,攻击)。而人类玩家在一排的多个帧中趋向于重复几次相同的行动。同样,MCTS很少重复无效的行动,而人类玩家在一排多个帧中,会重复很多次无效的行动。所以,标准的MCTS相比于人类玩家,更趋向于调整自己的行动。后续部分详细解释了这方面的原因。

3.1行动长度

行动长度指每个行动重复的次数,无效的行动除外。游戏时,由于非瞬间反应时间,人类玩家趋向于重复按相同的键。另一方面,标准的MCTS可以更迅速地作出反应,因此它倾向于使很多长度为1的单帧动作。

为了计算行动长度,我们测试了每一个游戏路径中,玩家的行动所发的时间。计算一个行动所含的总帧数(当一个行动用于x帧时,x就是记录者)并把它加入直方图中。直方图总数分类以后,最终行动长度可能的直方图为Pa,如图1所示。

图1:人类玩家的行动长度直方图

3.2无效行动长度

无效行动长度指一个完全无效行动重复的次数。游戏时,人类玩家趋于偶然性的停留(例如,不动)去思考,或者改变方向。然而,人工智能代理的反应通常都很快,所以不需要暂停和思考。

图2:人类玩家的无效行动长度直方图Pn。

为了计算无效行动长度,我们再一次测试了每一个游戏路径中,玩家的行动所发的时间,但是,这次我仅仅计算了重复无效行动所需的时间。最终的无效行动直方图为Pn,如图2所示。

3.3行动改变的频率。

行动改变频率的度量标准是,测量玩家从一个行动到一个新行动所发的时间(例如连续帧中从上变成左),然后通过游戏路径中帧的总数进行划分。游戏时,人工智能代理可以自由的在每个帧中选择最好的行动,经常频繁的改变行动会增加我们正努力避免的抖动效果。高效意味着高抖动,而且这通常只发生在人工智能代理中。在模型中,我们并没有使用它来选择行动,但在第6节中我们使用了该度量标准,对比人类玩家和AI代理。

4.提出的MCTS修改方案

蒙特卡洛树搜索(MCTS)是一个随机树搜索算法,它被广泛应用于一般游戏以及特定玩法的游戏如Go:在适用的情况下,它逐渐接近和极大极小值算法一样的结果。并非以深度第一或者宽度第一的方式探索树,MCTS随机探索搜索树中以前没有访问过的新区域,同时还探索了已经发现有前途但被没有充分探讨的领域,为了理解这种修改,我们首先叙述标准MCTS算法主要的四大步骤:

1.选择:算法选择树中的一个点进行扩大。在该步骤中MCTS树通过使用上置信算法(UCB)平衡探索与开发。

其中Xj是整个运行中所有通过这个节点并负责开发的平均点价值(高平均值将被更多的利用),C是激励探索常量,N是点j所有分支的访问数量,nj是该点的访问数量。 2.扩大:MCTS随机采用点j中一个未被访问的分支进行扩大 3.模拟:MCTS使用随机移动的方式进行游戏,直到它达到了终止状态(赢/损)或决定 使用一个启发式近似模拟。 4.反向传播:MCTS使用模拟步骤中得到的结果——包括——平均分数Xj,总访问数N,数中每个点的分支访问nj,更新所有原先的分支点。

GVG-AI想出了一个标准MCTS实现方法作为其中一个AI代理,这使它变成了支持视频游戏,而不是支持MCTS通常被用于的典型的组合游戏。并非一直游戏直到达至最终状态,它仅仅是模拟固定数量的行动,然后使用一个启发式函数评估达到的状态。该函数对于获得最终状态做出了积极的贡献,对于失去最终状态做出了消极的贡献,或者最终状态没有达到而代理到达了的总分。

接下来,我们叙述了在GVG-AI MCTS算法方面的改变——为了让以它更像人类的方式行动。我们将这些修改吸纳进了一个我们称之为BoT的代理中。

4.1人类建模

我们首先在标准UCB等式中加入了一个术语Hj,以便更多的模拟类似人类的行为,和一个调谐常数α以便均衡探索,开发,和类人类建模。

Hj自身是一个函数,它取决于游戏状态和先前被选择的行动。该函数有助于MCTS模拟类似人类行为的选择过程。例如,如果原先的移动的运动长度为1并且当前状态是同样的行为,这意味着价值应该更高以便激励采取同样的行动(如3.1节中解释得一样)。行动的时间更长,Hj就会随之减少。

Hj的参数是从第3节人类玩家游戏路径的直方图记录中计算出来的;我们将MCTS算法转变成更像人类行动长度和无效行动长度的分布,我们首先基于树中原先的行动,选择合适的直方图:普通的行动用P=Pa表示,无效的行动用P=Pn表示。然后计算l,当前行动进行了多久,以及计算累积概率T(l)等于l逐步增加到无穷时P(l)的和。停留l帧后,改变动作可能性为T(l),继续保持动作的可能性为1-T(l)。因此,Hj是从可能的数据驱动模型中计算出来的,并且取决于MCTS游戏数中最近的原型。

在该阶段,我们仅仅使用了修改作为描述。AI代理表现出的结果符合简单人类的分布,但没有表现出符合完整的人类分布。无效的移动类似于走入进墙中,AI代理变得不可信任的部分原因,是缺乏长期的规划和怯懦。因此,我们增加了如下的技术提高代理的可信度。

4.2小分支的整理

小分枝整理消除了所有MCTS偶然选择的无效动作,例如走入墙中,立刻扭转方向,和攻击坚不可摧的对象。无效的动作是指当执行一个移动动作后,玩家的方向和位置没有改变。有着无效动作的分支将不会被进一步探索。而且行动整理的规则事先被指定了,因为我们希望在没有学习或训练阶段的情况下,我们的方法也适用于游戏;它们是令人信服地,这也同样是从数据中学习到的;

4.3地图探索奖励

地图探索奖励是指,通过奖励访问地图中未被经常访问的区域,鼓舞MCTS去探索游戏地图中新的位置。这被介绍来帮代理提高长期训练。我们模拟等式2增加了一个奖励探索期。

其中E是一个奖励的探索期贡献的常数,visited(xj,yj)代理当前地图区域被玩家访问的次数。

4.4极大极小值

极大极小值是Jacobsen等人提出的,其中的几个技术被用于提高MCTS运行无限Mario Bros的性能,极大极小值通常被建议为Mario中克服懦弱行为的方法——角色会不自觉的避开间隙和敌人。很多GVG游戏中也出现了同样的问题,代理经常逃离敌人而不是杀死它。

一个最大的价值被用于平均值Xj和最大分支价值之间,而并非使用UCB等式中的平均价值Xj。等式4显示了式1新的探索部分,代替Xj和Xj*。

其中Q是两个时期中最大的参数,max是分支中实现的最大价值,Xj是原先UCB中一样的平均价值。

为了让它更像人类,输出特性视觉检测选择出价值Q=0.25时效果最好。高价值的Q导致代理变得非常勇敢并且死于敌人的攻击,而低价值的Q导致代理变得非常的懦弱。

5.模拟结果

该部分用四种类型的玩家对比了第3节中的定量测量:(a)标准MCTS,(b)AdrienCtx, 2014GVG-AI比赛的冠军,(c)我们的BoT算法,(d)真实的人类玩家。我们在三个相同的游戏中将他们进行了对比:异形(Aliens),食豆小子(PacMan),塞尔达传说(Zelda)。

图3通过行动长度,对不同的代理和人类玩家进行了对比。可以看出,Adrienctx和标准MCTS支持长度为1的短期行动,而人类玩家支持重复同样的行动。

正如我们所看到的那样,AdrienCtx和标准MCTS都支持长度在1之内的移动,但是人类更支持重复同样的动作。BoT算法(蓝色)更倾向于选择相同的动作,这与人类玩家的选择更接近。

图3:人类玩家,标准MCTS,Adrien和BoT代理的动作幅度分布。

图4比较了人类玩家和代理的无效动作长度。标准MCTS(绿色)大部分无效动作较短——且长度都在1左右。另一方面,AdrienCtx(紫色)无效动作最长,其长度在11。为分析且不再让无效动作发生,这一代理代表的是游戏开始前11视频帧,并且会解释这一特殊时间段的分布。BoT(蓝色)更倾向于选择无效动作,这与人类玩家的分布相似。

图4:人类玩家,标准MCTS,AdrienCtx和我们的BoT代理的无效动作分布。

图5通过动作到动作之间的变化频率直方图比较人类玩家和其他代理之间的差别程度。人类玩家(淡蓝色)很少转变动作。但是,标准MCTS和AdrienCtx会经常进行动作转换,如直方图。我们的BoT代理分布更接近人类,这会减少变化的数量。

我们的目标不仅仅是模仿人类分布,更是要将类似人类分布和MCTS的一般性和积极表现连接起来。一个只会简单模仿人类分布动作的算法能完美适应游戏,但却会是一个冷酷的坏玩家。为确保改进的MCTS的普遍性,我们必须将分数和胜负率作为表现的评测标准。

表1:人类,标准MCTS,AdrienCtx和BoT代理的胜出率和平均得分。

表1比较了人类和三种算法的表现。前面的数据是胜出率,后面的是在所有游戏和代理配对中的平均得分。由上述标准可见,我们的BoT算法和标准MCTS的得分差不多。从得分可见,BoT算法在PacMan和Zelda的表现都很好,但在Alien中表现较差。这可能是因为,由于“地图探索奖金”空间探索总是比射击更重要。

6.用户研究

为证实我们的算法比标准MCTS表现的更接近人类,我们实施了一个类似图灵测试的用户研究。基于三个游戏对我们的算法进行评估:Zelda,Pacman,和Boulderdash。Boulderdash是一个由First Star Software开发的一款经典游戏。玩家必须挖洞,收集珠宝并成功逃脱;但与此同时,必须躲避滚落的岩石和移动的怪物。之所以选择这款游戏,是因为这款游戏的玩法与Aliens相比差别更大。

在每一款游戏中,我们都会对4名玩家进行比较:(a)标准MCTS;(b)AdrienCtx,在2014年的GVG-AI 比赛中获得优胜;(c)我们的BoT算法;(d)人类玩家。对于每一种情况,我们回通过GVG-AI系统生成3个视频,最终的视频数是:3游戏*4算法*3视频=36视频。

用户研究是在网页游览器内进行的。每一位参与者会看到2段视频,这2段都是从同一游戏中选取的,且分别标准为A和B。紧接着参与者会被问到“哪一个视频是人类玩家在玩?”,且会给予4个选择A,B,两个都是或是都不是。它们会赋予一个自由领域标注为“你是如何决定的?”。所以我们能更好地理解它们是如何做决定的。参与者会被要求至少评估20场游戏,但如果参与者只评估一场游戏,结果不会被采纳。在我们的研究中有34为参与者,每一位参加者会评价10场游戏左右,平均值为9.18,,总的评价次数为312。因为每一场评价包含2场游戏,所以在我们的研究n=624样本。

表3显示了用户评价的结果。每一部分都会显示是由人类操作的视频游戏的次数。第一行,人类准确的判断出哪些是由人类操作的视频游戏,且在Zelda游戏中表现最好,准确率在88.7%左右;在Pacman中表现最差,准确率只有70.2%。第二行,我们可以看到标准MCTS表现较差,最好的准确率是在Pacman中,只有33.3%;最差的是在Boulderdash中,准确率只有8.3%。在剩下的两种算法中,BoT在Pacman中表现最好,准确率到达人类判断标准,而AdrienCtx在Zelda和Boulderdash中表现最好。

为检验重要性,我们对每一款游戏和代理都进行双向测试,并假设具有人类特征的百分比与标准MCTS的百分比相匹配。除Pacman和AdrienCtx之外,我们的p值<.01,不管其他代理和游戏的假设。这就显示,对于n=624最重要的结果是算法对于参与者把人类行为加入AI有重要影响。

我们也分析了观察者基于视频的可选自由文本反应,为探究究竟哪些常见问题让人们相信,他所看到的游戏视频不是由人类所操作。在关键词或是表达语义相同时,答案会进行编码。表2显示的是能判断玩家是AI的高频关键词。

表2:从用户研究中得出的判断玩家不是人类的常见有效理由。

通过联合我们自己的观察以及调查者的反馈,所有的发现结果解释如下。标准MCTS显示的大部分问题并未在文章开始部分提及:抖动,无效移动,比如撞墙,或是长期没有目标。AdrienCtx避免了大部分的问题,但却败在非人的反应速度,包括面对较多敌人时的快速和准确打击。实际上,一些观察员认为AdrienCtx是在作弊。BoT的反应更接近于人类,因为它更倾向于重复移动和等待。因为“惯性”它同样也会显示下列行为,在Pacamn中尤为明显。

表3:评价的百分比和具体数字。

7.结论

MCTS是目前最成功的算法——或者说算法结构——就GGP和GVG-AI比赛和相关的软件框架表现而言。但是在标准形式中,这个算法并不能表现的近似人类行为。在本文中,我们在GVG-AI的框架之内进行人类和MCTS代理在不同的游戏中进行比较。我们同样对MCTS的关键内核进行改进,让它的行为更接近于人类。改进的关键在于UCT公式中添加一个新的条款,会让行为选择更加偏向于近似人类行为。此改进的关键有效之处就在于通过计算机测试和灵图使用者研究确定了“BoT”。我们相信BoT代理对于自动检测,GVG-AI框架内的游戏说明,新游戏的生成和在不同游戏中开发近似人类玩家的游戏策略十分有效。

via IJCAI 2016

原文发布于微信公众号 - AI科技评论(aitechtalk)

原文发表时间:2016-07-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据派THU

【干货】郭朝晖:工业大数据的特征、方法与价值创造

本文长度为11700字,建议阅读25分钟 本讲座选自宝钢中央研究院首席研究员郭朝晖于2015年12月30日在清华大数据“技术·前沿”讲座上所做的题为《工业大数据...

1848
来自专栏钱塘大数据

【数说】47万微信群、2亿微信用户,背后数字规律揭秘

微信群已经进入到我们的日常生活中,成为社交关系的主要纽带。但微信群有自己的规律,长期群能存活很长的时间,临时群则转瞬即逝。来自清华大学、康奈尔大学、腾讯公司和香...

4224
来自专栏PPV课数据科学社区

让我们像驯化小狗一样驯化算法

人类进化学家当中有一种理论,说的是小狗这种宠物是从野兽进化而来,因为只有那些获得了社会化智慧的犬科动物才能存活下来。几千年前狼群在人类聚集地的周围活动,逐渐开始...

2626
来自专栏张俊红

如何高效学习

如何高效学习? 搜索 本篇的主题是《如何高效学习》,所谓高效就是花最少的时间达到最好的效果。高效率是我们在做任何事都希望达到的,包括工作、生活、学习。本篇文章重...

2473
来自专栏人工智能头条

为何机器学习的黄金时代才刚刚来临

1032
来自专栏企鹅号快讯

人工智能化的传感器技术

文 | 传感器技术(WW_CGQJS) 12月15日,工信部正式印发了《促进新一代人工智能产业发展三年行动计划》,为2018年到2020年人工智能发展指明了前进...

21310
来自专栏张俊红

如何高效学习

本篇的主题是《如何高效学习》,所谓高效就是花最少的时间达到最好的效果。高效率是我们在做任何事都希望达到的,包括工作、生活、学习。本篇文章重点介绍一种可以提高学习...

3226
来自专栏奇点大数据

深度学习工程师的4个档次

最近不少朋友问我,转行做深度学习的话,能不能找到工作,能找到什么样的工作,能达到什么样的收入水平…… 这种问题其实不仅仅是存在与深度学习行业的入门和转型中的思...

3417
来自专栏大数据文摘

驯化算法就像驯化小狗一样

2235
来自专栏新智元

【独家揭秘】机器学习分析 47 万微信群,发现 9 大规律

【新智元导读】微信群已经进入到我们的日常生活中,成为社交关系的主要纽带。但微信群有自己的规律,长期群能存活很长的时间,临时群则转瞬即逝。来自清华大学、康奈尔大学...

3616

扫描关注云+社区