for paper v1.4
This commit is contained in:
parent
7b673d11e7
commit
c1abe1cab6
@ -3,7 +3,7 @@ from matplotlib import pyplot as plt
|
|||||||
from island.match import Match
|
from island.match import Match
|
||||||
from island.matches import Matches
|
from island.matches import Matches
|
||||||
|
|
||||||
mode = 'CLASSIC'
|
mode = 'SURVIVE'
|
||||||
matches = Matches.from_profile_expr(lambda r: mode in r)
|
matches = Matches.from_profile_expr(lambda r: mode in r)
|
||||||
|
|
||||||
labels = ['Stay Connected', 'Break Tie']
|
labels = ['Stay Connected', 'Break Tie']
|
||||||
|
|||||||
@ -4,18 +4,23 @@ from matplotlib import pyplot as plt
|
|||||||
|
|
||||||
'''
|
'''
|
||||||
survive
|
survive
|
||||||
'''
|
|
||||||
break_tie = [13.717872086072923, 86.26126126126125]
|
break_tie = [13.717872086072923, 86.26126126126125]
|
||||||
stay_connected = [86.28212791392707, 13.738738738738737]
|
stay_connected = [86.28212791392707, 13.738738738738737]
|
||||||
'''
|
|
||||||
classic
|
classic
|
||||||
|
|
||||||
|
break_tie = [8.331150117893634, 42.07858048162231]
|
||||||
|
stay_connected = [91.66884988210636, 57.9214195183777]
|
||||||
'''
|
'''
|
||||||
# break_tie = [8.331150117893634, 42.07858048162231]
|
|
||||||
# stay_connected = [91.66884988210636, 57.9214195183777]
|
|
||||||
|
|
||||||
mode = 'SURVIVE'
|
"""
|
||||||
|
NEW VERSION
|
||||||
|
"""
|
||||||
|
bt_s = [13.717872086072923, 86.26126126126125]
|
||||||
|
bt_c = [8.331150117893634, 42.07858048162231]
|
||||||
|
|
||||||
fig = plt.figure(figsize=(3, 3))
|
fig = plt.figure(figsize=(4, 4))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
|
|
||||||
index = np.arange(2)
|
index = np.arange(2)
|
||||||
@ -24,21 +29,22 @@ bar_width = 0.35
|
|||||||
opacity = 1
|
opacity = 1
|
||||||
error_config = {'ecolor': '0.3'}
|
error_config = {'ecolor': '0.3'}
|
||||||
|
|
||||||
rects1 = ax.bar(index, break_tie, bar_width,
|
rects1 = ax.bar(index, bt_s, bar_width,
|
||||||
alpha=opacity, color='#fdcb6e',
|
alpha=opacity, color='#d63031',
|
||||||
label='Break Tie')
|
label='Dissipative')
|
||||||
|
|
||||||
rects2 = ax.bar(index + bar_width, stay_connected, bar_width,
|
rects2 = ax.bar(index + bar_width, bt_c, bar_width,
|
||||||
alpha=opacity, color='#00b894',
|
alpha=opacity, color='#00b894',
|
||||||
label='Stay Connected')
|
label='Classic')
|
||||||
|
|
||||||
|
|
||||||
ax.set_ylabel('Frequency of Behavior')
|
ax.set_ylabel('Frequency of Breaking Ties')
|
||||||
ax.set_title('Behavior after Moves')
|
# ax.set_title('Behavior after Moves')
|
||||||
ax.set_xticks(index + bar_width / 2)
|
ax.set_xticks(index + bar_width / 2)
|
||||||
ax.set_xticklabels(('C', 'D'))
|
ax.set_xticklabels(('C', 'D'))
|
||||||
|
ax.set_xlabel('Previous Move')
|
||||||
ax.set_ylim(0,100)
|
ax.set_ylim(0,100)
|
||||||
fig.legend(loc='lower center')
|
ax.legend(loc='upper left')
|
||||||
fig.tight_layout()
|
fig.tight_layout()
|
||||||
# plt.show()
|
# plt.show()
|
||||||
plt.savefig("graph/break_tie_bar_%s.eps" % (mode))
|
plt.savefig("graph/break_tie_bar.eps")
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
from scipy.stats import chi2_contingency as chi2
|
from scipy.stats import chi2_contingency as chi2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
obs = np.array([[2887.0, 459.0], [61.0, 383.0]])
|
obs = np.array([[2887.0, 61.0], [459.0, 383.0]])
|
||||||
chi,p,dof,expected = chi2(obs)
|
chi,p,dof,expected = chi2(obs)
|
||||||
print("%f, %e, %f" % (chi, p, dof))
|
print("%f, %e, %f" % (chi, p, dof))
|
||||||
|
|
||||||
'''
|
'''
|
||||||
survive:
|
survive:
|
||||||
chi = 1189.53, p = 1.149752e-260
|
chi = 1189.5306, p = 1.149752e-260
|
||||||
|
|
||||||
classic:
|
classic:
|
||||||
chi = 611.59, p = 5.031232e-135
|
chi = 600.7032, p = 1.177183e-132
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|||||||
163
fail_reason.py
163
fail_reason.py
@ -2,62 +2,127 @@ import json
|
|||||||
from matplotlib import pyplot as plt
|
from matplotlib import pyplot as plt
|
||||||
from island.match import Match
|
from island.match import Match
|
||||||
from island.matches import Matches
|
from island.matches import Matches
|
||||||
|
import numpy as np
|
||||||
|
from scipy.stats import pearsonr
|
||||||
|
|
||||||
mode = 'SURVIVE'
|
class Solution:
|
||||||
matches = Matches.from_profile_expr(lambda r: mode in r)
|
def __init__(self, mode):
|
||||||
|
self.mode = mode
|
||||||
|
self.matches = Matches.from_profile_expr(lambda r: mode in r)
|
||||||
|
self.survivals = {}
|
||||||
|
with open('survivals.json', 'r') as f:
|
||||||
|
self.survivals = json.load(f)
|
||||||
|
self.neighbors = {}
|
||||||
|
self.read_neighbor()
|
||||||
|
self.suff = 0
|
||||||
|
self.insuff = 0
|
||||||
|
self.detail_suff = [0]*2
|
||||||
|
self.detail_insuff = [0]*2
|
||||||
|
|
||||||
percents = [0.0, 0.0]
|
def read_neighbor(self):
|
||||||
|
for i, m in enumerate(self.matches.data):
|
||||||
|
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']]
|
||||||
|
|
||||||
op = 'D'
|
if r['b'] in n:
|
||||||
|
n[r['b']].append(r['a'])
|
||||||
|
else:
|
||||||
|
n[r['b']] = [r['a']]
|
||||||
|
self.neighbors[self.matches.names[i]] = n
|
||||||
|
|
||||||
def get_reason(m, i, target):
|
def get_reason(self, m, i, target, ttr):
|
||||||
r = m.query('action', 'request').where(lambda x: x['rno'] == i+1 and x['from'] == target).raw_data
|
tr = 1440
|
||||||
rs = m.query('action', 'approve').where(lambda x: x['rno'] == i+1 and x['to'] == target).raw_data
|
for k in m.query('action', 'request').where(lambda x: x['rno'] == i and x['from'] == target).raw_data:
|
||||||
rsn = [n['from'] for n in rs]
|
tr -= k['tr']
|
||||||
for j in r:
|
for k in m.query('action', 'cancel').where(lambda x: x['rno'] == i and x['from'] == target).raw_data:
|
||||||
if j['to'] not in rsn:
|
tr += m.query('action', 'request').where(lambda x: x['rno'] == i and x['from'] == target and x['to'] == k['to'] and x['log_id'] < k['log_id']).orderby('log_id').raw_data[-1]['tr']
|
||||||
tr = 1440
|
for k in m.query('action', 'deny').where(lambda x: x['rno'] == i and x['to'] == target).raw_data:
|
||||||
for k in m.query('action', 'request').where(lambda x: x['rno'] == i+1 and x['from'] == j['to']).raw_data:
|
tr += m.query('action', 'request').where(lambda x: x['rno'] == i and x['from'] == target and x['to'] == k['from'] and x['log_id'] < k['log_id']).orderby('log_id').raw_data[-1]['tr']
|
||||||
tr -= k['tr']
|
for k in m.query('action', 'approve').where(lambda x: x['rno'] == i and x['from'] == target).raw_data:
|
||||||
for k in m.query('action', 'cancel').where(lambda x: x['rno'] == i+1 and x['from'] == j['to']).raw_data:
|
tr -= k['tr']
|
||||||
tr += m.query('action', 'request').where(lambda x: x['rno'] == i+1 and x['from'] == j['to'] and x['to'] == k['to'] and x['log_id'] < k['log_id']).orderby('log_id').raw_data[-1]['tr']
|
return tr >= ttr
|
||||||
for k in m.query('action', 'deny').where(lambda x: x['rno'] == i+1 and x['to'] == j['to']).raw_data:
|
|
||||||
tr += m.query('action', 'request').where(lambda x: x['rno'] == i+1 and x['from'] == j['to'] and x['to'] == k['from'] and x['log_id'] < k['log_id']).orderby('log_id').raw_data[-1]['tr']
|
|
||||||
for k in m.query('action', 'approve').where(lambda x: x['rno'] == i+1 and x['from'] == j['to']).raw_data:
|
|
||||||
tr -= k['tr']
|
|
||||||
# print(tr)
|
|
||||||
if tr >= j['tr']:
|
|
||||||
percents[1] += 1
|
|
||||||
else:
|
|
||||||
percents[0] += 1
|
|
||||||
|
|
||||||
|
|
||||||
for m in matches.data:
|
def new_partner_reason(self):
|
||||||
info = m.query('game', 'created').select('info').first()['info']
|
re_after = [0] * 2 # [c,d]
|
||||||
conf = json.loads(info['config'])
|
su_after = [0] * 2
|
||||||
game_end_at = int(info['game_end_at'])
|
for m in self.matches.data:
|
||||||
|
info = m.query('game', 'created').select('info').first()['info']
|
||||||
|
game_end_at = int(info['game_end_at'])
|
||||||
|
|
||||||
for i in range(1, game_end_at):
|
for p in m.query('player', 'join').raw_data:
|
||||||
calced = set()
|
pid = p['pid']
|
||||||
for row in m.query('action', 'done').where(lambda x: (x['act_a'] == op or x['act_b'] == op) and x['rno'] == i).raw_data:
|
for i in range(2, game_end_at):
|
||||||
if row['act_a'] == op and row['a'] not in calced:
|
previous_round_partner = []
|
||||||
get_reason(m, i, row['a'])
|
c, t = 0, 0
|
||||||
calced.add(row['a'])
|
for r in m.query('action', 'done').where(lambda x: x['rno'] == i - 1 and (x['a'] == pid or x['b'] == pid)).raw_data:
|
||||||
if row['act_b'] == op and row['b'] not in calced:
|
if r['a'] == pid:
|
||||||
get_reason(m, i, row['b'])
|
previous_round_partner.append(r['b'])
|
||||||
calced.add(row['b'])
|
if r['act_a'] == 'C':
|
||||||
|
c += 1
|
||||||
|
else:
|
||||||
|
previous_round_partner.append(r['a'])
|
||||||
|
if r['act_b'] == 'C':
|
||||||
|
c += 1
|
||||||
|
t += 1
|
||||||
|
is_coop = 0 if c * 2 >= t else 1
|
||||||
|
|
||||||
print(percents)
|
new_partner_requester = {}
|
||||||
_all = sum(percents) / 100
|
for r in m.query('action', 'request').where(lambda x: x['rno'] == i and (x['from'] == pid or x['to'] == pid)).raw_data:
|
||||||
percents[0] /= _all
|
if r['from'] == pid:
|
||||||
percents[1] /= _all
|
if r['to'] not in previous_round_partner:
|
||||||
|
# new_partner_request += 1
|
||||||
|
new_partner_requester[r['to']] = r['tr']
|
||||||
|
else:
|
||||||
|
if r['from'] not in previous_round_partner:
|
||||||
|
# new_partner_request += 1
|
||||||
|
new_partner_requester[r['from']] = r['tr']
|
||||||
|
|
||||||
|
if not new_partner_requester:
|
||||||
|
continue
|
||||||
|
re_after[is_coop] += len(new_partner_requester)
|
||||||
|
new_partner_succ = 0
|
||||||
|
new_partner = []
|
||||||
|
for r in m.query('action', 'done').where(lambda x: x['rno'] == i and (x['a'] == pid or x['b'] == pid)).raw_data:
|
||||||
|
if r['a'] == pid:
|
||||||
|
if r['b'] not in previous_round_partner:
|
||||||
|
new_partner_succ += 1
|
||||||
|
new_partner.append(r['b'])
|
||||||
|
else:
|
||||||
|
if r['a'] not in previous_round_partner:
|
||||||
|
new_partner_succ += 1
|
||||||
|
new_partner.append(r['a'])
|
||||||
|
su_after[is_coop] += new_partner_succ
|
||||||
|
|
||||||
|
for npr, ntr in new_partner_requester.items():
|
||||||
|
if npr not in new_partner:
|
||||||
|
if self.get_reason(m, i, npr, ntr):
|
||||||
|
self.suff += 1
|
||||||
|
self.detail_suff[is_coop] += 1
|
||||||
|
else:
|
||||||
|
self.insuff += 1
|
||||||
|
self.detail_insuff[is_coop] += 1
|
||||||
|
|
||||||
|
for i, _ in enumerate(su_after):
|
||||||
|
print(su_after[i], re_after[i], su_after[i] / re_after[i])
|
||||||
|
su_after[i] /= re_after[i]
|
||||||
|
return su_after
|
||||||
|
|
||||||
|
|
||||||
labels = ['Insufficient Time Resource', 'Sufficient Time Resource']
|
if __name__ == '__main__':
|
||||||
|
print('CLASSIC')
|
||||||
plt.figure()
|
sc = Solution('CLASSIC')
|
||||||
plt.pie(percents, labels=labels, autopct="%1.2f%%", pctdistance=1.1, labeldistance=2,startangle=90, colors=['#00b894', '#fdcb6e'])
|
npc_after = sc.new_partner_reason()
|
||||||
plt.legend()
|
print("reason: ", sc.suff, sc.insuff, sc.insuff / (sc.suff + sc.insuff))
|
||||||
plt.axis('equal') # Equal aspect ratio ensures that pie is drawn as a circle.
|
print("reason(c): ", sc.detail_suff[0], sc.detail_insuff[0], sc.detail_insuff[0] / (sc.detail_suff[0] + sc.detail_insuff[0]))
|
||||||
# plt.show()
|
print("reason(d): ", sc.detail_suff[1], sc.detail_insuff[1], sc.detail_insuff[1] / (sc.detail_suff[1] + sc.detail_insuff[1]))
|
||||||
plt.savefig("graph/fail_reason_%s_%s.eps"%(op, mode))
|
print('SURVIVE')
|
||||||
|
ss = Solution('SURVIVE')
|
||||||
|
nps_after = ss.new_partner_reason()
|
||||||
|
print("reason: ", ss.suff, ss.insuff, ss.insuff / (ss.suff + ss.insuff))
|
||||||
|
print("reason(c): ", ss.detail_suff[0], ss.detail_insuff[0], ss.detail_insuff[0] / (ss.detail_suff[0] + ss.detail_insuff[0]))
|
||||||
|
print("reason(d): ", ss.detail_suff[1], ss.detail_insuff[1], ss.detail_insuff[1] / (ss.detail_suff[1] + ss.detail_insuff[1]))
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
from scipy.stats import chi2_contingency as chi2
|
from scipy.stats import chi2_contingency as chi2
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
obs = np.array([[203.0, 49.0], [279.0, 78.0]])
|
obs = np.array([[290.0, 1023.0], [30.0, 321.0]])
|
||||||
chi,p,dof,expected = chi2(obs)
|
chi,p,dof,expected = chi2(obs)
|
||||||
print("%f, %e, %f" % (chi, p, dof))
|
print("%f, %e, %f" % (chi, p, dof))
|
||||||
|
|
||||||
|
|||||||
55
food_loss.py
55
food_loss.py
@ -1,5 +1,6 @@
|
|||||||
import json
|
import json
|
||||||
from matplotlib import pyplot as plt
|
from matplotlib import pyplot as plt
|
||||||
|
from matplotlib import patches as pch
|
||||||
from island.match import Match
|
from island.match import Match
|
||||||
from island.matches import Matches
|
from island.matches import Matches
|
||||||
import numpy as np
|
import numpy as np
|
||||||
@ -12,6 +13,9 @@ class Solution:
|
|||||||
self.matches = Matches.from_profile_expr(lambda r: mode in r)
|
self.matches = Matches.from_profile_expr(lambda r: mode in r)
|
||||||
|
|
||||||
def food_loss(self):
|
def food_loss(self):
|
||||||
|
survivals = {}
|
||||||
|
with open('survivals.json', 'r') as f:
|
||||||
|
survivals = json.load(f)
|
||||||
fl = [[],[]]
|
fl = [[],[]]
|
||||||
payoff = {
|
payoff = {
|
||||||
'C': {
|
'C': {
|
||||||
@ -30,46 +34,57 @@ class Solution:
|
|||||||
for p in m.query('player', 'join').raw_data:
|
for p in m.query('player', 'join').raw_data:
|
||||||
pid = p['pid']
|
pid = p['pid']
|
||||||
for i in range(2, game_end_at):
|
for i in range(2, game_end_at):
|
||||||
|
if pid not in survivals[m.name][str(i)]: break
|
||||||
c, t = 0, 0
|
c, t = 0, 0
|
||||||
for r in m.query('action', 'done').where(lambda x: x['rno'] == i - 1 and (x['a'] == pid or x['b'] == pid)).raw_data:
|
for r in m.query('action', 'done').where(lambda x: x['rno'] == i - 1 and (x['a'] == pid or x['b'] == pid)).raw_data:
|
||||||
if r['act_a' if r['a'] == pid else 'act_b'] == 'C':
|
if r['act_a' if r['a'] == pid else 'act_b'] == 'C':
|
||||||
c += 1
|
c += 1
|
||||||
t += 1
|
t += 1
|
||||||
is_coop = 0 if c * 2 >= t else 1
|
is_coop = 0 if c * 2 >= t else 1
|
||||||
f = -3.0
|
f = -3.0 if self.mode == 'SURVIVE' else 0
|
||||||
for r in m.query('action', 'done').where(lambda x: x['rno'] == i and (x['a'] == pid or x['b'] == pid)).raw_data:
|
for r in m.query('action', 'done').where(lambda x: x['rno'] == i and (x['a'] == pid or x['b'] == pid)).raw_data:
|
||||||
if r['a'] == pid:
|
if r['a'] == pid:
|
||||||
f += payoff[r['act_a']][r['act_b']] * r['tr'] / 1440.0
|
f += payoff[r['act_a']][r['act_b']] * r['tr'] / 1440.0
|
||||||
else:
|
else:
|
||||||
f += payoff[r['act_b']][r['act_a']] * r['tr'] / 1440.0
|
f += payoff[r['act_b']][r['act_a']] * r['tr'] / 1440.0
|
||||||
fl[is_coop].append(f)
|
fl[is_coop].append(-f)
|
||||||
|
print(len(fl[0]), len(fl[1]))
|
||||||
|
print(sum(fl[0]) / len(fl[0]), sum(fl[1]) / len(fl[1]))
|
||||||
return fl
|
return fl
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
mode = 'SURVIVE'
|
sc = Solution('CLASSIC')
|
||||||
s = Solution(mode)
|
fc = sc.food_loss()
|
||||||
f = s.food_loss()
|
ss = Solution('SURVIVE')
|
||||||
|
fs = ss.food_loss()
|
||||||
blue = '#0984e3'
|
blue = '#0984e3'
|
||||||
red = '#d63031'
|
red = '#d63031'
|
||||||
|
green = '#00b894'
|
||||||
c = [blue, red]
|
c = [blue, red]
|
||||||
labels = ['C', 'D']
|
labels = ['Dissipative', 'Classic']
|
||||||
fig = plt.figure(figsize=(3, 3))
|
fig = plt.figure(figsize=(8, 6))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
error_config = {'ecolor': '0.3', 'capsize': 4}
|
index = np.arange(2)
|
||||||
bplot = ax.boxplot(f,
|
widths = 0.3
|
||||||
vert=True, # vertical box alignment
|
|
||||||
patch_artist=True, # fill with color
|
|
||||||
notch=True, # notch shape
|
|
||||||
labels=labels) # will be used to label x-ticks
|
|
||||||
|
|
||||||
for patch, color in zip(bplot['boxes'], c):
|
vp1 = ax.violinplot(fs, positions=index-widths/2, widths=widths, showmeans=True, showmedians=True)
|
||||||
patch.set_facecolor(color)
|
vp2 = ax.violinplot(fc, positions=index+widths/2, widths=widths, showmeans=True, showmedians=True)
|
||||||
ax.set_ylabel('Frequency')
|
hdl1 = pch.Patch(facecolor=vp1['bodies'][0].get_facecolor()[0])
|
||||||
|
hdl2 = pch.Patch(facecolor=vp2['bodies'][0].get_facecolor()[0])
|
||||||
|
vp1['cmeans'].set_edgecolor(green)
|
||||||
|
vp1['cmeans'].set_linestyle(':')
|
||||||
|
vp2['cmeans'].set_edgecolor(green)
|
||||||
|
vp2['cmeans'].set_linestyle(':')
|
||||||
|
ax.set_ylabel('Food Loss')
|
||||||
|
ax.yaxis.grid(True, linestyle='--')
|
||||||
# ax.set_title('Scores by group and gender')
|
# ax.set_title('Scores by group and gender')
|
||||||
|
ax.set_xticks(index)
|
||||||
ax.legend()
|
ax.set_xticklabels(['C', 'D'])
|
||||||
|
ax.set_ylim(-6, 4)
|
||||||
|
ax.set_xlabel("Previous Move")
|
||||||
|
ax.legend([hdl1, hdl2], labels)
|
||||||
|
|
||||||
fig.tight_layout()
|
fig.tight_layout()
|
||||||
plt.show()
|
# plt.show()
|
||||||
# plt.savefig("graph/new_partner_bar_%s.eps" % mode)
|
plt.savefig("graph/FoodLoss.svg")
|
||||||
|
|||||||
@ -10,6 +10,7 @@ class Match:
|
|||||||
"""
|
"""
|
||||||
:param json_string: string represents data in json format
|
:param json_string: string represents data in json format
|
||||||
"""
|
"""
|
||||||
|
self.name = ''
|
||||||
if dtype == 'json':
|
if dtype == 'json':
|
||||||
self.raw_data = json.loads(raw)
|
self.raw_data = json.loads(raw)
|
||||||
self.dtype = 'json'
|
self.dtype = 'json'
|
||||||
|
|||||||
@ -11,11 +11,13 @@ class Matches:
|
|||||||
if from_list:
|
if from_list:
|
||||||
for l in source:
|
for l in source:
|
||||||
self.data.append(Match.read_from_json(l))
|
self.data.append(Match.read_from_json(l))
|
||||||
|
self.data[-1].name = Path(l).stem
|
||||||
self.names.append(Path(l).stem)
|
self.names.append(Path(l).stem)
|
||||||
else:
|
else:
|
||||||
for f in Path(source).iterdir():
|
for f in Path(source).iterdir():
|
||||||
if Path(f).suffix == '.json':
|
if Path(f).suffix == '.json':
|
||||||
self.data.append(Match.read_from_json(str(f)))
|
self.data.append(Match.read_from_json(str(f)))
|
||||||
|
self.data[-1].name = Path(f).stem
|
||||||
self.names.append(Path(f).stem)
|
self.names.append(Path(f).stem)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
|
|||||||
@ -75,14 +75,16 @@ class Solution:
|
|||||||
new_partner_succ += 1
|
new_partner_succ += 1
|
||||||
su_after[is_coop] += new_partner_succ
|
su_after[is_coop] += new_partner_succ
|
||||||
for i, _ in enumerate(su_after):
|
for i, _ in enumerate(su_after):
|
||||||
|
print(su_after[i], re_after[i], su_after[i] / re_after[i])
|
||||||
su_after[i] /= re_after[i]
|
su_after[i] /= re_after[i]
|
||||||
return su_after
|
return su_after
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
mode = 'CLASSIC'
|
sc = Solution('CLASSIC')
|
||||||
s = Solution(mode)
|
npc_after = sc.new_partner_after()
|
||||||
su_after = s.new_partner_after()
|
ss = Solution('SURVIVE')
|
||||||
|
nps_after = ss.new_partner_after()
|
||||||
index = np.arange(2)
|
index = np.arange(2)
|
||||||
|
|
||||||
blue = '#0984e3'
|
blue = '#0984e3'
|
||||||
@ -90,20 +92,23 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
fig = plt.figure(figsize=(3, 3))
|
fig = plt.figure(figsize=(3, 3))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
bar_width = 0.5
|
bar_width = 0.35
|
||||||
opacity = 1
|
opacity = 1
|
||||||
error_config = {'ecolor': '0.3', 'capsize': 4}
|
error_config = {'ecolor': '0.3', 'capsize': 4}
|
||||||
rects1 = ax.bar(index, su_after, bar_width,
|
rects1 = ax.bar(index, nps_after, bar_width,
|
||||||
color=red, label='New Patner')
|
color=red, label='Dissipative')
|
||||||
|
rects2 = ax.bar(index + bar_width, npc_after, bar_width,
|
||||||
|
alpha=opacity, color='#00b894',
|
||||||
|
label='Classic')
|
||||||
|
|
||||||
ax.set_ylabel('Frequency')
|
ax.set_ylabel('Rate')
|
||||||
# ax.set_title('Scores by group and gender')
|
# ax.set_title('Rate of Successfully Making New Partner')
|
||||||
ax.set_xticks(index)
|
ax.set_xlabel('Previous Move')
|
||||||
|
ax.set_xticks(index + bar_width / 2)
|
||||||
ax.set_xticklabels(['C', 'D'])
|
ax.set_xticklabels(['C', 'D'])
|
||||||
ax.set_ylim(0,1)
|
ax.set_ylim(0,1)
|
||||||
ax.set_xlim(-0.5,1.5)
|
|
||||||
ax.legend()
|
ax.legend()
|
||||||
|
|
||||||
fig.tight_layout()
|
fig.tight_layout()
|
||||||
# plt.show()
|
# plt.show()
|
||||||
plt.savefig("graph/new_partner_bar_%s.eps" % mode)
|
# plt.savefig("graph/new_partner_bar.eps")
|
||||||
|
|||||||
@ -18,7 +18,7 @@ def p1(x, rewires, tau, postfix, show):
|
|||||||
ax2 = ax.twinx()
|
ax2 = ax.twinx()
|
||||||
ax2.plot(x, tau, color=red, linewidth=3)
|
ax2.plot(x, tau, color=red, linewidth=3)
|
||||||
ax2.set_ylim(0, 1440)
|
ax2.set_ylim(0, 1440)
|
||||||
ax.set_xlim(1, 14)
|
ax.set_xlim(2, 15)
|
||||||
ax.set_xlabel("Rounds")
|
ax.set_xlabel("Rounds")
|
||||||
ax.set_ylabel("Rewiring Rate", color=green)
|
ax.set_ylabel("Rewiring Rate", color=green)
|
||||||
ax.tick_params(axis='y', labelcolor=green)
|
ax.tick_params(axis='y', labelcolor=green)
|
||||||
@ -31,11 +31,31 @@ def p1(x, rewires, tau, postfix, show):
|
|||||||
else:
|
else:
|
||||||
plt.savefig("graph/tau_p_rewire_plot_%s.eps" % postfix)
|
plt.savefig("graph/tau_p_rewire_plot_%s.eps" % postfix)
|
||||||
|
|
||||||
|
|
||||||
|
def p2c(tau, rewires, show):
|
||||||
|
# # p2散点图
|
||||||
|
fig = plt.figure(figsize=(4, 3))
|
||||||
|
ax = fig.gca()
|
||||||
|
|
||||||
|
plt.scatter(tau, rewires, color=green, linewidths=2, zorder=100)
|
||||||
|
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, 7))
|
||||||
|
ax.set_ylim(0, 0.6)
|
||||||
|
plt.tight_layout()
|
||||||
|
if show:
|
||||||
|
plt.show()
|
||||||
|
else:
|
||||||
|
plt.savefig("graph/tau_p_rewire_sca_c.eps")
|
||||||
|
|
||||||
|
# 皮尔逊相关系数
|
||||||
|
print("pearson: %f, p-value: %f" % pearsonr(tau, rewires))
|
||||||
|
|
||||||
def p2(tau, rewires, postfix, show):
|
def p2(tau, rewires, postfix, show):
|
||||||
# # p2散点图
|
# # p2散点图
|
||||||
fig = plt.figure(figsize=(6.4, 3.6))
|
fig = plt.figure(figsize=(4, 3))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
# ax.set_ylim(0.5, 1)
|
|
||||||
fp1,residuals,rank,sv,rcond = sp.polyfit(tau, rewires, 1, full=True)
|
fp1,residuals,rank,sv,rcond = sp.polyfit(tau, rewires, 1, full=True)
|
||||||
print("残差:",residuals)
|
print("残差:",residuals)
|
||||||
print('Model parameter:',fp1)
|
print('Model parameter:',fp1)
|
||||||
@ -51,7 +71,7 @@ def p2(tau, rewires, postfix, show):
|
|||||||
ax.set_xlabel('$\\tau_{p}$', family='sans-serif')
|
ax.set_xlabel('$\\tau_{p}$', family='sans-serif')
|
||||||
ax.set_ylabel('Rewiring Rate')
|
ax.set_ylabel('Rewiring Rate')
|
||||||
ax.set_xlim(0, 1440)
|
ax.set_xlim(0, 1440)
|
||||||
ax.set_xticks(sp.linspace(0, 1440, 13))
|
ax.set_xticks(sp.linspace(0, 1440, 7))
|
||||||
ax.set_ylim(0, 0.6)
|
ax.set_ylim(0, 0.6)
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
if show:
|
if show:
|
||||||
@ -64,7 +84,7 @@ def p2(tau, rewires, postfix, show):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
mode = 'CLASSIC'
|
mode = 'SURVIVE'
|
||||||
matches = Matches.from_profile_expr(lambda r: mode in r)
|
matches = Matches.from_profile_expr(lambda r: mode in r)
|
||||||
max_round = 15
|
max_round = 15
|
||||||
|
|
||||||
@ -74,7 +94,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
neighbors = {}
|
neighbors = {}
|
||||||
rewires = []
|
rewires = []
|
||||||
x = np.arange(1, max_round)
|
x = np.arange(2, max_round+1)
|
||||||
mwRe = {} # Match-wise frequency of rewiring
|
mwRe = {} # Match-wise frequency of rewiring
|
||||||
mwTau = {} # Match-wise Tau
|
mwTau = {} # Match-wise Tau
|
||||||
tau = []
|
tau = []
|
||||||
@ -94,7 +114,7 @@ if __name__ == '__main__':
|
|||||||
n[r['b']] = [r['a']]
|
n[r['b']] = [r['a']]
|
||||||
neighbors[matches.names[i]] = n
|
neighbors[matches.names[i]] = n
|
||||||
|
|
||||||
for i in range(max_round-1):
|
for i in range(1, max_round):
|
||||||
re = []
|
re = []
|
||||||
for j in range(len(matches.data)):
|
for j in range(len(matches.data)):
|
||||||
rewire = 0
|
rewire = 0
|
||||||
@ -110,7 +130,7 @@ if __name__ == '__main__':
|
|||||||
rewires.append(np.average(re))
|
rewires.append(np.average(re))
|
||||||
|
|
||||||
|
|
||||||
for i in range(max_round-1):
|
for i in range(1, max_round):
|
||||||
tp = []
|
tp = []
|
||||||
for j in range(len(matches.data)):
|
for j in range(len(matches.data)):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
@ -148,8 +168,10 @@ if __name__ == '__main__':
|
|||||||
red = '#d63031'
|
red = '#d63031'
|
||||||
|
|
||||||
# p1折线图
|
# p1折线图
|
||||||
# p1(x, rewires, tau, mode, False)
|
# p1(x, rewires, tau, mode, True)
|
||||||
p2(tau, rewires, mode, False)
|
# p2c(tau, rewires, False)
|
||||||
|
p2(tau[:12], rewires[:12], mode, False)
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
classic
|
classic
|
||||||
@ -157,12 +179,12 @@ classic
|
|||||||
Model parameter: [ 9.81549075e-04 -9.87729952e-01]
|
Model parameter: [ 9.81549075e-04 -9.87729952e-01]
|
||||||
error= 0.058738
|
error= 0.058738
|
||||||
Other parameters: rank=2, sv=[ 1.41291267 0.06064473], rcond=3.10862446895e-15
|
Other parameters: rank=2, sv=[ 1.41291267 0.06064473], rcond=3.10862446895e-15
|
||||||
pearson: 0.823000, p-value: 0.000300
|
pearson: -0.507660, p-value: 0.063859
|
||||||
|
|
||||||
survive
|
survive
|
||||||
残差: [ 0.05788203]
|
残差: [ 0.00293523]
|
||||||
Model parameter: [ 0.00033232 -0.06283898]
|
Model parameter: [ 0.00016483 -0.02259405]
|
||||||
error= 0.057882
|
error= 0.002935
|
||||||
Other parameters: rank=2, sv=[ 1.3284034 0.48512309], rcond=3.10862446895e-15
|
Other parameters: rank=2, sv=[ 1.33437859 0.46843758], rcond=2.6645352591e-15
|
||||||
pearson: 0.893237, p-value: 0.000017
|
pearson: 0.947167, p-value: 0.000003
|
||||||
'''
|
'''
|
||||||
|
|||||||
48
tau_p_co.py
48
tau_p_co.py
@ -15,20 +15,21 @@ def error(f,x,y):
|
|||||||
return sp.sum((f(x)-y)**2)
|
return sp.sum((f(x)-y)**2)
|
||||||
|
|
||||||
def p1(x, coopr, tau, postfix, show=True):
|
def p1(x, coopr, tau, postfix, show=True):
|
||||||
fig = plt.figure(figsize=(6.4, 3.6))
|
fig = plt.figure(figsize=(5, 4))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
ax.plot(x, coopr, color=blue, linewidth=3)
|
ax.plot(x, coopr, color=blue, linewidth=2, label="$f_c$")
|
||||||
ax.set_ylim(0.5, 1)
|
ax.set_ylim(0, 1)
|
||||||
ax2 = ax.twinx()
|
ax2 = ax.twinx()
|
||||||
ax2.plot(x, tau, color=red, linewidth=3)
|
ax2.plot(x, tau, color=red, linewidth=2, label=r"$\tau_p$")
|
||||||
ax2.set_ylim(0, 1440)
|
ax2.set_ylim(0, 1440)
|
||||||
ax.set_xlim(1, 14)
|
ax.set_xlim(1, 15)
|
||||||
ax.set_xlabel("Rounds")
|
ax.set_xlabel("Rounds")
|
||||||
ax.set_ylabel("Frequency of Cooperation", color=blue)
|
ax.set_ylabel(r"$f_c$", color=blue)
|
||||||
ax.tick_params(axis='y', labelcolor=blue)
|
ax.tick_params(axis='y', labelcolor=blue)
|
||||||
ax2.set_ylabel("$\\tau_{p}$", family='sans-serif', color=red)
|
ax2.set_ylabel(r"$\tau_{p}$", family='sans-serif', color=red)
|
||||||
ax2.tick_params(axis='y', labelcolor=red)
|
ax2.tick_params(axis='y', labelcolor=red)
|
||||||
|
|
||||||
|
fig.legend()
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
if show:
|
if show:
|
||||||
plt.show()
|
plt.show()
|
||||||
@ -49,7 +50,7 @@ def p2(tau, coopr, limited, postfix, show=True):
|
|||||||
coopr_r.append(coopr[i])
|
coopr_r.append(coopr[i])
|
||||||
|
|
||||||
# p2散点图
|
# p2散点图
|
||||||
fig = plt.figure(figsize=(6.4, 3.6))
|
fig = plt.figure(figsize=(4, 3))
|
||||||
ax = fig.gca()
|
ax = fig.gca()
|
||||||
# ax.set_ylim(0.5, 1)
|
# ax.set_ylim(0.5, 1)
|
||||||
fp1,residuals,rank,sv,rcond = sp.polyfit(tau2, coopr2, 1, full=True)
|
fp1,residuals,rank,sv,rcond = sp.polyfit(tau2, coopr2, 1, full=True)
|
||||||
@ -63,10 +64,10 @@ def p2(tau, coopr, limited, postfix, show=True):
|
|||||||
plt.plot(fx,f1(fx),linewidth=2,color=red, ls='--', zorder=0)
|
plt.plot(fx,f1(fx),linewidth=2,color=red, ls='--', zorder=0)
|
||||||
plt.scatter(tau2, coopr2, color=blue, linewidths=2, zorder=100)
|
plt.scatter(tau2, coopr2, color=blue, linewidths=2, zorder=100)
|
||||||
plt.scatter(tau_r, coopr_r, color='white', edgecolors=blue, linewidths=2, zorder=101)
|
plt.scatter(tau_r, coopr_r, color='white', edgecolors=blue, linewidths=2, zorder=101)
|
||||||
ax.set_xlabel('$\\tau_{p}$', family='sans-serif')
|
ax.set_xlabel(r'$\tau_{p}$', family='sans-serif')
|
||||||
ax.set_ylabel('Frequency of Cooperation')
|
ax.set_ylabel(r'$f_{c}$', family='sans-serif')
|
||||||
ax.set_xlim(0, 1440)
|
ax.set_xlim(0, 1440)
|
||||||
ax.set_xticks(sp.linspace(0, 1440, 13))
|
ax.set_xticks(sp.linspace(0, 1440, 7))
|
||||||
ax.set_ylim(0.5, 1)
|
ax.set_ylim(0.5, 1)
|
||||||
plt.tight_layout()
|
plt.tight_layout()
|
||||||
if show:
|
if show:
|
||||||
@ -88,7 +89,7 @@ if __name__ == '__main__':
|
|||||||
|
|
||||||
neighbors = {}
|
neighbors = {}
|
||||||
coopr = []
|
coopr = []
|
||||||
x = np.arange(1, max_round)
|
x = np.arange(1, max_round+1)
|
||||||
mwCo = {} # Match-wise frequency of cooperation
|
mwCo = {} # Match-wise frequency of cooperation
|
||||||
mwTau = {} # Match-wise Tau
|
mwTau = {} # Match-wise Tau
|
||||||
bx = []
|
bx = []
|
||||||
@ -109,7 +110,7 @@ if __name__ == '__main__':
|
|||||||
n[r['b']] = [r['a']]
|
n[r['b']] = [r['a']]
|
||||||
neighbors[matches.names[i]] = n
|
neighbors[matches.names[i]] = n
|
||||||
|
|
||||||
for i in range(max_round-1):
|
for i in range(max_round):
|
||||||
co = []
|
co = []
|
||||||
for j in range(len(matches.data)):
|
for j in range(len(matches.data)):
|
||||||
coop = 0
|
coop = 0
|
||||||
@ -130,7 +131,7 @@ if __name__ == '__main__':
|
|||||||
coopr.append(0)
|
coopr.append(0)
|
||||||
|
|
||||||
|
|
||||||
for i in range(max_round-1):
|
for i in range(max_round):
|
||||||
tp = []
|
tp = []
|
||||||
for j in range(len(matches.data)):
|
for j in range(len(matches.data)):
|
||||||
if i == 0:
|
if i == 0:
|
||||||
@ -168,18 +169,13 @@ if __name__ == '__main__':
|
|||||||
red = '#d63031'
|
red = '#d63031'
|
||||||
|
|
||||||
# p1折线图
|
# p1折线图
|
||||||
# p1(x, coopr, tau, 'survive', False)
|
# p1(x, coopr, tau, 'classic', False)
|
||||||
|
|
||||||
p2(tau[:12], coopr[:12], 720, 'survive', False)
|
p2(tau[:12], coopr[:12], 720, 'survive', True)
|
||||||
|
# p2(tau, coopr, 1440, 'classic', False)
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
classic
|
|
||||||
残差: [ 0.00317365]
|
|
||||||
Model parameter: [ -1.24291981e-04 9.70766132e-01]
|
|
||||||
Other parameters: rank=2, sv=[ 1.41276801 0.06392615], rcond=2.6645352591e-15
|
|
||||||
error= 0.003174
|
|
||||||
pearson: -0.607866, p-value: 0.036010
|
|
||||||
|
|
||||||
survive
|
survive
|
||||||
残差: [ 0.00548837]
|
残差: [ 0.00548837]
|
||||||
@ -187,4 +183,12 @@ if __name__ == '__main__':
|
|||||||
Other parameters: rank=2, sv=[ 1.36321571 0.37635479], rcond=1.99840144433e-15
|
Other parameters: rank=2, sv=[ 1.36321571 0.37635479], rcond=1.99840144433e-15
|
||||||
error= 0.005488
|
error= 0.005488
|
||||||
pearson: -0.829102, p-value: 0.005723
|
pearson: -0.829102, p-value: 0.005723
|
||||||
|
|
||||||
|
classic
|
||||||
|
残差: [ 0.00489393]
|
||||||
|
Model parameter: [ -1.38823596e-04 9.82787424e-01]
|
||||||
|
Other parameters: rank=2, sv=[ 1.41298532 0.05892772], rcond=3.33066907388e-15
|
||||||
|
error= 0.004894
|
||||||
|
pearson: -0.582154, p-value: 0.022790
|
||||||
|
|
||||||
'''
|
'''
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user