1.对于机器人足球,只需要轮循计算机控制的所有球员,让每个球员针对场上情况作出最正确的响应就行了。计算机的速度非常快,虽然是轮循,但几乎不会察觉出其中的先后次序,给人的感觉就是在同时进行。其实操作系统的多线程,也是这样实现的。X86构架的cpu,多线程多任务程序是运行在保护模式下的,其根本思想就是将cpu时间切片,这个时间片上处理a任务,不管有没有处理完,下一个时间片上一定处理b任务,一圈循环下来,再继续执行未完成的a任务。
2.对于球来说,虽然它随时都在运动,但抽象看来,它在场上的情况非常简单:向某个方向运动,运动速度如何,目前所在的坐标,就这么三个要素。其他的什么由哪方控制,谁踢了一脚,都不需要也不应该考虑(这符合oop思想)。
再来看看22个运动员。其实我们可以发现,往往只有离球最近的球员,才会作出相应的反应(包括盘带/踢球、传球、接球、抢断、射门等,都只有靠近球的队员才会作出,甚至防守的时候,也往往是防守有球的球员,归根到底还是离球非常近)。没见过球在前场,队员却在后场拼抢的(当然不考虑小动作:))。所以离球较远的球员,只需向球跑动甚至暂时停止不前(这个可以用随即函数来控制。影响随机值的是球员的积极性和离球的远近。积极的球员更加主动的奔跑,离球稍近的奔跑更主动)。只有离球近的球员,才会作出特殊的处理。这样细细划分后,整体算法思路就比较清晰了。
通过上面的分析,现在来总结一下:
设计机器人足球的时候,可以使用轮循的方法,挨个处理22个队员和1个球。一般情况下,处理方法也就是:通过原来的坐标和事先确定的方向、速度,计算新的坐标。当计算完所有物体的新坐标后,刷新屏幕,以显示出动画效果。
每隔一段时间(或者若干次后),允许计算机对每个物件作出特殊操作(踢球、传球等),这些特殊操作的本质就是改变23个物体的速度和方向,使接下来一段时间物体的运动轨迹产生变化。
做特殊操作时,可以按照球员序号遍历。针对每个球员需要做的事情是:
1.计算这个球员离球有多远。超过一定距离,就随意处理(比如上面提到的,用随即函数确定这个人是向球跑还是停止)
2.离球近的话,再查询球周围有没有离球更近的球员(考虑到时间复杂度,不推荐真的去遍历整个球场,而是维护一张表,用来记录每个球员当前和球的距离)
3.如果有对方球员离球更近,则可选的操作有:更加靠近、抢断、等等(我不太懂足球,不知道还有什么操作)。可以用随机数来确定执行的操作
4.如果有己方球员离球更近,则可以断定此人正在带球,此时可选的操作是:向他移动准备接应、向对方球门移动准备接传球进攻
5.如果当前没有其他球员离球更近,那此时可以断定该球员正在带球。此时需要考察周围安全距离内有没有对方球员,有没有己方球员,离球门多远等等问题,并作出传球、射门、盘带等等操作(没必要真的计算其他人跟自己的距离。由于此时离球近,可以忽略不计。完全可以用其他人离球的距离来代表。具体原理,踢场球就知道了:))。这些操作比较简单,只要用一些选择语句就可以了。有多种操作可供选择的时候,可以用随机数来确定。球员的各种属性都可以影响随机数的取值。
除此之外,还有一些例外操作:比如当出现运动员跑着跑着出线、相撞、碰到球等情况,此时即使还没有到例行的处理特殊操作的时候,但也必须立即针对涉及的球员执行特殊操作,否则不真实、不合理的。
6.当球队进攻时,对于有球队员来说,它(暂且用它咯)在每一个瞬间都会有一个行为指导,也就是下一步行为:
是向某方向带球?还是以某种方式传球给队友中的某一人?或者即是立即射门。这个指导行为从何迩来?又如何根
据状况得以改变?不管情况怎样变化,使球员能在任何时刻都有一种较为合理的下一步行为为备,这样大概便可以
模拟出踢足球的AI了。
其实足球AI模拟的关键就在于会让球员能较为聪明合理地分析球场上瞬息万变的赛况,并根据这个判断得出一
个更为聪明合理的下一步行为。能力好的球员会不断的分析,从而迅速地调整它的行为而得以使比赛向更为有利的
趋向发展,这个过程不断地持续,一场计算机AI模拟的高水平足球赛便可得以实现了。
第一个难度便是如何教会让AI球员判断场上的情况,如何产生AI分析, 如何得出结论并生成下一步行为。
第一步是视觉判断
带球球员能看到队友及对方的行为,从离它近的到离它远,无论在它前面或是在它侧面甚至是在它身后的,优
秀的球员都能够感知。也就是模拟使AI球员“视野开阔”。这些信息可以很方便地从SIM比赛中球员的坐标, 速度
,动作数据得来,模拟起来并不算太难。
第二步是赛况分析
也就是说使球员在视觉信息采集后产生一个意图,使比赛能更为向我方有利地发展。(比如:队友位置都不太
好,无法穿球,AI使它得出了继续运球的意图;当它离球门距离不太远,有一定的射门空挡,AI便使它得出带球射
门的意图;当有队友的跑位出现空挡时,AI便使它产生了向其分球射门的意图;当两侧队友跟进到位时,AI便使它
产生向其穿球打下底穿中的意图) 这些都是第一步行为意图,是战术的雏形。
从这些极其离散的视觉采集信息(就是那些敌我双方球员坐标,速度,行为甚至能力)而产生一个战术意图看
起来是非常玄妙而神秘的。殊不知,聪明的人类却能够从这些离散而无规的数据中能提炼出非常多隐藏在内的有用
的比赛信息!而AI模拟的任务就要让COM球员学会找出这些隐藏的信息! 因此可以将导向式思考(利用经验规则导
向)与推论式思考(用极大极小法推导出最佳行为)两种方式合理巧妙地结合起来。
另一个重要的因素便是将大量隐藏信息进行“过滤”,也就是说,AI需要找出最有价值(或者讲是合适)的隐
藏信息,这里有随机因素,也有权排序。
最后一步便是根据所产生战术意图而形成一个下一步行为
这很像是一个细节处理,因为下一步行为行为是随时在频繁地改变,而战术意图相对来说是较为稳定的。(毕
竟近处看得多,远处观的少)实现下一步行为便是这个SIM足球的“动作引擎元素”, 合理的动作元素可以使模拟
比赛的可视性更为真实,更重要的是它能够与AI相互配合,这两者可以说是相辅相成缺一不可的。FIFA的缺陷便在
于它的动作引擎元素没有WE系列合理真实,这便直接导致了它的真实性不如WE,AI做的再棒也无济于事。
总结:AI球员通过观察赛况,找出离散数据的隐藏信息,得出了一个战术意图,做出了一个动作行为,这便就
似完成了一个TURN。剩下的,Sid Meier有一个很有用的经验思路:“我先教它如何玩一个回合开始。然后教 它如
何玩两个回合,再后来就该考虑教它如何玩10个回合了。”当然, SIM足球的AI也许会更复杂,因为我们只考虑了
有球球员AI模拟的一个例子, 但是我相信这3个部件是适用与足球场上每一个情况的,要做的只是更深入的分析,
体会,感悟。
7.