新加速模型下守门员扑球决策分析
近2个星期分析了新加速模型下守门员扑球最佳决策,现在分析阶段即将结束,我把有关的内容写在这里,作为笔记,也作为供队友审查代码用的说明。新加速模型是指允许侧向加速的模型,而不是接受dash_angle_step参数的模型。需要指出的是,这里的分析是站在射门的角度,为预测对方守门员的行动而作的,不能作为己方守门员行动的指示。
这一篇分析不考虑随机误差的影响,考虑随机误差并得出概率的分析将写在“之二”里。
物理模型和参数
有关的模型:扑球在USTC_Tutorial第53页;加速在第56页,新加速模型在server代码player.cpp的第940行;转身在第58页。
守门员有关的参数有:dash_power_rate=0.006, player_decay=0.4, inertia_moment=0.5, catchable_area_l=1.2, catchable_area_w=1.0。由这些参数算出的将用到的数据是:最大正负向加速度——0.6,最大侧向加速度——0.15,扑球范围——半径1.3米的圆,每周期开始时最大速度——0.4。
问题描述
经过前期计算,可以得到守门员扑球的理论最佳位置,即守门员若不能在这个位置扑到球,就无法扑到球了。这个理论位置的计算与运动模型无关,问题转化为,守门员用多少个周期可以跑到以最佳位置为圆心,半径1.3米的圆内。
解决方案
先估算一个绝对可以跑到的周期数l——0~2个周期转身+不停地向前加速,l将在后面多处用到。
对守门员可以做出的动作进行BFS。守门员可以做出两种类型的动作——转身和加速,在建立坐标系后,对这两类动作做具体分析。
以最佳位置为原点,以守门员身体方向为x轴正方向建立标准取向直角坐标系。守门员的状态包括在这个坐标系下的两个向量——速度
和位矢(位置)
,以及一个搜索状态标记——已用周期数g。
经过(关于坐标轴/原点)对称后,对应的动作序列也可以经对称得出,不影响需要的周期数,故仅考虑
在第三象限。
(1) 转身
转身体现为旋转
。
转身面对最佳位置:由于转身时有速度,故应考虑在这个速度的影响消失后面对球,我认为这个速度只影响一个周期,因为若为了更精确的模拟守门员的决策,现在认为这个速度将影响l-g个周期。
在x轴上,那么即使在y轴方向有0.16的速度也不足以影响需要的周期数。
转身侧对最佳位置:转身侧对最佳位置没有积极意义,即转身侧对最佳位置永远不如转身面对最佳位置(以及向面对最佳位置方向转身)好,不考虑为侧对最佳位置而转身。举一种极端情况为例:考虑转身后
落在y轴上,
,方向为y轴正方向(转身前
,方向为指向原点方向),若要求经过一次向y轴正方向加速就进入圆内,则此时
,而转身不会改变
,故无论怎样转身,转身后都有
,如果这个转身不是向侧对最佳位置方向转身,而是向面对最佳位置方向转身,那么转身后
与x轴的夹角应在30°以内,这时再向x轴正方向加速,100﹪进圆。下面是一个示意图(因没有趁手的工具,故只画了一个示意图,但几何位置关系没有错误):

(2) 加速
向x轴正方向加速:先使用最大加速度加速,若加速后位矢越过y轴,则计算使位矢不越过y轴的最大加速度,若此加速度为负,而之前有过正加速度加速,则认为这次加速可以经由减小正加速度抵消,即负加速度不增加周期数。根据Shi Ke以前的提示,这里做一个简单的多周期体力规划:(假设本周期用最大加速度加速,之后皆不加速,那么之后每个周期的位置都由惯性决定)若存在最小的i∊[1,l-g],使得经过i-1周期后位置在圆外,且经过i周期后位置在y轴右侧,那么本周期加速所用加速度由使第i周期位置恰好落在y轴上的速度算出(注意算出的加速度有可能为负):
;否则用最大加速度加速。
向y轴正方向加速:同向x轴正方向加速。
以上三个动作即搜索的产生系统。裸搜自然是不行的,需要加剪枝和估价函数。
可行性剪枝:若
,则剪掉。
估价函数:
。每个周期
最多减少1.0,一个状态转移到后继状态时g增加1,根据单调性条件,这个估价函数合理。
遗留问题
上述分析的背景是认为守门员的聪明才智被局限在一个周期之内——即守门员根据本周期的情况算出一个理论最佳点,本周期的决策就是执行向这个点运动的最佳方案的第一步。比赛过程中,射门和扑球都不是在一个周期内决定的,既然本周期可以得出一个“理论最佳点”,那么下一周期同样可以得出一个点——所以,实际上这个守门员总是在执行“第一步”,于是整个决策过程就是多个周期的“最佳决策”糅合的结果,这个结果很可能在任何一个时刻看来,都是比较糟糕的。
上面分析中转身只讨论了向两个目标方向做贪心的转身,有没有可能不做贪心转身而得出最佳决策?
