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))
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)
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)
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)
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)
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)
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())
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()
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)
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()
def connect(): print("UI: connection") connectflag = Monkey.connect() if connectflag: tkinter.messagebox.showinfo('提示', '连接成功') else: tkinter.messagebox.showerror('错误', '连接失败')
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)
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
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)
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
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)
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))
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
'# 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
# 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**")
def close_monkeyrunner(): Monkey.close()
def close_monkeyrunner(self): Monkey.close()
def clear(self): Monkey.clear()
def now_running(self): now_index = Monkey.now_running() return now_index
def open_app(self, p, a): Monkey.open_app(p, a)
def save(self, name): Monkey.save(name)
def delete_from_queue(self, index): Monkey.delete(index)
def change_queue(self, src, dst): Monkey.change(src + 1, dst + 1)
def stop(self): self.end_log_monitor = 1 #self.model_thread.quit_flag = 1 Monkey.stop()
def set_monkey_ration(self, x, y): Monkey.set_resolution_ratio(x, y)