美文网首页爱奶牛的猫的收藏品每周500字有意思的文章
关于两个侦探互相跟踪的脑洞——用计算机模拟暴力求解

关于两个侦探互相跟踪的脑洞——用计算机模拟暴力求解

作者: 易江禾 | 来源:发表于2015-04-06 11:04 被阅读941次

前两天看到一篇一个有趣的假设,里面提了一个问题:

请两位互相陌生的侦探A和B,然后让A跟踪B,B也跟踪A,而且他们是不知道相互跟踪这件事,那接下来会发生什么有趣的事儿?请各位脑洞大开,补充各种细节吧。

我不是侦探推理小说迷,所以没法从这个角度去开脑洞。不过,我倒是冒出一个想法,就是给这个问题建个模,写一个简单的程序跑一跑,看看能模拟出什么有意思的结果出来。

先说结论吧:如果我们采用二维随机行走的模型来描述侦探的行为,并且假设这两个侦探的跟踪能力完全相同,那么他们必然会在跟踪的过程中互相靠近,直到不能再近为止。互相跟踪,最后在一起,这不正是大家喜闻乐见的结局么?

本文用到的都是最基本的概率论与数学模型,不愿意看这方面内容的可以直接拉到后面看模拟结果。

建模与设定

这个模拟采用的随机游走模型是这样设定的:在一个二维平面上,一个人从原点(0,0)出发,每次以固定步长向任意方向随机走出一步。每一步选择的方位角是一个均匀分布的随机变量。这样,在N步之后,此人的最终位置作为一个随机变量,满足二维的正态分布。期望值为0,标准偏差则随步数N的增加而增加。这个结果可以很容易推导出来,这里就不写了。还是把模拟的结果画出来比较直观一些。

从原点出发,500步以后的位置分布

也就是说,在这种二维随机行走中,无论走了多少步,这个人最终位置的期望值依然在原点,没有移动。步数越大,只是导致标准差变大了大。

接下来,假设两个侦探的行为都符合这样的随机行走,不过,要加上一个“跟踪”行为。

真实世界的跟踪是个很复杂的活动,为了把事情充分地简化,我选择这么建模:

  1. 跟踪在一个无穷大无障碍的平面上进行,
  2. 跟踪成功与否仅由两者之间的距离决定。如果两者距离大于某个最大值R,则目标丢失,该侦探跟踪失败。

于是,侦探必须根据目标的运动相应的改变自己的位置,以保证自己永远处于以目标为圆心,以R为半径的圆形区域内。所以,侦探的跟踪能力就可以用R来描述。R越大,跟踪能力就越强。

加上这样定义的跟踪行为以后,我们的随机游走模型就要加以限制——选择每一步的方向的时候,要排除所有走出跟踪范围导致跟踪失败的方向。显然,正是这种倾向性导致了两个侦探的互相靠近。一个明显的推论就是,如果侦探的跟踪能力无穷大,也就是R无穷大,那么这种跟踪和一个人的随机行走没有任何区别。

至于为什么要用二维随机游走来描述侦探的行为,也很好理解。既然是跟踪,就不应该是两个人站在原地不动死盯着对方看,总得在保持一定距离的前提下装出一副随便逛逛的姿态免得被怀疑。而每一步随机行走的步长(step)也有很好的现实对应:如果目标移动范围很小,侦探就不用太在意,无须采取行动。而一旦目标移动了比较大的距离,就会触发侦探作出反应。这个触发反应的最小移动范围就是step。

有一点需要说明,现实中侦探与目标的位置是连续变化,瞬时调整的。在模拟的过程中,需要将这个过程分立化。跟踪的过程被拆解为“你走一步,然后我看到你的新位置,确定新的跟踪区域,然后在新的区域内再走一步”的方式交替进行。

最后,选定初始条件,只要让两者的初始位置处于彼此跟踪范围内即可,坐标系以两者连线为x轴,连线中点为圆点。

好了,以上就是全部设定。然后就可以让程序跑起来了。

模拟结果

设两个侦探Alice和Bob,初始位置分别为x=-10和x=10。先来看看如果两位侦探的跟踪水平完全相同会怎么样。让我们设他们的最大跟踪距离都是R=40,随机行走步长step=1。

首先来看看在跟踪进行一定步数之后,他们走过的轨迹都是什么样子。比如,一次跟踪进行了10000步,两人走出来的轨迹大概就是下图这样(图中A和B分别是Alice和Bob的初始位置;Alice轨迹为蓝色,Bob为黄色):


