def get_object(self, program): program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) return Rule_of_28_Player_PS(program_yes_no, program)
def eval(self, program): p1 = Rule_of_28_Player_PS(self.program_yes_no, program) p2 = Rule_of_28_Player_PS(self.program_yes_no, program) number_matches_finished = 0 total_number_matches = 50 for i in range(total_number_matches): finished = False try: finished, _ = self.play_match(p1, p2) if finished: number_matches_finished += 1 except Exception: return False, True if number_matches_finished / total_number_matches > 0.6: return True, False return False, False
def eval(self, program): if program.to_string() == self.player_program.to_string(): return False, False br = Rule_of_28_Player_PS(self.program_yes_no, program) player_victories, br_victories, error = self.play_n_matches(5, br) if error: return False, True if br_victories + player_victories == 0: return False, False if (br_victories / (br_victories + player_victories)) < 0.20: return False, False player_victories_2, br_victories_2, error = self.play_n_matches(90, br) player_victories += player_victories_2 br_victories += br_victories_2 if br_victories + player_victories == 0: return False, False if (br_victories / (br_victories + player_victories)) < 0.55: return False, False player_victories_2, br_victories_2, error = self.play_n_matches( 400, br) player_victories += player_victories_2 br_victories += br_victories_2 if br_victories + player_victories == 0: return False, False # consider a best response if defeats the other player in more than 55% of the matches if (br_victories / (br_victories + player_victories)) > 0.55: print('BR victories: ', br_victories) print('Player victories: ', player_victories) print() return True, False return False, False
def get_glenn_player(self): program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) program_decide_column = Argmax( Map( Function( Sum( Map( Function( Minus( Times(NumberAdvancedByAction(), VarScalarFromArray('move_value')), Times(VarScalar('marker'), IsNewNeutral()))), NoneNode()))), VarList('actions'))) return Rule_of_28_Player_PS(program_yes_no, program_decide_column)
def __init__(self, program): self.program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) self.program_decide_column = Argmax( Map( Function( Sum( Map( Function( Minus( Times(NumberAdvancedByAction(), VarScalarFromArray('move_value')), Times(VarScalar('marker'), IsNewNeutral()))), NoneNode()))), VarList('actions'))) self.player = Rule_of_28_Player_PS(self.program_yes_no, program) self.player_program = program
def grow(self, plist, operation, size): new_plist = [] flag = 0 for op in operation: op.grow(plist, new_plist, self.dict, size) for i in new_plist: if (i.toString() not in self.out): self.out.add(i.toString()) print(i.toString(), file=self.f) self.gen_program += 1 if (self.current_best_strategy == None and isinstance(i, Argmax)): self.prog_eval += 1 program_yes_no = Sum( Map( Function( Times( Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) program_decide_column = i p1 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) p2 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) victories1 = 0 victories2 = 0 try: victories1, victories2 = play_n_matches(p1, p2, 50) print(victories1, victories2) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) print("first strategy: ", i.toString()) self.current_best_strategy = i except: pass elif (isinstance(i, Argmax) and i.size <= 10): self.prog_eval += 1 program_yes_no = Sum( Map( Function( Times( Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) p1 = Rule_of_28_Player_PS(program_yes_no, self.current_best_strategy) p2 = Rule_of_28_Player_PS(program_yes_no, i) try: victories1 = 0 victories2 = 0 victories1, victories2 = play_n_matches(p1, p2, 5) if (victories2 >= 2): flag += 1 x, y = play_n_matches(p1, p2, 95) victories1 += x victories2 += y if ((victories2 / (victories1 + victories2)) > .55): x, y = play_n_matches(p1, p2, 400) victories1 += x victories2 += y print(victories1, victories2) print(i.toString()) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) print("IBR", self.IBR) if ((victories2 / (victories1 + victories2)) >= .55): self.IBR += 1 print("New strategy found!!!!!!!!!!!!!!!!") self.current_best_strategy = i if (self.IBR == 5): return self.current_best_strategy except: pass plist.append(i)
Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) program_decide_column = Argmax( Map( Function( Sum( Map( Function( Minus( Times(NumberAdvancedByAction(), VarScalarFromArray('move_value')), Times(VarScalar('marker'), IsNewNeutral()))), None))), VarList('actions'))) print(program_decide_column.toString()) # p1 = RandomPlayer() p1 = Rule_of_28_Player_PS(program_yes_no, b.current_best_strategy) p2 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) victories1 = 0 victories2 = 0 victories1, victories2 = play_n_matches(p1, p2, 500) end = time.time() print(victories1, victories2) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) print("Generated Program: ", b.gen_program) print("Evaluated program: ", b.prog_eval) print(end - start, ' seconds')
def grow(self, plist, operation, size): new_plist = [] self.flag = 0 temp = [] for op in operation: op.grow(plist, new_plist, self.dict, size, self.marker2 - self.marker1) # print("ARgmax: ",c) # print("newplist: ", len(new_plist)) for i in new_plist: if (i.toString() not in self.out): self.out.add(i.toString()) self.prog_generated += 1 if (isinstance(i, Argmax)): temp.append(i) print(i.toString(), file=self.f) if (size < 6): x = calculate_size(i) if (x in self.dict.keys()): self.dict[x].append(i) else: self.dict[x] = [] self.dict[x].append(i) """ """ plist.append(i) # temp.reverse() for i in temp: if (self.current_best_strategy == None and isinstance(i, Argmax)): self.prog_eval += 1 program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) program_decide_column = i p1 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) p2 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) victories1 = 0 victories2 = 0 try: victories1, victories2 = play_n_matches(p1, p2, 50) print("strategy: ", i.toString()) print(victories1, victories2) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) if ((victories1 / (victories1 + victories2)) <= .40 or (victories1 / (victories1 + victories2)) >= .60): print("strategy: ", i.toString()) self.IBR += 1 self.current_best_strategy = i except: pass if (isinstance(i, Argmax) and self.current_best_strategy != None and self.flag < 2000): self.prog_eval += 1 program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) p1 = Rule_of_28_Player_PS(program_yes_no, self.current_best_strategy) p2 = Rule_of_28_Player_PS(program_yes_no, i) try: victories1 = 0 victories2 = 0 victories1, victories2 = play_n_matches(p1, p2, 5) self.flag += 1 if (victories2 >= 2): x, y = play_n_matches(p1, p2, 95) victories1 += x victories2 += y if (victories2 / (victories1 + victories2) >= .55): x, y = play_n_matches(p1, p2, 400) victories1 += x victories2 += y print(victories1, victories2) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) print("strategy: ", i.toString()) print("IBR", self.IBR) if (victories2 / (victories1 + victories2) >= .55): self.IBR += 1 print("New strategy found!!!!!!!!!!!!!!!!") print(i.toString(), file=self.f2) self.current_best_strategy = i if (self.IBR == 5): return self.current_best_strategy except: pass
def get_object(self, program_1, program_2): return Rule_of_28_Player_PS(program_1, program_2)
def grow(self, plist, operation, size): new_plist = [] temp = [] for op in operation: op.grow( plist, new_plist, size, ) for i in new_plist: if (i.toString() not in self.out): self.out.add(i.toString()) self.prog_generated += 1 if (isinstance(i, Argmax)): temp.append(i) print(i.toString(), file=self.f) plist.append(i) for i in temp: self.prog_eval += 1 if (self.current_best_strategy == None): program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) program_decide_column = i p1 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) p2 = Rule_of_28_Player_PS(program_yes_no, program_decide_column) victories1 = 0 victories2 = 0 try: victories1, victories2 = play_n_matches(p1, p2, 50) print(victories1, victories2) print('Player 1: ', victories1 / (victories1 + victories2)) print('Player 2: ', victories2 / (victories1 + victories2)) print("First strategy: ", i.toString()) self.current_best_strategy = i except: pass else: program_yes_no = Sum( Map( Function( Times(Plus(NumberAdvancedThisRound(), Constant(1)), VarScalarFromArray('progress_value'))), VarList('neutrals'))) p1 = Rule_of_28_Player_PS(program_yes_no, self.current_best_strategy) p2 = Rule_of_28_Player_PS(program_yes_no, i) try: victories1 = 0 victories2 = 0 victories1, victories2 = play_n_matches(p1, p2, 500) if (victories2 / (victories1 + victories2) >= .5 and (victories1 + victories2) > 500): self.current_best_strategy = i self.IBR += 1 print("New strategy found!!!!!!!!!!!!!!!!") if (self.IBR == 5): return except: pass