湖边野猫追捕水中老鼠,为什么速度比低于 4.6033 就逮不到老鼠?

在一个半径为 1 的圆形湖泊圆心处有一只老鼠,湖边有一只不会游泳的猫,猫在岸上跑动的速度是老鼠游泳速度的 a 倍。老鼠在岸上跑得比猫快,所以只要老鼠游到岸边时不被猫逮住就算老鼠赢(这里暂时假设猫和老鼠都是数学意义上的没有大小的点,必须两点重合才算猫逮住老鼠),如果老鼠上不了岸算猫赢。问:a 取何值时老鼠赢?取何值时猫赢?
为了简便,忽略猫和老鼠加速减速的时间,即假设猫和老鼠可以瞬间变速。

最近很多人讨论这个经典问题(遗憾的是我不知道这个问题的名称,因此没查到相关资料),该问题正确答案多少有些反常识,网上的讨论中有人算出了 4.6033 的临界值但并未给出严谨可行的逃跑策略,有人则怀疑临界值不是 4.6033,这就是写这篇文章的起因。

首先注意,我们总假设猫总在岸边(即半径为 1 的圆周)行动,因为离开岸边除了浪费角速度以外毫无意义。

普通的上界

很容易想到 a<\pi 时老鼠必赢,因为处在圆心的老鼠只要沿猫的反方向直线冲刺就行了。

稍加思考可以大幅改进老鼠获胜时 a 的上界。老鼠可以采取一种“先绕小圈再直线冲刺”的策略:

  1. 老鼠先在半径为 r<1 的同心圆周上绕圈。我们假设 r<1/a,则老鼠绕圈的角速度大于猫在岸边绕圈的角速度,因此有限时间内老鼠可以把猫甩在反方向的位置,此时湖心在老鼠和猫的连线上;
  2. 老鼠沿猫的反方向直线冲刺,老鼠游动的距离等于 1-r,猫要抓住老鼠需要跑动长度为 \pi 的半圆弧,只要 a(1-r)<\pi 就能保证老鼠赢了。

上述两个条件可以合写为 1-\pi/a<r<1/a,因此当且仅当 1-\pi/a<1/a 时老鼠能通过以上策略获胜,解得 a<\pi+1

到了这一步,看上去 \pi+1 的临界值不能改进了:当老鼠按照第一步卡到猫的对侧位置时,似乎老鼠只能按照第二步沿最短路向岸边跑,因为这样可以保证老鼠跑路最短而猫跑的路程最长;如果沿最短路向岸边跑都不行,那走别的路线也不可行。实际上并非如此,因为最短路虽然能最快到达岸边,但却完全没有机动性,也许老鼠虽然不沿直线跑,但是中途根据猫追击的方向调整自己逃跑的方向,反而能成功上岸呢?

一个不严谨的推导

当然,老鼠刚跑出 1/a 半径范围(这个范围内老鼠绕圈比猫快)外面的时候大概还是要沿径向跑的,因为猫此时跟老鼠的方位角相差 180 度,往两个方向追都是有可能的。

但是老鼠跑出一小段距离之后,猫总要选一个方向追。不妨设猫沿逆时针方向追(顺时针情况一样),则此时老鼠往逆时针稍微偏一点方向,猫基本上还是要继续沿逆时针方向追,因为改成顺时针追要跑更远的路。也许猫会想改成顺时针追,这样不正好更容易逮到往逆时针方向偏的老鼠吗?但是老鼠又不瞎,等猫沿顺时针跑路越过老鼠与圆心所在直线时,老鼠就改成往顺时针方向偏了。所以猫要想追上老鼠,只能寄希望于继续逆时针绕圈能赶到老鼠上岸了。

因此我们假设猫总是沿逆时针方向追,老鼠总沿逆时针方向偏;又因为老鼠把猫卡在对侧的半径可以(从左侧)任意接近 1/a,沿径向向外跑到的半径也可以(从右侧)任意接近 1/a,于是我们干脆假设老鼠的起始位置与湖心距离等于 1/a,并且湖心在老鼠和猫的连线上。

