本日はみなさんがいつも使っている
マッチングアプリの戦略について
考えてみました。
解説動画はこちら
さてどんな戦略を取れば良いかと言うと
その昔、数学者の秋山仁先生が
考え出したものです。
さてこれを実装して
試してみることにしましょう。
すこーし雑ですが
こんな感じかなーと思います。
間違っていたらすいません。
結果としては
こんな感じでマッチングした順位と
マッチングした時の番目が計算されます。
さてこれで
どんな感じになったのかを見てみましょう。
ランダム計算しているので
試行するたびに結果は変わりますが
順位の平均は
3位くらいになりました!!!
内訳としては1000回試行した場合
このような順位の人と出会えて
マッチングできたことになりました。
何人目の人で出会えたかの平均は
10 - 11 人くらいに落ち着きました。
と言うことで戦略としては
秋山先生の戦略をそのまま用いて
と言う感じですね。
候補が20人いるとして
ランダムに出会うとしたら
大体13人目までで良い人には
出会えていそうな感じです。
ただし、ここには大きな落とし穴があり
数学的に順位が高めの人と出会えて
無条件で結婚できるとされているので
出会えてもマッチングできるかどうか
と言う部分が抜けています。
まあ
イケメンか金持ちに限る
と言うのがネックでしょうねーー
まあ、より良い相手を見つけるには
良い戦略ではあると思います。
皆様も是非使ってみて下さい
それでは。
マッチングアプリの戦略について
考えてみました。
解説動画はこちら
さてどんな戦略を取れば良いかと言うと
その昔、数学者の秋山仁先生が
考え出したものです。
まずルールとしては
・全部で20人の相手とお見合いをする。
・断った相手とは2度と会えない。
・会う順番はランダムに与えられる。
・二股はかけられない。
事後的に順位を付けることができた場合
順位が3番目以上の相手と
結婚するための戦略を考えよ
結婚するための戦略を考えよ
最初の5人は無条件で見過ごす。
10人目までは、それまでで1番だと思ったら結婚する。
13人目までは、それまでで2番め以上だと思ったら結婚する。
15人目までは、それまでで3番め以上だと思ったら結婚する。
16人目の相手が、それまでで4番め以上だと思ったら結婚する。
17人目の相手が、それまでで5番め以上だと思ったら結婚する。
18人目の相手が、それまでで7番め以上だと思ったら結婚する。
19人目の相手が、それまでで10番め以上だと思ったら結婚する。
20人目の相手とは、ルール上どんな相手でも結婚する。
引用:秋山仁先生「皆殺しの数学」
さてこれを実装して
試してみることにしましょう。
import random
import numpy as np
F = [i+1 for i in range(20)]
random.shuffle(F)
res = []
for j in range(1000):
F = [i+1 for i in range(20)]
random.shuffle(F)
target,num = 0,0
tmp = []
for N in range(20):
if N>=5 and N<10:
if F[N]<sorted(tmp)[0]:
target,num = F[N],N+1
break
elif N>=10 and N<13:
if F[N]<sorted(tmp)[1]:
target,num = F[N],N+1
break
elif N>=13 and N<15:
if F[N]<sorted(tmp)[2]:
target,num = F[N],N+1
break
elif N>=15 and N<16:
if F[N]<sorted(tmp)[3]:
target,num = F[N],N+1
break
elif N>=16 and N<17:
if F[N]<sorted(tmp)[4]:
target,num = F[N],N+1
break
elif N>=17 and N<18:
if F[N]<sorted(tmp)[6]:
target,num = F[N],N+1
break
elif N>=18 and N<19:
if F[N]<sorted(tmp)[9]:
target,num = F[N],N+1
break
elif N==19:
target,num = F[N],N+1
tmp.append(F[N])
res.append((target,num))
すこーし雑ですが
こんな感じかなーと思います。
間違っていたらすいません。
結果としては
res[0:5][(3, 7), (1, 14), (3, 13), (2, 10), (3, 15)]
こんな感じでマッチングした順位と
マッチングした時の番目が計算されます。
さてこれで
どんな感じになったのかを見てみましょう。
ランダム計算しているので
試行するたびに結果は変わりますが
順位の平均は
3位くらいになりました!!!
内訳としては1000回試行した場合
順位01 : 回数286 : 割合28.6%
順位02 : 回数244 : 割合24.4%
順位03 : 回数193 : 割合19.3%
順位04 : 回数112 : 割合11.2%
順位05 : 回数061 : 割合6.1%
順位06 : 回数033 : 割合3.3%
順位07 : 回数033 : 割合3.3%
順位08 : 回数012 : 割合1.2%
順位09 : 回数007 : 割合0.7%
順位10 : 回数004 : 割合0.4%
順位11 : 回数007 : 割合0.7%
順位13 : 回数001 : 割合0.1%
順位14 : 回数001 : 割合0.1%
順位15 : 回数001 : 割合0.1%
順位16 : 回数002 : 割合0.2%
順位17 : 回数001 : 割合0.1%
順位18 : 回数001 : 割合0.1%
順位19 : 回数001 : 割合0.1%
このような順位の人と出会えて
マッチングできたことになりました。
何人目の人で出会えたかの平均は
10 - 11 人くらいに落ち着きました。
と言うことで戦略としては
秋山先生の戦略をそのまま用いて
最初の5人は無条件で見過ごす
10人目まではそれまでで1番ならマッチング
13人目まではそれまでで2番目以上ならマッチング
と言う感じですね。
候補が20人いるとして
ランダムに出会うとしたら
大体13人目までで良い人には
出会えていそうな感じです。
ただし、ここには大きな落とし穴があり
数学的に順位が高めの人と出会えて
無条件で結婚できるとされているので
出会えてもマッチングできるかどうか
と言う部分が抜けています。
まあ
イケメンか金持ちに限る
と言うのがネックでしょうねーー
まあ、より良い相手を見つけるには
良い戦略ではあると思います。
皆様も是非使ってみて下さい
それでは。
コメント
コメント一覧 (1)
if F[N]<sorted(tmp)[0]:
target,num = F[N],N+1
break
F[N]<sorted(tmp)[0]:
ってなにをやっているのかちょっとわかりません。
全体像がわかってないかもしれないんですが、もう少し詳しく解説していただけると幸いです
コメントする