原标题:"非诚勿扰"的数学分析

前段时间在ADSP课上,作为课间小插曲,老师提出了一个微软的面试题,题目如下:

一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一。你乘坐电梯从一楼到十楼,每层楼电梯门都会打开一次,只能拿一次钻石,问怎样才能拿到最大的一颗?

课堂上有人给出了一种策略:前五层的钻石都不拿,而只是记录下最大的那一颗,在后面的五层里,只要遇见比所记录大的就拿。若没有大的,就拿最后一颗。还有人根据钻石的大小事服从正态分布进而进行参数估计,从而得出预期的最大的层数。其本质是根据已有的资料预计后面的大小从而做出选择。正好后来看到关于男生追求女生的一个数学模型《炮灰模型——女生选择追求者模型》,细想后发现此问题与微软这道面试题挺像的,可以将其模型和结论扩展到此问题上,并且结果也挺有意义的。首先从“炮灰模型”说起。

网上广泛转载的《炮灰模型——女生选择追求者模型》据说是清华大学的一个学生Geng Quan写的,后有网友的润色和加工和开拓。其所提问题个人觉得与数学家Merrill M.Flood在1949年提出的“未婚妻问题”类似。而这个问题的精妙之处在于,在微积分界叱咤风云的自然底数e,竟也出人意料地出现在了这个看似与它毫不相关的问题中。还是从我们熟悉的某类节目说起。

背景介绍

在每期由两个光头主持的很火爆的某节目上,面对一位位男嘉宾,24位单身女生要做出不止一次“艰难的决定”:到底要不要继续亮灯?把灯灭掉意味着放弃了这一次机会,继续亮灯则有可能结束节目之旅,放弃了未来更多的选择。

每一个女生都渴望找到自己心中的白马王子,找到自己一生的幸福。但是面对追求者们,女生应该是选择还是拒绝,怎样才能以最大的可能找到自己的Mr.Right呢?如果遇到了一个优秀的男生,应该接受还是拒绝呢?如果接受了他,万一下一个更好的话那可就亏大了;可如果为此而拒绝掉一个又一个好男人,也会面对着“过了这个村就没这个店”的风险。说不定白马王子们都已经擦肩而过,到最后就只剩下完全看不上的,当初的拒绝就明显得不偿失了。

由于没人能知道真正的缘分何时到来,没人能知道下一个来表白的男生会是什么样子,接受表白的时机早晚实在很难决定。而运用数学中概率论的知识对女生选择追求者的这一过程进行数学建模,可以得到女生选择的最优策略以作参考。

● ● ●

模型假设(Geng 和 Flood)

假设一个女生愿意在一段时间中和一位男生开始一段感情,并且在这段时间中有N个男生追求这位女生。说明:这里的N不是事先确定的,每个女生根据自身条件,并结合以往的经历和经验,猜测确定这个数字N。比如其它各方面都相同的两个女生,一般来说,漂亮女生就要比不漂亮的女生N值相对要大一些。在适合这个女生的意义上,假设追求者有好有坏,任何两个男生都是可以比较的,而且没有相等的情况。这样我们对这N个男生从1到N进行编号,其中数字越大表示越适合这个女生。这样在这段时间中,女生的Mr.Right就是男生N了。现在问题变成面对这N个追求者应该以怎样的策略才能使得在第一次选择接受的男生就是N的可能性最大,注意到这N个男生是以不同的先后顺序来追求这位女生的。

为了将实际复杂的问题进行简化,我们做出下面几条合理的假设:

1、N个男生以不同的随机顺序向女生依次表白,即在任一时刻不存在两个或两个以上 的男生向这位女生表白的情况的发生,而且任何一种顺序都是完全等概率的。

2、面对表白后的男生,女生只能做两种:接受和拒绝,不存在暧昧或者其它选择。

3、任一时刻,女生最多只能和一位男生谈恋爱,不存在脚踏多船的情况。

4、已经被拒绝的男生不会再次追求这位女生。

基于上述假设,我们想要找到这样一种策略,使得女生以最大的概率在第一次选择接受的那个男生就是N=Mr.Right。

模型建立