以湖心为极点建立极坐标系,老鼠初始位置取为 (1/a,0),猫的初始位置就是 (1,-\pi)。假设老鼠预备的上岸点为 (1,\theta),既然固定猫只能沿逆时针一路追过去,显然老鼠走直线最好。但是当 \theta>\cos^{-1}(1/a) 时,老鼠起点与上岸点的连线会穿过半径为 1/a 的圆内,这是不允许的(如果老鼠自己跑进半径 1/a 圆内,猫完全可以以静制动,反正绕圈绕不过老鼠,等老鼠再次跑出这个圆再追也不晚),此时老鼠为了不进这个圆,就必须沿这个圆逆时针绕一段再沿切线游向岸边;但这是没有意义的,因为老鼠在半径 1/a 圆周上绕圈恰好等于猫的角速度,绕圈对躲避猫的追击没有任何作用。因此我们不妨假设 \theta\le\cos^{-1}(1/a)

另一方面,既然假设老鼠往逆时针方向偏,自然有 \theta\ge 0。容易列出老鼠能赶在猫追来之前到达上岸点的条件:

a\sqrt{(\cos\theta-\frac{1}{a})^2+\sin^2\theta}<\theta+\pi.

看起来这个不等式不容易解,实际上将右边移到左边再对 \theta 求导,会发现导数恒小于等于零,说明只要把 \theta 的最大取值代入看不等式是否满足就行了。代入 \theta=\cos^{-1}(1/a) 得到

\sqrt{a^2-1}<\cos^{-1}\frac{1}{a}+\pi,

移项得到

\sqrt{a^2-1}-\cos^{-1}\frac{1}{a}<\pi,

左边是关于 a\ge 1 的增函数,a=1,+\infty 时左边分别取 0,+\infty,从而若将不等号改为等号则有唯一正解,记为 A(用数学软件容易算出 A\approx 4.6033),而不等式的解就是 a<A。还可以立刻看出:只要 a<A,位于极坐标 (1/a,0) 的老鼠就可以通过沿切向直线游到岸边的方法避免被逆时针追击的猫逮住。

真正严谨的逃跑路线

很明显之前论证中的假设太理想化了。例如,凭什么可以假设老鼠的起始位置与湖心距离等于 1/a ?毕竟我们知道老鼠要绕圈把猫卡在对侧,半径一定要小于 1/a 而不能相等。另外,老鼠如果一开始就沿切线按逆时针游,万一猫一开始就按顺时针跑怎么办?这样的论证难以使人信服。

接下来我们准备明确给出 a<A 时老鼠的一个逃跑策略。当然为了避免一些麻烦,我们总假设 a>2,当 a\le 2 时直接用之前的简单策略就可以了。

首先假设老鼠跑到了 1/a 半径圆(后面称之为等速圆,因为在此圆上老鼠绕圈的角速度等于猫的角速度)外的任意一点,极坐标为 (r,\theta),其中 r>1/a。根据上一节的推导,我们猜测老鼠沿等速圆切线的反方向逃跑是可行的。从老鼠所在位置向等速圆可作两条切线,哪条切线离猫比较远就沿哪条线跑。

