稳定匹配算法python实现
所谓稳定匹配算法,就是如果男人想出轨,美女女对他没有一点点性趣,并且爱他的女人比老婆丑十万八千里
反之女人亦然。
用数学语言来讲就是,博弈的各方达到纳什均衡点。
‘吕布’,‘刘备’,‘孔明’,‘周瑜’,'曹操’分别在三国佳缘网,注册了vip 账号,想泡某网的5个美女;
import numpy as np
import pandas as pd
man=np.array([['貂蝉','大乔','小乔','阿丑','尚香'],
['貂蝉','小乔','大乔','尚香','阿丑'],
['阿丑','貂蝉','小乔','大乔','尚香'],
['小乔','大乔','尚香','貂蝉','阿丑'],
['小乔','貂蝉','大乔','尚香','阿丑'],
])
a=['吕布','刘备','孔明','周瑜','曹操']
pdman=pd.DataFrame(man,index=a)
美女在帅哥心中的位置是这个样子滴!
pdman
Out[95]:
0 1 2 3 4
吕布 貂蝉 大乔 小乔 阿丑 尚香
刘备 貂蝉 小乔 大乔 尚香 阿丑
孔明 阿丑 貂蝉 小乔 大乔 尚香
周瑜 小乔 大乔 尚香 貂蝉 阿丑
曹操 小乔 貂蝉 大乔 尚香 阿丑
woman=np.array([['曹操','吕布','刘备','周瑜','孔明'],
['周瑜','刘备','孔明','吕布','曹操'],
['周瑜','孔明','刘备','曹操','吕布'],
['吕布','刘备','周瑜','孔明','曹操'],
['孔明','周瑜','曹操','刘备','吕布'],
])
b=['貂蝉','大乔','小乔','尚香','阿丑']
pdwoman=pd.DataFrame(woman,index=b)
帅哥在美女心中的位置是这个样子滴!
pdwoman
Out[96]:
0 1 2 3 4
貂蝉 曹操 吕布 刘备 周瑜 孔明
大乔 周瑜 刘备 孔明 吕布 曹操
小乔 周瑜 孔明 刘备 曹操 吕布
尚香 吕布 刘备 周瑜 孔明 曹操
阿丑 孔明 周瑜 曹操 刘备 吕布
def perfect_match(a,pdman,pdwoman):
sd=pd.Series()
while len(a)>0:
sset=sd.index
pp=pdman.loc[a[0]]
for i in list(pp):
if i in sset:
mmm=sd[i]
po=pdwoman.loc[i]
kl= list(po)
p=kl.index(mmm)
q=kl.index(a[0])
if p<q:
continue
else:
sd[i]=a[0]
#sd.drop(k)
a.remove(a[0])
a.append(mmm)
break
else:
sd[i]=a[0]
a.remove(a[0])
break
return sd
稳定匹配如下:
match=perfect_match(a,pdman,pdwoman)
match
Out[98]:
貂蝉 曹操
小乔 周瑜
阿丑 孔明
大乔 刘备
尚香 吕布
dtype: object
然世界处于不断的变动之中,偏好矩阵是一个变量,世界在动态中寻找其纳什均衡。所以这个世界不停的有人劈腿,离婚,再婚…