01规划巧解灵魂伴侣配对
前言
Hello呀,今天是2024年的七夕节啦,先给大家看个乐子啦!
主动都是小丑,哈哈!(其实是作者本人在强颜欢笑
从前我的另一边,
通往凌晨的街,
空无一人的世界,
行影匆匆这些年。期望从未破灭,
默不作响的时间,
最好的人注定会到身边,
孤注一掷的执念。我终将看到你身影逆光出现,
等这一切,都被你了解,
十指错落相牵。跨越时间,再没有分别,
携手走过明天。
所以在遇到正确的人之前,咱们还是努力学习吧,Fighting!!!
Soulmate配对
背景引入
这次七夕闲来无事小范围做了一个灵魂伴侣配对的活动,旨在帮同学们在七夕遇见自己的Soulmate灵魂伴侣,具体活动流程如下:
流程很好理解,关键在于这里的算法匹配,具体应该如何操作,才能让配对的两人最为合适,也让彼此更能在活动中收获好的体验呢?
我们接下来逐步对这一问题进行分析
信息收集
本次报名时除了收集个人基础信息以外,仅额外收集统计了两个方面:
- 个人的MBTI人格类型
- 个人的依恋类型(基于“成人依恋量表(AAS)自测量表”)
最终收集处理过的数据如下(部分展示):
理论基础
在前面的文章中,我通过实证分析(详见“影响建立亲密关系的要素分析”)确认了对于建立亲密关系的关键影响因素有:
- 外向型(E)与内向型(I)
- 感觉型(S)与直觉型(N)
- 思维型(T)与情感型(F)
同样我们从依恋类型理论出发同样考虑依恋类型互相作用下对于亲密关系建立同样会产生影响,因此将依恋类型也纳入考虑因素:
- 四种依恋类型(安全型、焦虑型、回避型、恐惧型)
另外基于个人意愿我们还尊重并且考虑个人性取向问题,因此将性别也纳入考虑因素:
- 性别(男女)
得分矩阵
首先我们基于要素(均为分类变量)互相之间的配对方式不同,建立得分矩阵,用于更好地评价不同类型配对下的得分情况:
1. 外向(E)与内向(I)
E | I | |
---|---|---|
E | 5 | 4 |
I | 4 | 5 |
2. 感觉(S)与直觉(N)
S | N | |
---|---|---|
S | 5 | 3 |
N | 3 | 5 |
3. 思维(T)与情感(F)
T | F | |
---|---|---|
T | 5 | 3 |
F | 3 | 5 |
矩阵说明:
- 外向(E)与内向(I):外向型与内向型能够互补,通常得分较高。
- 感觉(S)与直觉(N):感觉型在细节上表现较好,密切工作时得分较高,但直觉型在创新和未来视角方面得分较高。
- 思维(T)与情感(F):思维型在逻辑决策和分析能力上得分高,情感型在理解和同理心上得分高。
4. 基于四种依恋类型的配对矩阵
安全型 | 焦虑型 | 回避型 | 恐惧型 | |
---|---|---|---|---|
安全型 | 10 | 8 | 7 | 6 |
焦虑型 | 8 | 6 | 3 | 4 |
回避型 | 7 | 3 | 4 | 3 |
恐惧型 | 6 | 4 | 3 | 2 |
矩阵解释:
- 安全型与安全型:相互理解和支持,最优的配对。
- 安全型与焦虑型:安全型能够给焦虑型提供支持,焦虑型也能享受到安全感。
- 安全型与回避型:安全型能理解回避型的需求,但可能会感觉到距离感。
- 焦虑型与焦虑型:可能互相吸引,但会因为过度焦虑而产生冲突。
- 回避型与回避型:虽然相对舒适,但情感交流不足,可能导致关系冷淡。
- 恐惧型:由于其不稳定性,通常难以与其他类型建立健康的关系。
5.男女配对的得分矩阵
男性 | 女性 | |
---|---|---|
男性 | -10 | 10 |
女性 | 10 | -10 |
矩阵解释:
- 男性与女性:完美的配对,得分10。
- 男性与男性:要避免的配对,得分-10。
- 女性与女性:要避免的配对,得分-10。
配对算法
考虑到最终的分配为一个配对问题
我们将主要采用01线性规划来建模这一配对问题
首先我们定义作为我们的决策变量,是一个0,1变量,当且仅当参与者与参与者配对时,为1,否则为0。
其中分别代表参与者编号,所以 只能取自总人数 里面,可以表达为:
约束条件
根据活动定义,显然我们得到了三个约束条件:
1. 每个参与者只能配对一次
2. 每个参与者只能被配对一次
3. 每次配对都是互相确定的
配对得分矩阵
依照前面的得分矩阵,我们可以构建五个的配对得分矩阵:
、、、、
分别代表外向内向、感觉直觉、思维情感、依恋类型和性别维度下的不同参与者配对后对应的配对得分矩阵。
例如:
代表参与者与参与者的配对的外向内向得分
代表参与者与参与者的感觉直觉得分,以此类推。
因此我们同样可以考虑将这五个配对得分矩阵相加,得到一个综合配对得分矩阵:
目标函数
有了综合配对得分矩阵,当与相乘后,我们便可以得到每个配对对应的得分情况。
因此我们便可以写出我们的目标函数:
也可以将其写成:
其中、、、、分别代表外向内向、感觉直觉、思维情感、依恋类型和性别的得分矩阵。
模型总览
综上所述,我们便可以构建出我们的配对模型:
配对效果
源代码
构建完模型后我们便可以进入我们编程的时间啦!
在代码的选择上我还是首选Python,因为Python的语法简洁,并且有许多优秀的库可以供我们使用。
数据处理
1 | import pandas as pd |
模型求解
这里讲一个小插曲,在第一开始,作者本人是按照使用Gurobi求解器的方式来写我的代码,因为它的速度很快,并且我经常使用它来求解OR方面的问题,但抽象的是我发现我的许可证到期了:
于是我又直接安装了Pulp库,并又写了一版代码是直接调用里面的函数来进行求解,因此这里的源代码我有两个版本,一个是使用Gurobi的,另一个是使用Pulp的。
使用Gurobi
1 | import numpy as np |
使用Pulp
1 | import pandas as pd |
补充
成人依恋量表(AAS)自测量表
为什么源代码里面有一段数据处理的代码呢。因为我是直接将成人依恋量表(AAS)自测量表直接嵌入到我们信息收集的问卷里面的,因此我们需要进行一下数据处理,来判断一下其具体的依恋类型。
下面是成人依恋量表(AAS)自测量表的全部内容:
安全型:亲近依赖均分>3,且焦虑均分<3
焦虑型:亲近依赖均分>3,且焦虑均分>3
回避型:亲近依赖均分<3,且焦虑均分<3
恐惧型:亲近依赖均分<3,且焦虑均分>3
MBTI
对于MBTI,我直接使用的是MBTI的中文版网站,让报名参与者自测,链接如下:
https://mbti-16personalities.com
结语
爱情无药可医,唯有爱得更深。
——梭罗 《瓦尔登湖》
配对的任务就这样完成了,逻辑基本是科学的客观的且完善的。
但基于算法的配对找到的真的就一定是你的灵魂伴侣,甚至后面会建立爱情关系吗?
我也不知道哈哈,谁又能知道呢?
最后,今天是七夕节啦,祝大家七夕快乐,有情人终成眷属!单身狗的就祝你们早日找到心仪的另一半!
最后的最后,放一只章若楠宝宝的照片!