为了确定老鼠能否逃跑,引入安全区和危险区的概念。如上图,大圆表示湖边,小圆表示等速圆,老鼠位于点 M。(这里我们把 MN 方向切线叫做逆切线,因为它向逆时针方向倾斜;另一条切线叫做顺切线

假如猫距离老鼠太近,以至于老鼠沿逆切线逃跑都无法避免被逆时针绕圈的猫追捕,则猫的位置肯定算危险区;由对称性,如果老鼠沿顺切线逃跑都无法避免被顺时针绕圈的猫追捕,猫的位置当然也算危险区。

要算出危险区的范围并不难,首先容易看出

\angle MON=\cos^{-1}\frac{1}{a}-\cos^{-1}\frac{1}{ar},

于是点 N 的辐角就是 \theta+\cos^{-1}(1/a)-\cos^{-1}(1/ar)。另外可以算出

\overline{MN}=\sqrt{1-\frac{1}{a^2}}-\sqrt{r^2-\frac{1}{a^2}},

老鼠跑过距离 MN 的时间内,猫跑过的路程是 a*MN,跑过的角度也等于 a*MN。要求猫逆时针跑过这么多角度恰好位于点 N,可以算出猫的初始辐角为

\theta+\cos^{-1}(1/a)-\cos^{-1}(1/ar)-a(\sqrt{1-\frac{1}{a^2}}-\sqrt{r^2-\frac{1}{a^2}}).

若记 f(x)=\sqrt{x^2-1}-\cos^{-1}(1/x)(x\ge 1),g(r)=f(a)-f(ar),则上述数值可以记为 \theta-g(r),这是危险区的左端点;由对称性,危险区的右端点等于 \theta+g(r)。(这里的左右是针对实数轴顺序而言的。)

定义1 若老鼠位于坐标 (r,\theta),其中 1/a<r\le 1,定义危险区为闭区间

[\theta-g(r),\theta+g(r)],

其中 g(r) 的定义如前所述。危险区以外的辐角区域称为安全区

之前已经指出 f(x) 在定义域内非负且单调递增(x=1 时刚好 f(x)=0),从而 g(r) 单调递减;对于边界值我们知道

g(1/a)=f(a)-f(1)=f(a)<\pi,g(1)=0,

f(a)<\pi 是因为 a<A

这说明即使当 r=1/a 时,安全区长度也是正的;随着 r 的增大,危险区长度逐渐减小,当 r=1 时危险区缩小成一个点。

危险区最重要的性质是下面的命题:

命题2 若老鼠沿逆切线向岸边游,则危险区左端点 \theta-g(r) 的增速是老鼠游速的 a 倍(换句话说,若老鼠沿逆切线向岸边游了距离 d,则危险区左端点将增加 ad)。

类似地,若老鼠沿顺切线向岸边游,则危险区右端点 \theta+g(r) 的减速是老鼠游速的 a 倍(换句话说,若老鼠沿顺切线向岸边游了距离 d,则危险区右端点将减少 ad)。

证明很容易就不写了(其实从危险区的定义就能直接看出)。

其实从命题 2 已经能看出老鼠逃跑计划的端倪了:由于当 r=1/a 时安全区长度是正的,老鼠可以找一个略小于等速圆的圆和一个略大于等速圆的圆,在小圆绕圈绕到猫对面之后转移到大圆,转移路程压得足够短使猫仍在安全区。接下来老鼠总沿等速圆切线向外游,当猫逼近危险区左端时沿逆切线游,猫就永远追不上危险区左端;当猫逼近危险区右端时沿顺切线游,猫就永远追不上危险区右端,这样老鼠游着游着就安全上岸啦。

为了把老鼠逃跑策略做得更“强壮”一些,我们补充定义警戒区的概念。

定义3 若老鼠位于坐标 (r,\theta),其中 1/a<r\le 1,定义逆警戒区顺警戒区分别为区间

[\theta-g(r)-\varepsilon,\theta-g(r)),(\theta+g(r),\theta+g(r)+\varepsilon],

其中 \varepsilon=(\pi-f(a))/2。换句话说,警戒区就是危险区两端外侧长度为 \varepsilon 的区域。

注意到 g(r)\ge g(1/a)=f(a),取这个 \varepsilon 可以保证两个警戒区不会叠在一起,中间还剩下一块安全区。

下面给出老鼠具体的逃跑策略。

老鼠的逃跑策略

1)记 \delta=\varepsilon/(3a)。老鼠首先在半径为 1/a-\delta 的位置绕圈,由于老鼠角速度比猫快,老鼠可以将猫甩在对侧,即老鼠与猫的连线经过湖心。