先考虑最简单的一种策略,如果一旦有男生向女生表白,女生就选择接受。这种策略下显然女生以1/N的概率找到自己的Mr.Right。当N比较大的时候,这个概率就很小了,显然这种策略不是最优的。

基于上面这些假设和模型,聪明的姑娘会想到一个好办法:先和前面几个男生玩玩,试试水深;大致摸清了男生们的底细后,再开始认真考虑,对于最先表白的M个人,无论女生感觉如何都选择拒绝;以后遇到男生向女生表白的情况,只要这个男生的编号比前面M个男生的编号都大,即这个男生比前面M个男生更适合女生,那么女生选择接受,否则选择拒绝。从数学模型上说,就是先拒掉前面M个人,不管这些人有多好;然后从第M+1个人开始,一旦看到比之前所有人都要好的人,就毫不犹豫地选择他。不难看出,k的取值很讲究,太小了达不到试的效果,太大了又会导致真正可选的余地不多了。这就变成了一个纯数学问题:在男生总数N已知的情况下,当M等于何值时,按上述策略选中最佳男生的概率最大?

下面以N=3为例说明:

三个男生追求女生,共有六种排列方式:

123,132,213,231,312,321

如果女生采用上述最简单的策略,那么只有最后两种排列方式选择到Mr.Right,概率为2/3!=1/3。

如果女生采用上面我们提出的策略,这里我们取M=1,即无论第一个人是否优秀,女生都选择拒绝。然后对于之后的追求者,只要他比第一个男生更适合女生就选择接受,否则拒绝。 基于这种策略,“132”、“213”、“231”这三种排列顺序下女生都会在第一次做出接受的选择时遇到“3”,这样我们就把这种概率增大到3/3!=1/2。

现在我们的问题就归结为,对于一般的N,什么样的M才会使这种概率达到最大值呢?(在这种模型中,前面M个男生就被称为“炮灰”,无论他们有多么优秀都要被拒绝)。

