예제 #1
0
 def multi_drag_test(self):
     line_edits = [self.add_test_form.v_m_drag_loop_num,self.add_test_form.v_m_drag_i_time,\
             self.add_test_form.v_m_drag_time,self.add_test_form.v_m_drag_trip_i_time ]
     extra_msg = ""
     try:
         drag_tuple = tuple(self.add_test_form.points_list_drag)
         if( ((-1,-1),(-1,-1)) in drag_tuple):
             id = drag_tuple.index((-1,-1),(-1,-1))
             p_e = pointNotEnoughException(id + 1)
             raise p_e
         self.placeholder_to_text(line_edits)
         trip_number = int(line_edits[0].text())
         trip_interval_time = float(line_edits[1].text())
         drag_during_time = float(line_edits[2].text())
         drag_interval_time = float(line_edits[3].text())
         in_range,extra_msg = self.range_inside(loop_times = trip_number,interval_time = drag_interval_time,loop_interval_time = trip_interval_time,during_time = drag_during_time)
         if(not in_range):
             raise rangeErrorException()
         Monkey.multi_drag(drag_tuple,trip_number,drag_interval_time,drag_during_time,trip_interval_time)
         self.add_test_form.currentQueueList.addItem('多次顺序滑动: 循环%d次,循环内滑动间隔%f秒,滑动持续时间%f秒,循环间隔%f秒' %(trip_number,drag_interval_time,drag_during_time,trip_interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,self.empty_error_code,extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,self.logic_error_code,extra_msg)
     except pointNotEnoughException:
         self.error_message_prompt(self.add_test_form,self.not_enough_code,str(p_e.index))
예제 #2
0
 def add_single_long_touch_test(self):
     extra_msg = ""
     try:
         x = int(self.add_test_form.v_press_pos_x.text())
         y = int(self.add_test_form.v_press_pos_y.text())
         self.placeholder_to_text(self.add_test_form.v_press_time,
                                  self.add_test_form.v_press_num,
                                  self.add_test_form.v_press_i_time)
         during_time = float(self.add_test_form.v_press_time.text())
         touch_number = int(self.add_test_form.v_press_num.text())
         interval_time = float(self.add_test_form.v_press_i_time.text())
         #print(self.test_form.max_x)
         in_range, extra_msg = self.range_inside(
             x=x,
             y=y,
             during_time=during_time,
             click_times=touch_number,
             interval_time=interval_time)
         if (not in_range):
             raise rangeErrorException()
         Monkey.long_touch(x, y, touch_number, interval_time)
         self.add_test_form.currentQueueList.addItem(
             '单点长按测试: %s,持续%ds,%d次,间隔%fs' % (str(
                 (x, y)), during_time, touch_number, interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,
                                   self.empty_error_code, extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,
                                   self.logic_error_code, extra_msg)
예제 #3
0
 def long_touch_drag_test(self):
     extra_msg = ""
     try:
         self.placeholder_to_text(self.add_test_form.v_press_drag_num,self.add_test_form.v_press_drag_p_time,\
             self.add_test_form.v_press_drag_p_time_2,self.add_test_form.v_press_drag_p_time_3)
         x1 = int(self.add_test_form.v_press_drag_start_p_x.text())
         y1 = int(self.add_test_form.v_press_drag_start_p_y.text())
         x2 = int(self.add_test_form.v_press_drag_end_p_x.text())
         y2 = int(self.add_test_form.v_press_drag_end_p_y.text())
         touch_number = int(self.add_test_form.v_press_drag_num.text())
         touch_time = float(self.add_test_form.v_press_drag_p_time.text())
         drag_during_time = float(self.add_test_form.v_press_drag_p_time_2.text())
         interval_time = float(self.add_test_form.v_press_drag_p_time_3.text())
         in_range,extra_msg = self.range_inside(x = x1,y = y1,click_times = touch_number,during_time =drag_during_time, interval_time = interval_time)
         if(not in_range):
             raise rangeErrorException()
         in_range2,extra_msg =self.range_inside(x = x2,y = y2,during_time = touch_time)
         if(not in_range2):
             raise rangeErrorException()
         point_list = ((x1,y1),(x2,y2))
         Monkey.touch_drag(point_list,touch_time,drag_during_time,touch_number,interval_time)
         self.add_test_form.currentQueueList.addItem('长按滑动测试: (%d,%d)到(%d,%d),长按持续%fs,滑动持续%fs,长按滑动点击%d次,两次间隔%fs' %(x1,y1,x2,y2,touch_time,drag_during_time,touch_number,interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,self.empty_error_code,extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,self.logic_error_code,extra_msg)
예제 #4
0
 def drag_test(self):
     extra_msg = ""
     point_list = None
     try:
         self.placeholder_to_text(self.add_test_form.v_drag_num,
                                  self.add_test_form.v_drag_i_time)
         x1 = int(self.add_test_form.v_drag_p1_x.text())
         y1 = int(self.add_test_form.v_drag_p1_y.text())
         x2 = int(self.add_test_form.v_drag_p2_x.text())
         y2 = int(self.add_test_form.v_drag_p2_y.text())
         drag_number = int(self.add_test_form.v_drag_num.text())
         during_time = float(self.add_test_form.v_drag_time.text())
         interval_time = float(self.add_test_form.v_drag_i_time.text())
         in_range, extra_msg = self.range_inside(
             x=x1,
             y=y1,
             drag_times=drag_number,
             during_time=during_time,
             interval_time=interval_time)
         if (not in_range):
             raise rangeErrorException()
         in_range2, extra_msg = self.range_inside(x=x2, y=y2)
         if (not in_range2):
             raise rangeErrorException()
         point_list = ((x1, y1), (x2, y2))
         Monkey.drag(point_list, during_time, drag_number, interval_time)
         self.add_test_form.currentQueueList.addItem(
             '单线滑动测试: (%d,%d)到(%d,%d),滑动持续%ds,点击%d次,间隔%fs' %
             (x1, y1, x2, y2, during_time, drag_number, interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,
                                   self.empty_error_code, extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,
                                   self.logic_error_code, extra_msg)
예제 #5
0
 def random_touch_test(self):
     extra_msg = ""
     point_list = None
     try:
         self.placeholder_to_text(self.add_test_form.v_r_touch_num,self.add_test_form.v_r_touch_i_time)
         if(self.add_test_form.v_r_touch_p1_x.text() == '' and self.add_test_form.v_r_touch_p1_x.text() == ''\
             and self.add_test_form.v_r_touch_p1_x.text() == '' and self.add_test_form.v_r_touch_p1_x.text() == ''):
             touch_number = int(self.add_test_form.v_r_touch_num.text())
             interval_time = float(self.add_test_form.v_r_touch_i_time.text())
             #没有x1y1 和x2y2的情况
             in_range,extra_msg = self.range_inside(click_times = touch_number,interval_time = interval_time)
             if(not in_range):
                 raise rangeErrorException()
         else:
             x1 = int(self.add_test_form.v_r_touch_p1_x.text())
             y1 = int(self.add_test_form.v_r_touch_p1_y.text())
             x2 = int(self.add_test_form.v_r_touch_p2_x.text())
             y2 = int(self.add_test_form.v_r_touch_p2_y.text())
             touch_number = int(self.add_test_form.v_r_touch_num.text())
             interval_time = float(self.add_test_form.v_r_touch_i_time.text())
             #有两个点坐标的情况
             in_range,extra_msg = self.range_inside(x = x1,y = y1,click_times = touch_number,interval_time = interval_time)
             if(not in_range):
                 raise rangeErrorException()
             in_range2,extra_msg =self.range_inside(x = x2,y = y2)
             if(not in_range2):
                 raise rangeErrorException()
             point_list = ((x1,y1),(x2,y2))
         Monkey.random_touch(point_list,touch_number,interval_time)
         self.add_test_form.currentQueueList.addItem('随机点击测试: 点击%d次,间隔%fs' %(touch_number,interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,self.empty_error_code,extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,self.logic_error_code,extra_msg)
예제 #6
0
def drag():
    print("UI: drag add")
    x1 = int(e_x1.get())
    y1 = int(e_y1.get())
    x2 = int(e_x2.get())
    y2 = int(e_y2.get())
    pointlist = ((x1, y1), (x2, y2))
    Monkey.drag(pointlist)
예제 #7
0
    def dropEvent(self, event):
        print('%d ' % self.currentRow(), end='')
        index1 = self.currentRow()

        super(MyCurrentQueue, self).dropEvent(event)
        index2 = self.currentRow()
        Monkey.change(index1 + 1, index2 + 1)
        print(self.currentRow())
예제 #8
0
def refresh():
    Monkey.refresh()
    time.sleep(2)
    ##    pilimage = Image.open("refreshshot.png")
    ##    tkimage = ImageTk.PhotoImage(image=pilimage)
    ##    labelshot = Label(root, image=tkimage)
    ##    labelshot.grid(row = 5, column = 3)
    bm = PhotoImage(file='refreshshot.png')
    lableshot.configure(image=bm)
    root.update()
예제 #9
0
 def random_drag_test(self):
     extra_msg = ""
     point_list = None
     try:
         self.placeholder_to_text(self.add_test_form.v_r_drag_num,
                                  self.add_test_form.v_r_drag_i_time,
                                  self.add_test_form.v_r_drag_time)
         if(self.add_test_form.v_r_drag_start_p_x.text() == '' and self.add_test_form.v_r_drag_start_p_y.text() == ''\
             and self.add_test_form.v_r_drag_end_p_x.text() == '' and self.add_test_form.v_r_drag_end_p_y.text() == ''):
             drag_number = int(self.add_test_form.v_r_drag_num.text())
             interval_time = float(
                 self.add_test_form.v_r_drag_i_time.text())
             drag_during_time = float(
                 self.add_test_form.v_r_drag_time.text())
             #没有x1y1 和x2y2的情况
             in_range, extra_msg = self.range_inside(
                 drag_times=drag_number,
                 interval_time=interval_time,
                 during_time=drag_during_time)
             if (not in_range):
                 raise rangeErrorException()
         else:
             x1 = int(self.add_test_form.v_r_drag_start_p_x.text())
             y1 = int(self.add_test_form.v_r_drag_start_p_y.text())
             x2 = int(self.add_test_form.v_r_drag_end_p_x.text())
             y2 = int(self.add_test_form.v_r_drag_end_p_y.text())
             drag_number = int(self.add_test_form.v_r_drag_num.text())
             interval_time = float(
                 self.add_test_form.v_r_drag_i_time.text())
             drag_during_time = float(
                 self.add_test_form.v_r_drag_time.text())
             #没有x1y1 和x2y2的情况
             in_range, extra_msg = self.range_inside(
                 x=x1,
                 y=y1,
                 drag_times=drag_number,
                 interval_time=interval_time,
                 during_time=drag_during_time)
             if (not in_range):
                 raise rangeErrorException()
             in_range2, extra_msg = self.range_inside(x=x2, y=y2)
             if (not in_range2):
                 raise rangeErrorException()
             point_list = ((x1, y1), (x2, y2))
         Monkey.random_drag(point_list, drag_number, interval_time,
                            drag_during_time)
         self.add_test_form.currentQueueList.addItem(
             '随机滑动测试: 滑动%d次,间隔%fs,滑动持续%fs' %
             (drag_number, interval_time, drag_during_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,
                                   self.empty_error_code, extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,
                                   self.logic_error_code, extra_msg)
예제 #10
0
    def start(self):
        picture_file = os.path.join(os.getcwd(), 'screenshot')
        self.add_text('start!',self.test_form.reportList)

        self.model_thread = SimpleModel(picture_collection_path=picture_file, step_length=5, limit_range=100, time_interval=3)
        self.model_thread.start()

        self.log_timer = threading.Timer(0.01,self.log_monitor)
        self.log_timer.start()


        '''self.test_thread = test_thread()
        self.test_thread.start()'''
        '''if debug'''
        #self.read_exception()s
        Monkey.start()
예제 #11
0
def connect():
    print("UI: connection")
    connectflag = Monkey.connect()
    if connectflag:
        tkinter.messagebox.showinfo('提示', '连接成功')
    else:
        tkinter.messagebox.showerror('错误', '连接失败')
예제 #12
0
 def all_random_test(self):
     value = int(self.add_test_form.randomTestNumValue.text())
     if (value == 0):
         return
     else:
         ops = Monkey.all_random(value)
         items = self.operations_to_str(ops)
         self.add_test_form.currentQueueList.addItems(items)
예제 #13
0
 def connect(self):
     self.add_text('waiting for connection\n',self.test_form.reportList)
     connect_successful = Monkey.connect()
     if(connect_successful != False):
         self.add_text('connection successful!\n',self.test_form.reportList)
     else:
         self.add_text('fail to connect your device,please check that if your device connect to computer successfully\n',self.test_form.reportList)
     return connect_successful
예제 #14
0
 def load(self):
     try:
         item_list = Monkey.load('only')
         if(item_list == False):
             self.error_message_prompt(self.test_form,4)
             return
         else:
             strs = self.operations_to_str(item_list)
             self.test_form.queueList.addItems(strs)
     except:
         self.error_message_prompt(self.test_form,4)
예제 #15
0
def generateTrainingDataContinuous(N,filePath,abstractMap,saturateFood=False):
    """
    This is a creator for generating data from the map. The monkey retains its
    location between ticks. The format of the data file is a one-hot integer
    5-list, followed by a float, followed by a list of length corresponding
    to the number of visible spaces in SIGHT.

    Args:
        N: Number of turns allowed in simulation.
        filePath: The path to the output data file.
        abstractMap: An abstracted map (passed through Roomgen.abstract).
        saturateFood: Default False. If True, enough food will be given to the
        to the monkey so it won't die of hunger during the test.

    Returns:
        0: List of all the lines in the output file with not newline character
        at the end                 
    """
    # Create a monkey
    b = Brain.Brain0()
    testMonkey = Monkey.Monkey(b)
    # Create the grid
    g = Grid.Grid([testMonkey], [(3,3)], abstractMap)
    testData = []
    # Find a place to put the monkey
    blocked = True
    while blocked :
        position = (randrange(len(abstractMap)), randrange(len(abstractMap[0])))
        if abstractMap[position[0]][position[1]] == Roomgen.ABSTRACTIONS[' ']:
            blocked = False
    # Put the monkey there
    g.monkeys[0].setPos(position)
    print('Monkey initialized at', position)
    if saturateFood: g.monkeys[0].food = (N+10)*g.monkeys[0].foodPerTurn
    # Go for N turns
    for ii in range(N):
        # Tick
        try:
            direction, surrVec = g.tick(trainingData = True, control='user')
        except Exceptions.DeathError:
            print('Exiting training, returning test data')
            return testData
        # Write data
        directionVector = [0]*len(Roomgen.WASD)
        directionVector[Roomgen.WASD.index(direction)] = 1.0
        testData.append((directionVector, float(g.monkeys[0].food), surrVec.tolist()))
        file = open(filePath, 'a')
        file.write(repr(testData[-1]).replace('\n','').replace(' ',''))
        if ii != N-1:
            file.write('\n')
        file.close()
    return testData
예제 #16
0
 def connect(self):
     print("ok")
     #print_text.insert('end',"TestMethod: waiting for connection..")
     self.add_text('waiting for connection', self.test_window.reportList)
     connect_successful = Monkey.connect()
     if (connect_successful):
         self.add_text('connection successful!',
                       self.test_window.reportList)
     else:
         self.add_text(
             'fail to connect your device,please check that if your device connect to computer successfully',
             self.test_window.reportList)
     '''connect_waiting_timer = threading.Timer(0.5,connect_waiting)
예제 #17
0
 def multi_touch_test(self):
     extra_msg = ""
     try:
         if (self.add_test_form.points_list_touch == None):
             extra_msg = "未输入多点队列:"
             raise ValueError
         point_tuple = tuple(self.add_test_form.points_list_touch)
         if ((-1, -1) in point_tuple):
             id = point_tuple.index((-1, -1))
             p_e = pointNotEnoughException(id + 1)
             raise p_e
         self.placeholder_to_text(self.add_test_form.v_m_touch_i_time,
                                  self.add_test_form.v_m_touch_loop_num,
                                  self.add_test_form.v_m_touch_loop_i_time)
         #during_time = float(self.add_test_form.v_press_time.text())
         loop_number = int(self.add_test_form.v_m_touch_loop_num.text())
         interval_time = float(self.add_test_form.v_m_touch_i_time.text())
         loop_interval_time = float(
             self.add_test_form.v_m_touch_loop_i_time.text())
         in_range, extra_msg = self.range_inside(
             loop_times=loop_number,
             interval_time=interval_time,
             loop_interval_time=loop_interval_time)
         if (not in_range):
             raise rangeErrorException()
         Monkey.multi_touch(point_tuple, loop_number, interval_time,
                            loop_interval_time)
         self.add_test_form.currentQueueList.addItem(
             '多点顺序点击: 循环%d次,循环内点击间隔%f秒,循环间隔%f秒' %
             (loop_number, interval_time, loop_interval_time))
     except ValueError:
         self.error_message_prompt(self.add_test_form,
                                   self.empty_error_code, extra_msg)
     except rangeErrorException:
         self.error_message_prompt(self.add_test_form,
                                   self.logic_error_code, extra_msg)
     except pointNotEnoughException:
         self.error_message_prompt(self.add_test_form, self.not_enough_code,
                                   str(p_e.index))
예제 #18
0
def generateTrainingDataSporadic(N, filePath,abstractMap):
    # This is a creator for generating data from the map
    # The monkey starts at a random location each tick
    # Create a monkey
    b = Brain.Brain0()
    testMonkey = Monkey.Monkey(b)
    # Create the grid
    g = Grid.Grid([testMonkey], [(3,3)], abstractMap)
    testData = []
    # Now go through a bunch of random places to put the monkey and ask the user which way to go
    for ii in range(N):
        blocked = True
        while blocked :
            position = (randrange(len(abstractMap)), randrange(len(abstractMap[0])))
            if abstractMap[position[0]][position[1]] == Roomgen.ABSTRACTIONS[' ']:
                blocked = False
        # Put the monkey there
        g.monkeys[0].setPos(position)
        # Get the surroundings
        surrVec, surrMap = g.surroundingVector(position, True)
        # Print it out
        print('Map')
        print(Roomgen.concretize(surrp, True))
        direction = input('>>>')
        if direction in list(Roomgen.WASD): #Good input
            directionVector = [0]*len(Roomgen.WASD)
            directionVector[Roomgen.WASD.index(direction)] = 1
            testData.append((directionVector, float(g.monkeys[0].food), surrVec.tolist()))
            file = open(filePath, 'a')
            file.write(repr(testData[-1]).replace('\n','').replace(' ',''))
            if ii != N-1:
                file.write('\n')
            file.close()
        else:
            print('Bad input')
    return testData
예제 #19
0
                    '#      d      #    dd      b     #\n'+\
                    '#    b d     #                   #\n'+\
                    '#      d             b   b     ###\n'+\
                    '#         b     #           ######\n'+\
                    '##################################'

roomStart = Roomgen.abstract(roomStartPicture)

# Define number of turns of memory
memoryLength = 15
# Define discount factor
gamma = 0.8
# Instantiate brain
brain = Brain.BrainDQN(memoryLength)
# Instantiate the monkey
mitch = Monkey.MonkeyDQN(brain)
g = Grid.Grid([mitch],[(13,18)],roomStart)


# # Load brain from permanent memory
# brain.load_state_dict(torch.load('brainsave.txt'))

# # Train the monkey with deep Q learning
# Trainer.trainDQN(500, g, gamma, 0.2, 0.05, 100, memoryLength, lr=0.001,loud=True,showEvery=1000)

# # Train the monkey
# for ii in range(10):
#     print(ii)
#     learningRate = 1e-3
#     epochs = 1000
#     reports = 20
예제 #20
0
        # Training starts
        for i in range(num):
            print(f"Training({i + 1}/{num}):")
            GameControl.restart()
            finish = False

            if first:
                turn = GameRule.PLAYER1
            else:
                turn = GameRule.PLAYER2

            # Individual Game
            while not finish:

                if GameControl.whos_turn() == turn:
                    Monkey.take_move()

                else:
                    Master.take_move(player_first=first)

                GameControl.print_game()

                finish = GameControl.is_end()

            # For statistics
            all_history.add(tuple(GameControl.history))

            # Determine winner
            if GameControl.winner() == GameRule.PLAYER1 and not first or (
                    GameControl.winner() == GameRule.PLAYER2 and first):
                print("**Master wins**")
예제 #21
0
def close_monkeyrunner():
    Monkey.close()
예제 #22
0
 def close_monkeyrunner(self):
     Monkey.close()
예제 #23
0
 def clear(self):
     Monkey.clear()
예제 #24
0
 def now_running(self):
     now_index = Monkey.now_running()
     return now_index
예제 #25
0
 def open_app(self, p, a):
     Monkey.open_app(p, a)
예제 #26
0
 def save(self, name):
     Monkey.save(name)
예제 #27
0
 def delete_from_queue(self, index):
     Monkey.delete(index)
예제 #28
0
 def change_queue(self, src, dst):
     Monkey.change(src + 1, dst + 1)
예제 #29
0
 def stop(self):
     self.end_log_monitor = 1
     #self.model_thread.quit_flag = 1
     Monkey.stop()
예제 #30
0
 def set_monkey_ration(self, x, y):
     Monkey.set_resolution_ratio(x, y)