diff --git a/fail_reason.py b/fail_reason.py index 6688687..8a579bc 100644 --- a/fail_reason.py +++ b/fail_reason.py @@ -52,7 +52,7 @@ percents[0] /= _all percents[1] /= _all -labels = ['Insufficient Time Resource', 'Sufficient Time Resource'] +labels = ['Insufficient Temporal Resource', 'Sufficient Temporal Resource'] plt.figure() plt.pie(percents, labels=labels, autopct="%1.2f%%", pctdistance=1.1, labeldistance=2,startangle=90, colors=['#00b894', '#fdcb6e']) diff --git a/rewiring_rate.py b/rewiring_rate.py new file mode 100644 index 0000000..92d4bda --- /dev/null +++ b/rewiring_rate.py @@ -0,0 +1,143 @@ +import json +from matplotlib import pyplot as plt +from island.match import Match +from island.matches import Matches +import numpy as np +import scipy as sp +from scipy.stats import pearsonr +from matplotlib import markers + +def error(f,x,y): + return sp.sum((f(x)-y)**2) + +if __name__ == '__main__': + + matches = Matches('wos-data-new') + max_round = 15 + + survivals = {} + with open('survivals.json', 'r') as f: + survivals = json.load(f) + + neighbors = {} + rewires = [] + x = np.arange(1, max_round) + mwRe = {} # Match-wise frequency of rewiring + mwTau = {} # Match-wise Tau + tau = [] + + for i in range(len(matches.data)): + m = matches.data[i] + n = {} + for r in m.query('neighbor', 'create').raw_data: + if r['a'] in n: + n[r['a']].append(r['b']) + else: + n[r['a']] = [r['b']] + + if r['b'] in n: + n[r['b']].append(r['a']) + else: + n[r['b']] = [r['a']] + neighbors[matches.names[i]] = n + + for i in range(max_round): + re = [] + for j in range(len(matches.data)): + rewire = 0 + rows = matches.data[j].query('action', 'done').where(lambda x: x['rno']==i+1).raw_data + for r in rows: + if matches.data[j].query('action', 'done').where(lambda x: x['rno']==i and ((x['a']==r['a'] and x['b']==r['b']) or (x['a']==r['b'] and x['b']==r['a']))).count() == 0: + rewire += 1 + + if rows: + re.append(float(rewire) / float(len(rows)*2)) + mwRe["%s-%d"%(j,i)] = re[-1] + if re: + rewires.append(np.average(re)) + + + for i in range(max_round-1): + tp = [] + for j in range(len(matches.data)): + if i == 0: + for r in matches.data[j].query('player', 'join').raw_data: + t = 0 + k = r['pid'] + if k not in neighbors[matches.names[j]]: + print("[%s(%d)] alone: %d" % (matches.names[j], i+1, k)) + else: + t = 1440 * len(neighbors[matches.names[j]][k]) + tp.append(t if t < 1440 else 1440) + mwTau["%s-%d"%(j,i)] = tp[-1] + else: + if str(i) not in survivals[matches.names[j]]: + continue + for k in survivals[matches.names[j]][str(i)]: + t = 0 + if k not in neighbors[matches.names[j]]: + print("[%s(%d)] alone: %d" % (matches.names[j], i+1, k)) + else: + trs = matches.data[j].get_tr(i, k, neighbors[matches.names[j]][k], survivals[matches.names[j]][str(i)]) + for l in neighbors[matches.names[j]][k]: + if l in trs: + t += trs[l] + tp.append(t if t < 1440 else 1440) + mwTau["%s-%d"%(j,i)] = tp[-1] + + if tp: + tau.append(np.average(tp)) + else: + tau.append(0) + + + green = '#00b894' + red = '#d63031' + + # p1折线图 + # fig = plt.figure(figsize=(6.4, 3.6)) + # ax = fig.gca() + # ax.plot(x, rewires, color=green, linewidth=3) + # ax.set_ylim(0, 0.5) + # ax2 = ax.twinx() + # ax2.plot(x, tau, color=red, linewidth=3) + # ax2.set_ylim(0,1440) + # ax.set_xlim(1,14) + # ax.set_xlabel("Rounds") + # ax.set_ylabel("Rewiring Rate", color=green) + # ax.tick_params(axis='y', labelcolor=green) + # ax2.set_ylabel("$\\tau_{p}$", family='sans-serif', color=red) + # ax2.tick_params(axis='y', labelcolor=red) + + # plt.tight_layout() + # # plt.show() + # plt.savefig('graph/tau_p_rewire_plot.eps') + + # # p2散点图 + fig = plt.figure(figsize=(6.4, 3.6)) + ax = fig.gca() + # ax.set_ylim(0.5, 1) + fp1,residuals,rank,sv,rcond = sp.polyfit(tau, rewires, 1, full=True) + print("残差:",residuals) + print('Model parameter:',fp1) + f1 = sp.poly1d(fp1) + print("error= %f" % error(f1, tau, rewires)) + # fx = sp.linspace(0,max(tau2),1000) + fx = sp.linspace(0,1440,2) + + plt.plot(fx,f1(fx),linewidth=2,color=red, ls='--', zorder=0) + plt.scatter(tau, rewires, color=green, linewidths=2, zorder=100) + # plt.scatter(tau_r, coopr_r, color='white', edgecolors=green, linewidths=2, zorder=101) + ax.set_xlabel('$\\tau_{p}$', family='sans-serif') + ax.set_ylabel('Rewiring Rate') + ax.set_xlim(0, 1440) + ax.set_xticks(sp.linspace(0, 1440, 13)) + ax.set_ylim(0, 0.6) + plt.tight_layout() + # plt.show() + plt.savefig('graph/tau_p_rewire_sca.eps') + + + + # # 皮尔逊相关系数 + print("pearson: %f, p-value: %f" % pearsonr(tau, rewires)) \ No newline at end of file