近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轴正方向建立标准取向直角坐标系。守门员的状态包括在这个坐标系下的两个向量——速度\vec{v}和位矢(位置)\vec{r},以及一个搜索状态标记——已用周期数g。\vec{r}经过(关于坐标轴/原点)对称后,对应的动作序列也可以经对称得出,不影响需要的周期数,故仅考虑\vec{r}在第三象限。
  (1) 转身
  转身体现为旋转\vec{r}
  转身面对最佳位置:由于转身时有速度,故应考虑在这个速度的影响消失后面对球,我认为这个速度只影响一个周期,因为若\vec{r}在x轴上,那么即使在y轴方向有0.16的速度也不足以影响需要的周期数。为了更精确的模拟守门员的决策,现在认为这个速度将影响l-g个周期。
  转身侧对最佳位置:转身侧对最佳位置没有积极意义,即转身侧对最佳位置永远不如转身面对最佳位置(以及向面对最佳位置方向转身)好,不考虑为侧对最佳位置而转身。举一种极端情况为例:考虑转身后\vec{r}落在y轴上,|\vec{v}|=0.16,方向为y轴正方向(转身前|\vec{v}|=0.4,方向为指向原点方向),若要求经过一次向y轴正方向加速就进入圆内,则此时|\vec{r}|\leq1.61,而转身不会改变|\vec{r}|,故无论怎样转身,转身后都有|\vec{r}|\leq1.61,如果这个转身不是向侧对最佳位置方向转身,而是向面对最佳位置方向转身,那么转身后\vec{r}与x轴的夹角应在30°以内,这时再向x轴正方向加速,100﹪进圆。下面是一个示意图(因没有趁手的工具,故只画了一个示意图,但几何位置关系没有错误):
no-need-to-turn-side-to-ball
  (2) 加速
  向x轴正方向加速:先使用最大加速度加速,若加速后位矢越过y轴,则计算使位矢不越过y轴的最大加速度,若此加速度为负,而之前有过正加速度加速,则认为这次加速可以经由减小正加速度抵消,即负加速度不增加周期数。根据Shi Ke以前的提示,这里做一个简单的多周期体力规划:(假设本周期用最大加速度加速,之后皆不加速,那么之后每个周期的位置都由惯性决定)若存在最小的i∊[1,l-g],使得经过i-1周期后位置在圆外,且经过i周期后位置在y轴右侧,那么本周期加速所用加速度由使第i周期位置恰好落在y轴上的速度算出(注意算出的加速度有可能为负):\vec{a}_x=-\frac{0.6\vec{r}_x}{1-0.4^i}-\vec{v}_x;否则用最大加速度加速。
  向y轴正方向加速:同向x轴正方向加速。
  以上三个动作即搜索的产生系统。裸搜自然是不行的,需要加剪枝和估价函数。
  可行性剪枝:若\lceil|\vec{r}|-1.3\rceil+g>l,则剪掉。
  估价函数:|\vec{r}|+g。每个周期|\vec{r}|最多减少1.0,一个状态转移到后继状态时g增加1,根据单调性条件,这个估价函数合理。

遗留问题

  上述分析的背景是认为守门员的聪明才智被局限在一个周期之内——即守门员根据本周期的情况算出一个理论最佳点,本周期的决策就是执行向这个点运动的最佳方案的第一步。比赛过程中,射门和扑球都不是在一个周期内决定的,既然本周期可以得出一个“理论最佳点”,那么下一周期同样可以得出一个点——所以,实际上这个守门员总是在执行“第一步”,于是整个决策过程就是多个周期的“最佳决策”糅合的结果,这个结果很可能在任何一个时刻看来,都是比较糟糕的。
  上面分析中转身只讨论了向两个目标方向做贪心的转身,有没有可能不做贪心转身而得出最佳决策?