2)老鼠沿径向向外游动 2\delta 距离。

注意老鼠游完 2\delta 距离之后猫必然在警戒区外。这是因为,不妨设老鼠所在半径的辐角为 0,老鼠游完 2\delta 距离后与圆心相距 r=1/a+\delta,此时危险区和警戒区的并集为

[-g(r)-\varepsilon,g(r)+\varepsilon],

而猫初始时辐角为 \pi(因为被老鼠甩在对侧了),在这一步猫可以跑动 2a\delta=(2/3)\varepsilon 弧度,从而猫能跑到的位置一定落在区间

[\pi-\frac{2\varepsilon}{3},\pi+\frac{2\varepsilon}{3}]

中。由 \frac{5\varepsilon}{3}<2\varepsilon=\pi-f(a)=\pi-g(1/a)<\pi-g(r)g(r)+\varepsilon<\pi-\frac{2\varepsilon}{3},从而以上两个区间互不重合,即猫必然在警戒区及危险区之外。

3)老鼠沿逆切线向外游,过程中若猫碰到顺警戒区端点 \theta+g(r)+\varepsilon,则老鼠立刻改为沿顺切线向外游;若猫碰到逆警戒区端点 \theta-g(r)-\varepsilon,则老鼠立刻改回沿逆切线向外游。

注意,根据命题 2,当老鼠沿逆切线向外游时,猫即使一直逆时针游也无法越过逆警戒区端点,从而不能进入危险区;反之也同理。另外老鼠在这一步游到岸边的总路程是固定的(因为改变顺逆切线不影响总路程),等于 \sqrt{1-1/a^2}-\sqrt{(1/a+\delta)^2-1/a^2}。还可以证明:

命题4 猫连续两次碰到警戒区端点的时间间隔有大于 0 的下界,这个下界只与 a 有关。

证明:我们选取恰当的时间单位使得老鼠速度等于 1,此时猫速等于 a。注意猫只要碰到顺警戒区端点,老鼠就改为沿顺切线向外游,此时猫要么跟顺警戒区端点保持同步,要么放弃同步掉头去追逆警戒区端点。换句话说猫一定是交替碰两边警戒区的端点。

设老鼠位于 (r,\theta) 时猫碰到顺警戒区端点 \theta+g(r)+\varepsilon,经过时间 t 后老鼠游到 (r',\theta'),猫碰到逆警戒区端点 \theta'-g(r')-\varepsilon,则猫跑过的角度为 |(\theta+g(r)+\varepsilon)-(\theta'-g(r')-\varepsilon)|,于是有不等式

|(\theta+g(r)+\varepsilon)-(\theta'-g(r')-\varepsilon)|\le at.

另一方面,老鼠总是沿顺或逆切线向外游,游动轨迹总是在等速圆之外,因此老鼠角速度一定小于 a,从而可列出不等式

|\theta-\theta'|\le at.

将以上两式相加,并利用绝对值不等式可得