初始距离20, R=40,10000步之后轨迹示例

显然,计算单次的跟踪路径除了证明这两个侦探真的很辛苦以外,并不能提供什么有用的信息。所以,让我们将跟踪重复进行N次,来看看当N取值很大的时候,他们的“平均路径”是什么样的。

下图是所有设定不变,将上面的跟踪重复20000次,将所有路径进行平均以后的结果:

初始距离20, R=40,10000步,对20000次跟踪取平均之后的轨迹

看,大家喜闻乐见的结局果然出现了。两位侦探最终相会在他们初始位置连线的中点,相爱相杀。

其实他们要相会也远不需要走10000步那么多。让我们来看看他们前进n步之后所处位置之间距离的期望值随步数n的变化情况。(如果没有跟踪行为,这个期望值将是一个常数)。还是对20000次跟踪取平均:

第n步时的平均距离

可见,他们的距离随步数增加迅速减小。大概到4000多步的时候,距离就几乎为零,这之后就基本上在原点附近小范围浮动,不再有大的变化。

也就是说,由于跟踪范围R是一个有限值,必然导致随机行走的过程中剔除了那些会导致跟踪失败的方向,于是平均下来,两者必然越走越近。

再将第n步时两者的位置分布画出来,更直观地看一下随着步数n的增长两者位置分布的变化情况。

  1. n=1,也就是他们走出第一步以后的位置分布。我选取的参数保证了这一步无论走么走都不会走出跟踪范围,因此位置分布自然是一个以初始位置为圆心,步长为半径的圆圈。


    1步以后的位置分布
  2. n=10。随着步数增长,正态分布开始显现。不过肉眼还看不出来它们的中心有相互靠近的迹象。


    10步以后位置分布
  3. n=100。 到100步的时候,可以看出分布中心沿着x轴移动,两者之间的靠近与重叠已经很明显了。


    100步以后位置分布
  4. n=5000。 到了5000步,他们的位置分布基本上已经完全重叠,不可分辨了。


    5000步以后位置分布

于是,我们可以得出结论,从相隔一定距离的两点出发,两位侦探的行动必然导致他们互相靠近,直到他们的位置分布收敛到一个以同一点为中心的平凡的二维随机游走为止。这一点,对于两个水平相同的侦探来说,就是初始位置连线的中点。

接下来可以看看当两位侦探水平不同的时候情况会有什么变化。这里我只关心他们的平均路径。

还是先摆结论:当两个侦探水平不同时,他们最终依然会相遇,只不过相遇的位置会偏向那个跟踪范围更大、水平更高的侦探。

比如,当Alice的跟踪范围依然为Ra=40,而Bob只比他差一点点,比如Rb=39.5的时候,差别就很明显了。

10000步后轨迹平均。Ra=40, Rb=39.5

你看,水平只比人家差一点点,却要比人家多跑不少路。

如果水平再差得多一点,就更有意思了。下图是Ra=40,Rb=30的结果。

10000步后轨迹平均。Ra=40, Rb=30

Alice水平高,于是可以运筹帷幄之中,几乎只要在自己家门口转转就行了。Bob水平差一截,为了不丢失Alice这个目标,就得一路跟踪到人家家门口去才行。

这些结果也都很合情理。

只要愿意,我们还可以加上其他限制条件。比如要求跟踪距离不能太近,否则会被发现等等。这里就不继续做了。

其实从数学角度来说,这是个很简单的问题。从概率论入手进行理论推导大概也就是一道作业题的难度,而我所做的模拟在简书上众多的程序员眼里也只能算是小儿科。不过,这种用数学建模、暴力计算、强行插入一个侦探推理问题的感觉还是很爽的。应该也算有点脑洞了吧?哈哈。

