点进来的你若以为是PUA教程,请抬头看看论坛名称(明 光 大 正
计算机学院是我们学校的人口大院
上千的人口、 6 : 1 6:1 6:1的经典失调的男女比例 仅次于机械工程学院
这就使得计院的市场上形成了严重的 内卷效应
像我这样的纯情小生自然是在这种水深火热的环境中被毒打多年
然而,作为一个老二次元,闲来无事到时候逛逛B站,竟从李永乐老师那找到了一些关于恋爱的科学门路。
不知道大家有没有这种经历或是见闻
中学找的对象亦或是初恋,大多分的分,散的散。
能坚持下去的属实凤毛麟角
可是为什么会这样?年轻时的爱情真的这么容易变质吗?
苏格拉底曾经给自己的学生出过这样的题目:
倘若有一片麦田,选取其中一列麦子,有个人在这列麦子中捡起一根,并且有如下规则:
此人不能后退,找前面的麦子没有两根相同长度的麦子只能捡起一根麦子,捡起就视为结束苏老师要求学生找到一个方法,找到最长的麦子。
这在学术上被成为 Optimal Stopping Theory
我们把恋爱问题套在捡麦子的问题上,把捡麦子的过程换做是女神选择男生的过程,把人简单地按照一维向量排列,也就是说只有排名这种单一的标准来评判男生(多少有点物化男生的味道?)
那么女神通过某种方法,以最大概率,找到最优的男生。
参考维基百科
我们设全体男生集合为 M M M
假设现在有三位追求者
M = { 1 , 2 , 3 } M =\{1,2,3\} M={1,2,3}
数字表示他们的优秀程度,越优秀数字越大
女神将所有的追求者划分为样本组和候选组
女神则是在候选组选择比样本组都要优秀的男生
示例: 对男生做全排列 P P P
排列1排列2排列3排列4排列5排列6112233231321323112 无样本 找到最好(3)的概率为 1 3 \frac{1}{3} 31 一人做样本 概率为 1 2 \frac{1}{2} 21 两人做样本 概率为 1 3 \frac{1}{3} 31可见,这里采用一人做样本的方案是最优的。
那么,如果追求者有N个该怎么办呢?
这里涉及到一些概率论与数理统计和微积分的知识,觉得头疼的可以跳过
设女神会拒绝前 m − 1 m-1 m−1个追求者
那么最优的男生 m m m 将会被选中的概率是: (贝叶斯定理)
P ( k ) = ∑ m = 1 n P ( m 被 选 中 ∣ m 是 最 优 秀 的 男 生 ) × P ( m 是 最 优 秀 的 男 生 ) P(k)=\sum^{n}_{m=1}P(m被选中|m_是最优秀的男生)\times P(m是最优秀的男生) P(k)=∑m=1nP(m被选中∣m是最优秀的男生)×P(m是最优秀的男生)
= ( ∑ i = 1 r − 1 0 × 1 n ) + ( ∑ i = r n P ( 仅 次 于 最 优 的 男 生 m − 1 在 候 选 组 中 | m 是 最 优 秀 的 男 生 ) × 1 n ) =(\sum^{r-1}_{i=1}0\times \frac{1}{n})+(\sum^{n}_{i=r}P(仅次于最优的男生m-1在候选组中 | m是最优秀的男生) \times \frac{1}{n} ) =(∑i=1r−10×n1)+(∑i=rnP(仅次于最优的男生m−1在候选组中|m是最优秀的男生)×n1)
= ∑ i = r n r − 1 m − 1 × 1 n =\sum^{n}_{i=r}\frac{r-1}{m-1}\times \frac{1}{n} =∑i=rnm−1r−1×n1
= r − 1 n ∑ i = r n 1 m − 1 = \frac{r-1}{n}\sum^{n}_{i=r}\frac{1}{m-1} =nr−1∑i=rnm−11
令 n − > ∞ n->\infty n−>∞ , r n = x \frac{r}{n} =x nr=x,
i n = t \frac{i}{n} = t ni=t
1 n = d t \frac{1}{n} = dt n1=dt
则 P ( x ) = x ∫ x 1 1 t d t = − x l n ( x ) P(x) = x\int_{x}^{1}\frac{1}{t}dt = -xln(x) P(x)=x∫x1t1dt=−xln(x)
对 P ( x ) P(x) P(x)求导得到 P ′ ( x ) = d P d x P^{'}(x)=\frac{dP}{dx} P′(x)=dxdP
令 P ′ ( x ) = 0 P^{'}(x)=0 P′(x)=0
解得 x = 1 e x=\frac{1}{e} x=e1 (约为0.368)
流程图
Created with Raphaël 2.2.0 开始 提高样本数量 为追求者洗牌 拒绝前k个人 与候选组交往(遍历) 是否大于样本最大值? 选择目前最大 是否达到实验次数? 选择最后一个人 yes no yes no作为计算机学院的学生,并且是 Linus 的忠实信徒,坚信
T a l k i s c h e a p , s h o w m e t h e c o d e . Talk\ is\ cheap, show\ me\ the\ code. Talk is cheap,show me the code.
就用C++实现了模拟演算
代码如下,自定义的工具函数见附录
std::vector<std::vector<double> > findPossibility(int num_of_samples,int time_of_test){ // initialize the list // int num_of_samples ; int *array = nullptr; array = generateArray(array, num_of_samples,1); std::vector<std::vector<double> > rs; for(int i=0;i<num_of_samples;++i) rs.push_back(std::vector<double>()); // vector<int>():创建一个空vector,调用了构造函数 for(int i=0;i<num_of_samples;++i) for(int j=0;j<num_of_samples;++j) rs[i].push_back(0); //拒绝前k个 for(int k = 1 ; k< num_of_samples ; k++){ printf("Discard the first %d wheats...\n",k); // n 次实验 for(int i=0; i < time_of_test;i++){ array = shuffleArray(array, 0, num_of_samples); //样本组的最大值 int max = findGivenMax(array, k); //实在没有比前面好的找最后一个 int chosen_one; //寻找样本组中最大值 chosen_one = array[num_of_samples]; for(int i=k;i<num_of_samples;i++){ if(array[i]>max){ chosen_one = array[i]; break; } } rs[k][chosen_one] += 1.0 / (double)time_of_test; } } return rs; }这里将结果导出为csv文件 并利用了python numpy与matplotlib等包来绘制结果图 numpy与matplotlib代码见附录
可以看到,大约在样本域大小300 - 400 人左右时达到最大概率。
根据这个模型,男生在追求女神时,要尽量不去踏进她的样本域,并且尽可能提升自己,就能够提高成功率。
现实中的恋爱问题并没有那么简单,它是及其复杂的,比如,还需要考虑到信息不对等、时机把握、多维特征等等。
但是这个问题多少可以为人们在关于选择的问题是提供一定数学上的参考。
人的感情是难以被量化的,遇到了,就请好好把握良机吧。
看官们倘若喜欢,别忘了关注我哦! github的源码