# encoding: utf_8 from random import randint # eliminated because lowest score #def spill_snilt(motspillers_tidligere_valg, egne_tidligere_valg): # teller_svik = 0 # teller_sammarbeid = 0 # for valg in motspillers_tidligere_valg: # if valg == 'svik': # teller_svik += 1 # elif valg == 'samarbeid': # teller_sammarbeid += 1 # else: # raise ValueError # if teller_svik > teller_sammarbeid: # return 'svik' # else: # return 'samarbeid' # eliminated because lowest score #def spill_slemt(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) >= 5: # return 'svik' # else: # return 'samarbeid' # eliminated because lowest score #def spill_tilfeldig(motspillers_tidligere_valg, egne_tidligere_valg): # if randint(0, 1) > 0: # return 'svik' # else: # return 'samarbeid' #def spill_svik(motspillers_tidligere_valg, egne_tidligere_valg): # return 'svik' # elimineated because lowest result #def spill_samarbeid(motspillers_tidligere_valg): # return 'samarbeid' def spill_social(motspillers_tidligere_valg, egne_tidligere_valg): if len(motspillers_tidligere_valg) == 0: return 'samarbeid' else: return motspillers_tidligere_valg[-1] def spill_social_svik_siste(motspillers_tidligere_valg, egne_tidligere_valg): if len(motspillers_tidligere_valg) == 0: return 'samarbeid' elif len(egne_tidligere_valg) == 9: return 'svik' else: return motspillers_tidligere_valg[-1] #def spill_weighted_prob_social(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # elif (motspillers_tidligere_valg.count('teller_sammarbeid') / len(motspillers_tidligere_valg)) >= (2/3): # return 'samarbeid' # else: # return 'svik' #def spill_weighted_prob_unsocial(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # elif (motspillers_tidligere_valg.count('teller_sammarbeid') / len(motspillers_tidligere_valg)) >= (2/3): # return 'samarbeid' # else: # return 'svik' #def spill_weighted_prob_social_svik_siste(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # elif len(motspillers_tidligere_valg) == 9: # return 'svik' # elif (motspillers_tidligere_valg.count('teller_sammarbeid') / len(motspillers_tidligere_valg)) >= (2/3): # return 'samarbeid' # else: # return 'svik' #def spill_weighted_prob_social_svik_siste_og_etter_eget_svik(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # elif 'svik' in egne_tidligere_valg: # return 'svik' # elif len(motspillers_tidligere_valg) == 9: # return 'svik' # elif (motspillers_tidligere_valg.count('teller_sammarbeid') / len(motspillers_tidligere_valg)) >= (2/3): # return 'samarbeid' # else: # return 'svik' #def spill_weighted_prob_social_svik_forste_siste(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # elif len(motspillers_tidligere_valg) == 9: # return 'svik' # elif (motspillers_tidligere_valg.count('teller_sammarbeid') / len(motspillers_tidligere_valg)) >= (2/3): # return 'samarbeid' # else: # return 'svik' #def spill_bare_forste_samarbeid(motspillers_tidligere_valg, egne_tidligere_valg): # if len(motspillers_tidligere_valg) == 0: # return 'samarbeid' # else: # return 'svik' def spill_samarbeid_til_svik(motspillers_tidligere_valg, egne_tidligere_valg): if 'svik' in motspillers_tidligere_valg: return 'svik' else: return 'samarbeid' def spill_samarbeid_til_svik_svik_siste(motspillers_tidligere_valg, egne_tidligere_valg): if len(motspillers_tidligere_valg) >= 9: return 'svik' elif 'svik' in motspillers_tidligere_valg: return 'svik' else: return 'samarbeid' def min_strategi_CHRISRMY(tidl_valg_motstander, tidl_valg): if len(tidl_valg_motstander) == 0: return "samarbeid" else: snitt_samarbeid = tidl_valg_motstander.count("samarbeid") / len(tidl_valg_motstander) if snitt_samarbeid > 0.7: return "samarbeid" else: return "svik" #liste for navn av funksjonene som skal testes list_of_functions = [spill_social, spill_samarbeid_til_svik, spill_samarbeid_til_svik_svik_siste, spill_social_svik_siste, min_strategi_CHRISRMY] def beregn_score(valg_spiller1, valg_spiller2): if valg_spiller1 == 'samarbeid' and valg_spiller2 == 'samarbeid': return [3, 3] elif valg_spiller1 == 'samarbeid' and valg_spiller2 == 'svik': return [0, 5] elif valg_spiller1 == 'svik' and valg_spiller2 == 'samarbeid': return [5, 0] elif valg_spiller1 == 'svik' and valg_spiller2 == 'svik': return [1, 1] else: raise ValueError def utfor_spill_test_egen(funksjon1, funksjon2): valg_spiller1 = [] score_spiller1 = 0 valg_spiller2 = [] score_spiller2 = 0 for i in range(10): # lagrer valget til spilleren i en middlertidig variabel før jeg appender valget til isten over tidligere valg. fordi hvis ikke hvil spiller nummer to vite hva spiller nummer 1 har valgt for denne runden. valg_spiller1_midlertidig = funksjon1(valg_spiller2, valg_spiller1) valg_spiller2_midlertidig = funksjon2(valg_spiller1, valg_spiller2) score_runde = beregn_score(valg_spiller1_midlertidig, valg_spiller2_midlertidig) score_spiller1 += score_runde[0] score_spiller2 += score_runde[1] valg_spiller1.append(valg_spiller1_midlertidig) valg_spiller2.append(valg_spiller2_midlertidig) return score_spiller1, score_spiller2 def utfor_spill_test_list(list_of_functions): #initializing score list score_list = [] for function in list_of_functions: score_list.append(0) # playing evert function against eachother for i in range(0, len(list_of_functions)-1): for j in range(i+1, len(list_of_functions)): temp_score_i, temp_score_j = utfor_spill_test_egen(list_of_functions[i], list_of_functions[j]) score_list[i] += temp_score_i score_list[j] += temp_score_j return score_list print(utfor_spill_test_list(list_of_functions)) def utfor_spill_test_list_100(list_of_functions): #initializing score list total_score_list = [] for function in list_of_functions: total_score_list.append(0) for game in range(0, 100): game_scores = utfor_spill_test_list(list_of_functions) for f in range(len(game_scores)): total_score_list[f] += game_scores[f] max_score = max(total_score_list) index_max_score = total_score_list.index(max_score) print(total_score_list) min_score = min(total_score_list) index_min_score = total_score_list.index(min_score) print("Max score = {}, at index {}, funksjon: {}".format(max_score, index_max_score, list_of_functions[index_max_score])) print("Min score = {}, at index {}, funksjon: {}".format(min_score, index_min_score, list_of_functions[index_min_score])) utfor_spill_test_list_100(list_of_functions)