首页>>科技 >>内容

全球校园人工智能算法精英大赛官网,机器人足球的人工智能算法方案分析

发布时间:2023-10-18 19:46:22编辑:温柔的背包来源:

全球校园人工智能算法精英大赛官网,机器人足球的人工智能算法方案分析

很多朋友对全球校园人工智能算法精英大赛官网,机器人足球的人工智能算法方案分析不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。

前段时间和个人电脑对弈五子棋,觉得人工智能很有意思。所以最近闲来无事,想了想机器人足球的人工智能算法。

机器人足球和五子棋游戏的主要关系是:两者都需要随时分析整板/场上的状态,做出最恰当的反应;主要区别是:五子棋是回合制游戏,而机器人足球是“即时”游戏。另外,五子棋应该只基于某一步考虑,但机器人足球必须考虑23人/球(棋子)。表面上看,差别挺大的。现在我们来详细分析一下:1)关于机器人足球的“瞬间”特性。

22个人,加上一个足球,有23个物体同时移动。不能说机器人足球和五子棋一样,一个人先动,其他人站着,第一个人动了之后第一个人再动。这不是踢足球,而是表演节目。如果像《星际争霸》这种即时战略游戏在当年,所有人都部署好了,按一个准备按钮通知电脑,然后电脑慢慢的一个一个的测量它控制的坦克,会有什么乐趣?

有人会说可以用多线程(我事先声明,我对多线程的理解仅限于几个简单的例程,所以下面的描述可能有问题)。是的,多线程是可以同步处理的,而对于足球这样的比赛,场上的球员是确定的(不管被红牌罚下)。用23个线程控制人和球()好像没什么问题。但如果是《星际》,造一辆坦克会造一个新进程,杀一个士兵会破坏一个进程。好像这个比较贵。更何况,如果计算机制造100辆坦克,100个士兵,会消耗相当大的资源。虽然不知道《星际》是如何实现实时策略的,但是我想即使是多线程,也一定有专门的算法来优化。

有必要这么复杂吗?如果仔细分析瞬发系统和回合制的关系,会发现两者并没有本质的区别。更准确的说,回合制其实是瞬发制的特例!我在做五子棋的时候,设置了一些标志,让人和电脑同步。人下棋的时候,重置标志,电脑就可以下棋了。下一次之后它会设置标志,所以不能继续玩,等着有人下棋。

如果我们取消这些标志,那么计算机就会根据当前的棋盘情况自己下棋。如果你能跟上它的节奏,你可能会赢。不行就输了!这样,五子棋就成了一款即时战略游戏。

所以我认为,对于机器人足球来说,只需要让电脑控制的所有球员轮换上场,让每个球员对场上的情况做出最正确的反应。电脑的速度很快。虽然是依次进行,但几乎无法察觉顺序,给人的感觉是同时进行的。其实操作系统的多线程也是这样实现的。

基于X86的cpu、多线程、多任务程序运行在保护模式下,其基本思想是对cpu时间进行切片,在这个时间片上处理任务A。不管是否完成,任务B必须在下一个时间片上处理,然后继续未完成的任务A。

但是还有一个问题。因为计算机的反应比人类快得多,如果设计一个像FIFA这样的人机交互游戏,很可能计算机已经计算了很多次它控制的所有对象,但它还没有反应过来。对于强调反应能力的即时游戏来说,这种思维速度的差距可能是无法接受的。在我看来,可以允许电脑暂停一段时间,比如500ms,比如1s(具体长度需要测试后才能得出)。

而且电脑停顿时间的长短也可以用来区分难易程度。难度越低,电脑暂停时间越长。当然,我这里说的暂停,并不是指计算机真的停止处理任何东西。计算机仍然需要根据预先设定的移动方向和速度计算出每个玩家的新坐标,并不断刷新以显示动画效果。只有每1s,才会有特殊反应(踢,偷等。)来改变运动的方向和速度。

2)机器人足球计算机中有23个物体需要计算机处理,似乎比五子棋复杂得多。但是真的需要不分青红皂白的对待23个对象吗?让我们看看真正的足球。我不太喜欢足球,也不懂足球的规则和战术。我只说我的感受。

对于球来说,虽然它随时都在运动,但抽象来说,它在场上的情况很简单:向某个方向运动,运动速度有多快,当前坐标,就三个要素。还有什么是哪一方控制的,谁踢的,不用也不应该考虑(这是符合oop思维的)。

让我们看看22名运动员。其实我们可以发现,只有最靠近球的球员才会做出相应的反应(包括运球/踢球、传球、接球、抢断和射门等。只有离球近的球员才会做到,即使防守的时候,也往往是防守球的球员,归根结底还是离球很近)。前场没见过球,后场球员都在争球(当然不考虑小动作:)。

所以离球远的球员只需要跑向球甚至暂时停下来(这个可以通过随机功能控制。影响随机值的是球员的积极性和离球的距离。积极的球员跑得更积极,跑得离球更近的球员跑得更积极。只有靠近球的球员才会特殊对待。经过这种细致的划分,整体算法思路更加清晰。

通过上面的分析,现在我们总结一下:在设计机器人足球的时候,我们可以用循环赛的方法,逐个处理22个球员和1个球。一般来说,处理方法是通过原坐标和事先确定的方向和速度计算出新的坐标。计算完所有对象的新坐标后,刷新屏幕显示动画效果。

每隔一段时间(或者几次之后),让电脑做一些特殊的操作(踢球、传球等。)在每个对象上。这些特殊操作的本质是改变23个物体的速度和方向,使物体的运动轨迹在随后的一段时间内发生变化。做特殊操作的时候,可以根据玩家序列号进行遍历。每个玩家需要做的是:

1.计算球员离球有多远。如果超过一定距离,就随意处理(比如上面说的,用random函数判断这个人是朝球跑还是停下来)。2.如果是靠近球的,那么就检查球的周围是否有更靠近球的球员(考虑到时间复杂度,不建议真的走遍整个球场,而是维护一个表格记录每个球员当前与球的距离)。

3.如果对方球员离球更近,可选的操作有:越来越近,抢断,等等(我不太懂足球,也不知道还能做什么)。随机数可用于确定要执行的操作。4.如果己方球员离球更近,可以断定此人持球。这时可选的操作是:移动到他身边准备接球,移动到对方球门前准备接球。

如果目前没有其他球员更靠近球,则可以断定此时球员正在持球。这时候就要调查有没有对方球员,自己的球员,离目标有多远等等。并进行传球、投篮、运球等。(没必要真的去计算别人和自己的距离。因为此时离球近,可以忽略。可以用别人离球的距离来表示。具体原理,踢球就行了:)。

这些操作相对简单,只要使用一些选择语句。当有多种操作可供选择时,可以用随机数来确定。玩家的各种属性都会影响随机数的值。

此外,也有一些例外:比如运动员跑出直线时,相互碰撞,触球等。即使不是常规处理特殊操作的时间,他们也必须立即对涉案玩家进行特殊操作,否则就是不真实,不合理。最后说一下球员和球的数据结构:{方向/速度/当前坐标。传球()/踢球()/射门()/接球()/抢断()。/Run()计算新坐标()}足球:

{方向/速度/当前坐标。计算新坐标()友:Player: Pass ()/Kick()。//或者做一个改变方向/速度的接口,让播放器里的函数可以调用这个接口}另外还需要一些表格来维护每个玩家离球的距离等信息,方便各种处理。另外,还有一些细节可能是玩游戏所必须的,但因为比较简单,这里就不分析了。

以上知识分享希望能够帮助到大家!