本次编程拉力赛为一项竞速赛事,但在具体规则上有所区别:不同于传统赛车竞技中的亲身驾驶方式,这一次参赛者需要利用自己编写的AI(即人工智能)控制器引导车辆完成各条赛道。相关编码工作非常易于上手,即使大家并非资深程序员也能够参与其中——事实上,即使各位对于编码工作一无所知、也完全能够创建出具备一定水准的AI成果。 如果大家愿意为自己的赛车编写更为精妙的AI代码,那么了解Java或者其它与面向对象编程语言相关的基础知识将成为您良好的助力——如果不甚了解也无需灰心,编程拉力赛正是学习这方面技能的绝佳起点。 想要参加比赛并开始自己的速度竞逐? 遵循以下几个步骤以开启您的竞逐之路:
在成功让您的车辆在赛道上跑起来之后,请点击此处阅读不同赛道之间的差别,从而确保自己的AI方案能够正确指导车辆在每条赛道上顺利抵达终点。 第一步 注册并下载竞赛软件 要获取竞赛软件的具体安装说明以及安装器使用介绍,请点击此处查看安装说明页面。我们还在1.3版本中加入了一些新鲜内容,大家可以点击此处了解相关详情。 请大家登陆IBM Code Rally中国赛区网站注册报名并下载竞赛软件。 第二步 从零开始参加竞逐——只需60秒 编程拉力赛软件已经安装完成——接下来该做什么? 当编程拉力赛软件安装完成之后,参加比赛就变得非常简单了。下面大家需要完成的第一项任务就是启动编程拉力赛客户端。在客户端启动完毕后,大家应该看到以下界面。点击“Welcome”选项卡上的“x”即可关闭当前欢迎界面。关闭后,大家应该看到以下界面。
在这一视图中,大家需要点击Windows > open perspective > other选项并选择列表顶部的“code rally”项目。点选完成后,编程拉力赛客户端会显示以下界面。
现在大家看到的是编程拉力赛客户端的基础视图——其中面积广大且空空如也的区域正是各位编码的主要阵地。屏幕底部的部分(即‘my races’)将显示大家在游戏中已经完成的竞赛信息,而左手边的区域则显示大家已经创建完成的赛车列表外加所接入的服务器。在真正参与竞赛之前,大家需要首先接入一台服务器——最便捷的方式当然是直接连接IBM Cloud Server。IBM Cloud Server是一套免费向大家开放的全球服务器,在这里任何参赛者都能加入竞逐并与来自世界各地的对手们进行圈速比拼! 如何接入IBM Cloud Server 为了与该云服务器相连接,我们需要点击界面左手边的“Servers”标签——这时对应区域的显示内容将会有所变化,具体如下图所示。
这时列表中应该显示出1台可接入服务器——即“My Computer”或者“IBM Cloud”——无论实际显示条目是哪一种,大家都需要右键点击并选择“edit”从而打开以下界面。 IBM Cloud信息 主机: http://www.coderallycloud.com 端口: 49030 注意:如果您打算正式参加本次编程拉力挑战赛,请暂时不要使用这一服务器。适合您的服务器选项取决于您所在的具体区域:北美: challenge-na.coderallycloud.com欧洲: challenge-eu.coderallycloud.com巴西: challenge-br.coderallycloud.com印度: challenge-in.coderallycloud.com中国: challenge-cn.coderallycloud.com全部服务器使用同一端口: 49030 大家需要在上图所示界面中填写相关信息,其中主机与端口已经列出。您还需要为自己输入一个用户名——该用户名可供其他参赛者查看,如果您对其作出变更、原有竞赛历史记录也将丢失。如果您所选择的用户名已经存在,系统将给出对应之提示信息——如果您此前并没有使用过这一用户名,则需要另外选择一个新的用户名。 当用户名设置完成之后,各位就做好了参加竞赛的全部准备——接下来要做的就是创建一辆赛车并投身于赛道当中。创建一辆基础赛车 如果大家希望了解更多与赛车创建以及编写首款AI方案相关的具体信息,请点击此处阅读相关博文,并按照其中的指示分步操作。不过如果您打算快速加入到竞赛当中,则可以直接遵循以下基础说明。 在编程拉力赛客户端中,大家需要对左侧面板中的“vehicles”标签做出变更。
现在大家需要点击绿色的“+”来打开赛车创建窗口。
接下来大家需要为自己的车辆设定一个名称(请不要用数字作为名称的起始内容,而且名称内容必须由字母及数字构成)。接下来我们会看到几个车辆属性选框——在每个选框当中输入1(要了解各个选框的含义以及如何对其进行合理利用,请点击此处查看我们的车辆创建指导博文)。接下来点击“AI Implementation”之下的“intermediate”选项。这时大家会看到五个新的下拉菜单——第一个为大家应当接入的服务器名称,我们不必管它。接下来的四个选项旨在选择大家的车辆在不同场景之下的行为方式——在四个选框中分别做出选择而后点击“提交”。现在,大家的车辆将会出现在界面左侧区域——右键点击其名称并在race on… > your server name当中输入服务器名称。而后,客户端会要求您选择一条竞赛赛道——赛道可以任意选择,同时指定“vehicle type”——所谓车辆类型是指您的赛车在竞赛当中的外观样式。当选择好了赛道以及车辆类型之后,即可点击enter race以开始比赛。 如何查看比赛过程回放 在用户界面底部,大家现在应该看到自己刚刚加入的竞赛入口——如果这时已经有其他参赛者加入到同一条赛道中来,我们就会直接参与到比赛当中。如果当前没有其他参赛者,那么系统会生成一场新的竞赛。大家在创建一条新赛道之后可以最多等待30秒,在此期间其他后续加入的参赛者将与您同场竞技。对手加入后竞赛即开始进行,整个比赛过程耗时在10到30秒之间。您无法在比赛过程中直接查看车辆行进状态,但当竞赛状态变更为“finished”(已完成)后,大家能够双击表格中的对应竞赛并在赛事回放窗口中查看具体过程,如以下截图所示。(提示:如果您的竞赛耗时超过1分钟才变更为‘finished’状态,请点击列表上方的同步按钮——该同步按钮图标为两条指向方向相反的黄色线条。)
在这里,大家可以点击屏幕下方的蓝色play按钮,竞赛也将就此展开——旁边注有名称的车辆来自其他参赛者——如果所显示的车辆旁边没有名称,则意味着其是由竞赛软件本身所生成的bot操控对象。每次竞赛需要跑完三圈赛道,且最高耗时为5分30秒(如果您在这一时间上限之内仍然未能完成比赛,则会被标记为‘did not finished’,即未完成状态)。 查看您的排名情况 如果大家希望了解自己与其他参赛者的圈速对比,请点击此处查看IBM Cloud排行榜——各位能够通过变更设置来根据平均圈速、最高圈速或者特定赛道最高圈速显示上榜名单。下一步 现在大家已经了解到关于接入IBM Cloud Server以及进行竞赛的基础知识,如果希望获取更多创建高级AI或者学习如何对当前中级难度AI做出调整的信息,请点击此处阅读“如何创建更出色的车辆AI”资料。第三步 创建自己的第一款赛车AI 在编程拉力赛的赛道上创建赛车AI非常简单——没错,非常非常简单! 大家可以创建两种不同类型的赛车AI——其中Intermediate AI(即中级AI)是最容易创建的类型,而且无需任何编程技能作为前提。相比之下,打造出更为先进的高级AI则为大家提供了发挥个人能力的灵活空间,允许各位根据自己的思路构建圈速表现更出色的AI成果。高级AI最短只需三行代码即可完成,当然如果大家愿意、也可以编写出长达数百行的高复杂度代码——选择权完全掌握在您自己手中! 如果大家希望了解如何设置竞赛软件、加入竞赛并查看竞赛过程回放,请点击此处先行阅读“从零开始参加竞逐——只需60秒”章节。创建自己的车辆 要创建自己的车辆,大家首先需要遵循以下步骤:
大家能够在每种不同物理属性当中设定的数值是相对而非绝对的,且各项数值的占比总和为定值。最直观的理解方式就是假设当前车辆拥有100“点”可分配数值,大家可以将其任意指派给上述每种属性,而每种属性的具体数值都会对车辆的实际表现产生影响。在每个选框下方都显示有一个百分比数值,这代表着当前各项数值在可分配总体数值当中所占权重,也便于大家快速查看当前车辆在哪种属性上较为偏重。有鉴于此,如果一辆赛车的各项属性数值均为1,那么其实际运行效果与各项数值皆为1000的配置方案完全相同。提示:每个选框当中的数值至少需要为1,否则车辆将无法正常运作。 中级与高级车辆二者在这方面并无区别,都需要添加上述属性分配信息。大家可以查看下一章节以了解如何创建属于自己的中级或者高级赛车。 编辑自己的赛车 大家可以随时在车辆列表当中右键点击对应车辆并选择“edit”来变更对应AI的具体设置——其中包括前面提到的各类选项以及中级AI条目。中级AI 要创建一套中级AI,大家首先需要查看窗口左下方的“AI Implementation”区域。这里共提供两2上选项——“Intermediate”(中级)与“Advanced”(高级)。客户端会默认选择高级选项——如果大家将其变更为中级,则车辆AI会切换至中级模式、同时提供更多细节选项。 现在大家会在窗口左下方看到五个下拉式选框——其中每一个选框都标注为一种与AI方案相关的行为机制。对这些选框内容的修改会直接影响到您的车辆在赛道中的实际表现。
一旦大家为以上选框选择了合适的选项之后,点击“submit”提交设置结果,这样我们的中级AI就创建完成了——大家现在可以在车辆列表中右键点击对应车辆并驱动其加入竞赛当中! 高级&代理AI 如果大家希望新手编写属于自己的AI或者代理方案,则可以将“AI Implementation”设置为高级模式,这样我们就可以自己动手从零编写或者对已经进行过竞赛的车辆AI代码作出修改。一旦大家选定了自己打算使用的AI,请点击“submit”进行提交。完成上述步骤后,大家应该会在车辆列表当中看到刚刚加入进来的新AI——这时双击对应车辆,客户端会直接打开AI文件、我们就从这里开始将自己的奇思妙想添加进去。 在开始编写自己的AI方案之前,请大家先行阅读以下几条基本原则:
拉力赛高级AI代码采取的则是事件驱动机制——这意味着当竞赛过程中出现特定状况时,AI中的对应方法将得以调用、从而判断车辆应该采取怎样的应对措施。下面来看竞赛当中车辆会随时监听的九种事件:
除了以上九种事件之外,代理AI还拥有另一种额外事件:
除了前面提到的项目之外,您无法为自己的车辆添加更多事件,但却可以在事件当中调用更多由您自己创建的方法。 一旦您完成了车辆AI的编写工作之后,请右键点击对应车辆并选中“enter race”选项从而加入到比赛当中。竞赛将随即进入排队阶段并开始进行。如果大家使用的是高级AI方案,那么竞赛将以速度高于实时方式的模拟方式进行,您需要等等竞赛模拟完毕之后方能查看过程回放、而且在在此之前您向AI提交的任何代码变更都不会被账户接受。如果您选择使用代理AI,那么竞赛将以实时方式进行——除非有多位其他参赛者所使用AI代码质量糟糕或者服务器延迟过高,从而导致服务器耗费大量时间进行比赛过程回放。在这种情况下,所有参赛者都会感受到显著的处理时耗提升。在使用代理AI时,您可以双击“my races”视图下的对应竞赛以查看车辆的竞速过程——当前查看到的状态可能与实际模拟情况存在数秒种延时,因此您对于AI所做出的任何代码变更都需要在几秒钟之后才能切实反映在车辆行为之上,这是因为回放窗口自身存在一定延时。为了让您对代码的变更快速起效,最好的办法是在竞赛过程中保存对应AI文件——您的AI将由WebSphere Application Server Liberty Profile以极高速度进行重新启用(所谓极高速度,通常指1秒以内),而竞赛模拟机制随后会与更新版本进行通信。 以下所示为大家可以创建的最简单高级/代理AI代码:
public void onCheckpointUpdated(CheckPoint cp) { } @Override public void onRaceStart() { getCar().setAccelerationPercent(100); } 通过以上代码,您的车辆会在竞赛起始阶段将加速数值提升为100%,并将下一个检查点的中心设定为前进目标。当车辆通过该检查点时,继续将接下来的检查点设为目标。这是一套非常基础的AI方案——而且在一条直道上应该可以取得很好的成绩。然而实际赛道中存在着众多需要减速通过的转弯区域、限制车速拉升的路段以及需要回避的障碍物,因此大家需要加入更多构思才能取得良好的比赛成绩。高阶技巧
代理技巧
仍有疑问?需要更多帮助? 点击此处查看我们的常见问题页面,其中提供的一份参赛者最常遇到的问题列表,当然也包括解决这些问题的办法。如果您的问题在那里仍然得不到解决,请点击此处通过论坛获取更多帮助! 本文原载于developerWorks。 |