根据上面的模型假设,我们先找到对于给定的M和N(1,女生选择到Mr.Right的概率的表达式。

把1到N个数字进行排列共有N!种可能。对于某个固定的M,如果最适合的人出现在了第P个位置(M

当数字N出现在第P位置(M≤N),如果使上述策略在第一次选择接受时遇到的是N,排列需要满足下面两个条件:

1、N在第P位置

2、从M+1到P-1位置的数字要比前M位置的最大数字要小

考虑所有可能的P,我们便得到了试探前M个男生之后能选中最佳男生的总概率P(M):

模型求解

这个问题可以方便的通过计算机进行数值求解。

用x来表示M/N的值,并且假设N充分大,则上述公式可以写成:

对-x·lnx求导,并令这个导数为0,可以解出x的最优值,它就是欧拉研究的神秘常数的倒数——1/e!即此时M=N/e。

结果分析:由上述分析可以得到如下结论:为了使一个女生以最大的概率在第一次选择接受男生时遇到的正是Mr. Right,女生应该采用以下的策略:

拒绝前M=[N/e]或者[N/e]+1个追求者,当其后的追求者比前M个追求者更适合则接受,否则拒绝。

也就是说,如果你预计求爱者有 n个人,你应该先拒绝掉前n/e个人,静候下一个比这些人都好的人。假设你一共会遇到大概30个,就应该拒绝掉前30/e≈30/2.718≈11个求爱者,然后从第12个求爱者开始,一旦发现比前面11个求爱者都好的人,就果断接受他。由于1/e大约等于37%,因此这条爱情大法也叫做37%法则。

不过,37%法则有一个小问题:如果最佳人选本来就在这37%的人里面,错过这37%的人之后,她就再也碰不上更好的了。但在游戏过程中,她并不知道最佳人选已经被拒,因此她会一直痴痴地等待。也就是说,女生将会有37%的概率“失败退场”,或者以被迫选择最后一名求爱者的结局而告终。

37%法则“实测”!

37%法则的效果究竟如何呢?我们在计算机上编写程序模拟了当n=30时利用37%法则进行选择的过程(如果MM始终未接受求爱者,则自动选择最后一名求爱者)。编号越小的男生越次,编号为30的男生则表示最佳选择。程序运行10000次之后,竟然有大约4000次选中最佳男生,可见37%法则确实有效。

计算机模拟10000次后得到的结果

不知道了解此问题的女生,会不会多了一种分手的理由:不好意思,你是那37%的人⋯⋯对于男生,该模型残酷的,指出了炮灰存在的现实意义,正如伟大哲学家萨特所说“存在即是合理”,炮灰的不可避免性也许是对已经和即将成为炮灰的男生的宽慰。不过,该模型的量化指标都是采自女生主观臆断,各个指标的合理性希望广大姑娘慎思之。

● ● ●

微软钻石问题

是时候回到原问题——“微软钻石题”上了。我们可以把每个钻石看做是前来表白的男生,姑娘坐电梯上楼对其进行选择,这样该问题就可以化为姑娘选择最佳追求者的问题了。即有10个追求者,要求姑娘拒掉的男生的人数M为多少时,才可以以最大概率找到Mr.Right?

因此将N=10代入(1)式,由于是离散化的且N不是很大,我们可以用遍历搜素进行求值,当然本问题用手工计算或计算器计算下就好了。经过计算可知M=3。

那么对于较大的N,我们给出MATLAB的结果:

仿真后可得随着N的增长,按此方案选择最优值在1/e附近。

结论:因此对于微软钻石选择问题的策略是:前3层都不拿钻石,并记录下最大的钻石的大小,然后从第四层开始,只要遇到比前三层都大的钻石就拿。

结论推广与讨论

1、众所周知生活中涉及到感情的事情是很复杂的,而且也是很微妙的,把所有可能影响的因素都考虑到几乎是不可能的。不过也说明了数学的强大。

2、设女性最为灿烂的青春为18-28岁,在这段时间中将会遇到一生中几乎全部的追求者(之前之后的忽略不计),且追求者均匀分布,则女性从18+10/e=21.7即22岁左右开始接受追求对自己最有利,这告诉我们,想谈恋爱找大四或研一的。推而广之,若只考虑时间段研究生2.5年的话,则T/e=0.9197。也就是说,对于研究生,男生表白的最佳时刻在第二个学期的期末。若不考虑进入实验室后狭小的圈子的研二阶段,那么T=1/e=0.367.莫非是这学期12月份?

3、在文章中只考虑了N个男生表白的先后顺序是完全随机的,并没有考虑相邻两次之间的时间隔。

如果把时间因素也考虑进去的话,在一个相对较短的时间中,可以近似的假设为齐次泊松过程,这样不仅可以得出女生应该选择上面的第M个男生的结论,而且找到男生表白的最佳时间在t=T/e时刻。例如如果取时间段为大学四年的话,则T/e=1.4715。也就是说,在大学四年里,男生表白的最佳时刻在第三个学期的期末或寒假。但是这个模型假设还没有考虑:女生分辨N能力是在增长的,并不是一开始就能无失误的迅速判断;在大学阶段18至22如果把她能接触到的男生放进一个集合A,那么max{A}会不断减小的,等到她审阅到N/e的时候恐怕已经没的选了(也就是说原模型不可以在时间段上任意推广)。而且如果这个时间段较长的话,那么男生追求可近似假设为一个非齐次泊松过程,或者分段齐次泊松过程。

来源:算法与数学之美

近期热门文章Top10

↓ 点击标题即可查看 ↓

1.(2016-2-14)

2.(2016-2-14)

3.(2016-2-17)

4.(2016-2-9)

5.(2016-2-22)

6.(2016-2-15)

7.(2016-2-19)

8.(2016-2-1)

9.(2016-2-25)

10.(2016-2-12)

点击公众号内菜单栏“Top10”可查看过往每月热门文章Top10返回搜狐,查看更多

责任编辑:

matlab炮灰模型,非诚勿扰的数学分析相关推荐

  1. 由炮灰模型到“微软钻石题”

    很好玩的一个算法 微软钻石题 引言 在ADSP课上,作为课间小插曲,老师提出了一个微软的钻石面试题,题目的描述是如下: 一楼到十楼的每层电梯门口都放着一颗钻石,钻石大小不一.你乘坐电梯从一楼到十楼,每 ...

  2. matlab根据 2 6,#2.6 应用MATLAB进行模型处理

    2.6 应用MATLAB 进行模型处理 线性系统理论中常用的数学模型有微分方程模型.传递函数模型等,而这些模型之间 又有某些内在的等效关系.在MATLAB 中,与传递函数的具体形式相对应,又有tf 对 ...

  3. 浅层神经网络回归预测,基于MATLAB。 模型包括BPNN,极限学习机(ELM)和Elman网络

    浅层神经网络回归预测,基于MATLAB. 模型包括BPNN,极限学习机(ELM)和Elman网络(循环神经网络的一种). 有实例,直接替换数据可运行. 有训练集和测试集的划分,可直接套数据. 可以进行 ...

  4. MATLAB simulink 模型验证学习笔记

    MATLAB simulink 模型验证学习笔记 一.静态验证 1.Model Advisor 模型验证意思是用matlab自带的规范检查工具来检查自己画的模型是否符合规范. 进行模型验证需要用到的模 ...

  5. matlab中s_cplot,matlab系统模型建立和动态特性研究分析实验.docx

    实验二MATLAB系统模型建立和动态特性分析实验 一.实验目地 1掌握如何使用 MALAB进行系统模型地建立: 2 ?学习利用MALAB命令得阶跃响应曲线,分析系统动态特性; 3.利用MALAB求阶跃 ...

  6. 线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套

    线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套 (工程项目线上支持) 线控转向系统是应用在车辆领域处于研究热点和技术代表的动力转向系统,是全世界在转向系统研究中的先 ...

  7. 线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型

    线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持) 线控转向系统是应用在车辆领域处于研究热点和技术代表的动力转向系统,是全世界在转向系统研究中的先进 ...

  8. 线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持)

    线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持) 现有:69200652707636936Hvhuvg

  9. 线控转向,包含设计说明书,carsim模型 MATLAB Simulink模型全套

    线控转向,包含设计说明书,carsim模型,MATLAB Simulink模型全套(工程项目线上支持) YID:45200652707636936Wish守

  10. Matlab深度学习实战一:LeNe-5图像分类篇MNIST数据集分十类且matlab提供模型框架全网为唯一详细操作流程

    1.数据集简介下载与准备 2.matlab搭建模型相关知识 3.matlab软件的操作过程: (1)界面操作 (2)深度学习设计器使用 (3)图像数据导入 (4)训练可视化 一.数据集简介下载与准备 ...

