示例#1
0
 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)
示例#2
0
    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
示例#3
0
    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
示例#4
0
 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)
示例#5
0
    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')
示例#8
0
    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
示例#9
0
 def get_object(self, program_1, program_2):
     return Rule_of_28_Player_PS(program_1, program_2)
示例#10
0
    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