相关文章

  • 关于两个侦探互相跟踪的脑洞——用计算机模拟暴力求解

    前两天看到一篇一个有趣的假设,里面提了一个问题: 请两位互相陌生的侦探A和B,然后让A跟踪B,B也跟踪A,而且他们...

  • 关于分治法

    任何一个可以用计算机求解的问题所需的计算时间都与其规模有关。问题的规模越小,越容易直接求解,解题所需的计算时间也越...

  • 一个有趣的假设

    请两位互相陌生的侦探A和B,然后让A跟踪B,B也跟踪A,而且他们是不知道相互跟踪这件事,那接下来会发生什么有趣的事...

  • 浏览更多/最多的文章数

    题目 解法 暴力求解 暴力是求解一切算法最好用的方法,这道题暴力求解很容易,直接两层循环解决 栈求解 栈求解的好处...

  • 浅谈计算机视觉的应用与发展

    姓名:杜敏刚 学号:17021211253 【嵌牛导读】计算机视觉是使用计算机及相关设备对生物视觉的一种模拟...

  • 孩子学编程,培养的应该是计算思维

    计算思维 计算思维是运用计算机科学的基础概念进行问题求解、系统设计、以及人类行为理解等涵盖计算机科学之广度的一系列...

  • “罪恶克星”张学友,AI人脸识别新职业

    “人脸识别”技术属于计算机视觉的应用。计算机视觉是指用计算机来模拟人的视觉系统,实现人的视觉功能,以适应、理解外界...

  • 《明星大侦探》:好于90%的国产恐怖片!

    你觉得自己很聪明?呵呵,你没看过《明星大侦探》吧? 你觉得自己脑洞很大?呵呵,没看过《明星大侦探》吧? 你觉得自己...

  • 关于穿越的两个脑洞

    1 拯救疫情 闲着无聊,我开了一下脑洞,想了一个穿越回过去拯救疫情的电影剧情: 主人公穿越回40天前的武汉,在微博...

  • 关于脑洞

    上文,从一个高压锅而打开的一个脑洞。其实最开始是个刑侦走向的,偏情感的想法的,可是我智商不足以去想一个偏完美的犯罪...

网友评论

  • Esmool:高中时有个物理题,这么说的: 四个物体位于正方形四个顶点上,分别朝位于自己逆时针方向最近的一个物体运动,运动速率是 1m/s, 正方形边长是 1m, 问多久以后这些物体相遇. 文章里讲的和这个问题形式上相似, 如果不想求运动轨迹的话, 直接以相对的视角在活动的坐标系上看, 其实四个物体走的都是匀速直线运动, 结论可以脑补的. 至于其它那些蒙特卡洛这些, 算是锦上添花吧~~~
  • granton_zhuang:一直在思考,谁先动
  • LostAbaddon:@易江禾 等几个月后我有空了我也来做一个玩玩!
  • 易江禾:@我的名字叫清阳 对的,倒数第二段我也提到这个了,只不过没继续做下去了。
  • 我的名字叫清阳:这个假设的失败条件还得加一个:在R小于某值时任务失败。这样的话,成功的定义大概是R保持在一个范围内。

    我是这样想的,所谓的跟踪,是不能暴露的。

    然后,想到了电影《史密斯夫妇》
  • 易江禾:@季鹰2012 其实程序是用C写的,只不过拿Mathematica作了点图。
  • 易江禾:@子凌 嗯,其实本质上就是自己在跟踪自己,让我想起两条互相咬尾巴的蛇
  • 季鹰2012:又一个Mathamatica建模。。。
  • 子凌:看完了,从建模角度考虑深入剖析这个问题还是非常新颖的。先赞一个。
    从看客的角度看,大家还是比较愿意看到各种高智商反侦查反跟踪或者囧人囧事,哈哈。
  • 易江禾: @LostAbaddon 嗯,的确有意思。我做的其实更像拿个雷达三百六十度不停扫描
  • 山巅一寺:有点意思
  • LostAbaddon:@易江禾 不过,这样修改以后倒是可以出现A的能力虽然强但是完全没发现B就更在自己身后的意外场面哦,想想就感觉很有意思呢~~~
  • LostAbaddon:我突然想到这样一个模型了:
    现在侦探不是一个点,而是一个矢量。跟踪成功率等于AB连线与A和B各自矢量方向夹角的余弦。也就是说,如果A正对着B,那么A跟踪B的成功率最大,而B如果此时背对着A,那么B跟踪A的成功率此时达到最小。
    而A和B各自的跟踪能力取决于两个因素,一个是探知范围R,一个是正前方的张开角度Q。
    写出来就是这样的:
    有效探知范围=R*max(cosq-cosQ,0)
    其中q是AB连线与A或B本身所指向方向的夹角,Q是可以探知的角度范围。
    这样大概会更有意思吧~~~

    不过这样似乎模型就变得非常复杂了。。。。
  • 未知用户sal:orz 这才叫做命运の羁绊啊(误
  • LostAbaddon:@易江禾 我擦!牛啊!!!
  • 易江禾:@子凌 哇哈哈,这个脑洞开得还行吧? @LostAbaddon

本文标题:关于两个侦探互相跟踪的脑洞——用计算机模拟暴力求解

本文链接:https://www.haomeiwen.com/subject/vkraxttx.html