最新文章

  1. H5Stream播放RTSP流视频
  2. stl_vector.h
  3. 对协变和逆变的简单理解
  4. spring 启动加载数据_12个很棒的Spring数据教程来启动您的数据项目
  5. python中的参数函数_python中函数与参数的简介
  6. linux Pci字符驱动基本加载流程
  7. NYOJ--C语言---Fibonacci数递归迭代两种解法
  8. sublime生产力提升利器
  9. Socket网络编程--Libev库学习(3)
  10. 今天你的网站被攻击了吗?
  11. meethigher-腾讯课堂自动签到
  12. SEGGER调试利器RTT,替代串口,高速数据上传
  13. Android开发之Path详解
  14. oracle 挖掘日志,使用Oracle的Logminer工具进行日志挖掘
  15. 介绍一个用于EOS区块链的RPC API接口的PHP开发包SDK
  16. 互联网日报 | 美团市值超2000亿美元;蚂蚁集团完成A股上市辅导;微博快手纷纷宣布收购KPL战队...
  17. Qt 5.15 安装步骤
  18. chrome自制插件--百度搜索结果去广告1.0
  19. java 合并pdf报错,[Java教程]java合并PDF文件
  20. Pdfium.Net SDK增强您的功能快速生成PDF

热门文章

  1. 2010年c语言上机题库,2010年计算机c语言上机题库
  2. 编译 java_如何编译java
  3. 分享97个上传下载PHP源码,总有一款适合你
  4. mysql客户端登录方式
  5. 《简明python教程》_简明Python教程
  6. 同济大学 线性代数 第六版 pdf_同济版线性代数(第六版)教材课后习题解答与综合测试...
  7. 【软件测试】基础用例篇
  8. jsp编程:用Servlet实现用户登陆
  9. 视差图Disparity与深度图Depth Map的一点知识
  10. 凸包问题(包含蛮力算法和快速凸包算法)+最优二叉查找树详解