g(r)+g(r')+2\varepsilon\le 2at,

从而有 t\ge(g(r)+g(r')+2\varepsilon)/(2a)\ge(2\varepsilon)/(2a)=\varepsilon/a,命题成立。

命题 4 说明在上述逃跑策略中,老鼠两次拐弯的时间间隔总是不小于某个与 a 有关的正的常数,说明老鼠只需要拐有限次弯就能上岸,这样老鼠的逃跑路线就不会陷入类似于芝诺悖论的争端。事实上即使限制老鼠只能以某个最小间隔(这个间隔可以事先由老鼠确定)观察猫的位置,老鼠依然能上岸,只要将之前的逃跑策略稍作改动:

老鼠的逃跑策略(改)

1)记 \delta=\varepsilon/(4a)。老鼠首先在半径为 1/a-\delta 的位置绕圈,虽然老鼠角速度比猫快,但因为老鼠不能一直观察猫的位置,不能保证恰好把猫甩在对面,此时只能退而求其次,保证老鼠和猫的辐角之差位于区间 [\pi-\varepsilon/4,\pi+\varepsilon/4] 内。

具体做法:老鼠观察的时间间隔取为

T_1=\frac{\varepsilon/2}{1/(1/a-\delta)+a},

老鼠每隔时间 T_1 观察猫的位置,若猫辐角减去老鼠辐角(记为 \alpha)小于 \pi-\varepsilon/4,老鼠就顺时针绕圈;若 \alpha 大于 \pi+\varepsilon/4,老鼠就逆时针绕圈。

假设上一次观察时 \alpha<\pi-\varepsilon/4,老鼠顺时针绕圈,则下次观察时 \alpha 的增量必满足

\frac{\varepsilon/2}{1/(1/a-\delta)-a}\le\Delta\alpha\le\frac{\varepsilon/2}{1/(1/a-\delta)+a},

\alpha 一定更接近区间 [\pi-\varepsilon/4,\pi+\varepsilon/4] 而不会越过该区间,接近的“步幅”有一个正的下界,因此老鼠一定能在有限时间内使得老鼠和猫的辐角之差落入区间 [\pi-\varepsilon/4,\pi+\varepsilon/4] 内。

2)老鼠沿径向向外游动 2\delta 距离。

这一步猫可以跑动  2a\delta=(1/2)\varepsilon 弧度,加上第一步的偏移量,一共 (3/4)\varepsilon 弧度,同理可知猫必然在警戒区及危险区之外。

3)老鼠沿逆切线向外游,同时以时间间隔 T_2=\varepsilon/(2a) 观察猫的位置。若观察到猫越过顺警戒区端点 \theta+g(r)+\varepsilon,则老鼠立刻改为沿顺切线向外游;反之若观察到猫越过逆警戒区端点 \theta-g(r)-\varepsilon,则老鼠立刻改回沿逆切线向外游。

这一步只需证明猫无法进入危险区就可以了。反设猫可以进入危险区,显然猫只能利用老鼠相邻两次观察之间的空当,趁老鼠没注意越过警戒区进入危险区。不妨假设猫是越过逆警戒区进入危险区的,上一次观察时老鼠在 (r,\theta),猫位于辐角 \Theta 的位置,此时猫还没进警戒区,即

\Theta<\theta-g(r)-\varepsilon,

下一次观察时老鼠在 (r',\theta'),猫在 \Theta',此时猫已经进入危险区,即

\Theta'\ge\theta'-g(r'),

两式相减可得

(\theta-\theta')-(\Theta-\Theta')>g(r)-g(r')+\varepsilon\ge\varepsilon.

(后一个不等号是因为老鼠总向外游,必有 r'>r,由单调性可得不等关系)

另一方面,老鼠和猫的角速度都不超过 a,从而

|\theta-\theta'|\le aT_2,|\Theta-\Theta'|\le aT_2,

相加并用绝对值不等式可得 \varepsilon<2aT_2=\varepsilon,矛盾。

这个策略不要求老鼠时时刻刻观察猫,只要以某个小时间间隔观察猫即可,应该没什么违反常识的问题。

结论

a<A 时老鼠可以从湖中逃脱,其中 A 是方程 \sqrt{A^2-1}-\cos^{-1}(1/A)=\pi 的正根,约等于 4.6033

当然若要证明 A 的确是临界值,还要说明 a>A 时猫能逮住老鼠,不过这里有一些很麻烦的事情(例如因为猫和老鼠都是质点,让一个质点抓住另一个质点本身就很麻烦;如果猫不能观察到老鼠的速度向量,事情还要更麻烦,也许不得不先严谨定义原问题再讨论问题),就先不写了,有空再补。

发布于 03-18