def __init__(self, parentWindow, controller, save, profileNumber): self.__controller = Controller() self.__builder = Gtk.Builder() self.__controller = controller self.__save = save self.__parentWindow = parentWindow self.__profileNumber = profileNumber self.__parentWindow = parentWindow self.__builder.add_from_file( 'views/UploadSaveDialog/UploadSaveDialog.glade') self.__window = self.__builder.get_object("uploadSaveWindow") self.__builder.get_object("saveNameLabel").set_text('" {} "'.format( save.getName())) self.__builder.get_object("profileNameLabel").set_text( '"Profile {}: {}"'.format( self.__profileNumber + 1, self.__controller.getProfilesList()[self.__profileNumber][1])) # Handles: self.__builder.get_object("noButton").connect("clicked", self.__noButtonHandle) self.__builder.get_object("yesButton").connect("clicked", self.__yesButtonHandle) self.__window.connect("key-press-event", self.on_key_press_event)
def test_controller_start(): import sys app = QApplication(sys.argv) app_event_loop = QEventLoop(app) asyncio.set_event_loop(app_event_loop) w = Controller() w.show()
def bot_control(locations): controller = Controller() empty_counter = 0 while True: # 960 x 540 location = locations.get(block=True) if len(location) > 0: location = location[0] # radius - 16, 173 x = location[0] y = location[1] w = location[2] h = location[3] center = x + w / 2 size = w * h print(f"Center is {center}. Size is {size}.") if center < 480: controller.left() elif center > 480: controller.right() if size < 250000: controller.forward(230) elif size > 250000: controller.stop() else: empty_counter += 1 if empty_counter > 10: controller.stop() controller.middle()
def nav_loop(): robot = UgvPlatform() #robot.setColorLut('lut_file.lut') #robot.initImu('accelcal.txt', 'magcal.txt') mpu_valid = -1 print "waiting for GPS fix" gps_service = GpsService() current_pos = gps_service.getPosition() while not current_pos.valid: time.sleep(1) current_pos = gps_service.getPosition() print current_pos.valid while mpu_valid < 0: time.sleep(1.0) mpu_valid = mpu9150.mpuInit(1, 10, 4) print mpu_valid mpu9150.setMagCal('./magcal.txt') mpu9150.setAccCal('./accelcal.txt') #time.sleep(4) wp = StaticWayPointProvider() controller = Controller() threads.append(controller) #gps_service.start() robot.setSteeringFailSafe(0.0) robot.setSpeedFailSafe(ESC_ARM_ANGLE) robot.resetWatchdog() robot.setSteeringAngle(0.0) robot.setSpeed(0) while True: robot.resetWatchdog() target_pos = wp.getCurrentWayPoint() sensors = populateSensorMap(robot, gps_service) current_pos = sensors[Controller.gps_key] imu_sample = sensors[Controller.imu_key] if imu_sample[0] < 0: time.sleep(0.05) continue #print "lat : "+str(current_pos.lat)+" lon :"+str(current_pos.lon)+"imu:"+str(imu_sample) # continue cmd = controller.getCommand(sensors) if cmd == None: break print str(cmd) if cmd.has_key(Controller.next_waypoint_key ) and cmd[Controller.next_waypoint_key] != None and cmd[ Controller.next_waypoint_key] == 1: wp.getNextWaypoint() else: robot.setSteeringAngle(cmd[Controller.steering_key]) robot.setSpeed(cmd[Controller.speed_key]) time.sleep(0.100) robot.setSteeringAngle(0.0) robot.setSpeed(0) print "Shutdown ESC then quit programm (for safety reason)" while True: time.sleep(1)
def init(*args): mainController = Controller() def clear_root(): if sys_input(u'初始化目录将会清除目录下所有文件,是否继续?[yn] ') != 'y': return False clear_dir('.') return True def _init(*args): if not reduce(lambda x, y: x + y, [l for l in os.walk('.').next()[1:]]) or clear_root(): sys_print(u'账户仅需要在第一次使用时设置一次') while 1: isInternational = False expireTime = None sandbox = sys_input(u'是否是沙盒环境?[yn] ') == 'y' if not sandbox: isInternational = sys_input(u'是否是国际用户?[yn] ') == 'y' isSpecialToken = sys_input(u'是否使用开发者Token?[yn] ') == 'y' if isSpecialToken: token = sys_input(u'开发者Token: ') else: token, expireTime = Oauth( sandbox=sandbox, isInternational=isInternational).oauth() # Use special oauth to get token isSpecialToken = True if token: mainController.log_in(token=token, isSpecialToken=isSpecialToken, sandbox=sandbox, isInternational=isInternational, expireTime=expireTime) if mainController.available: mainController.ls.update_config( token=token, isSpecialToken=isSpecialToken, sandbox=sandbox, isInternational=isInternational, expireTime=expireTime) sys_print(u'登陆成功') break else: sys_print(u'登录失败') if sys_input(u'重试登录?[yn] ') != 'y': break else: sys_print(u'登录失败') if sys_input(u'重试登录?[yn] ') != 'y': break if mainController.available: if sys_input(u'已经登录,是否要重新登录?[yn] ') == 'y': _init(*args) else: _init(*args) print('Bye~')
def init(*args): mainController = Controller() def _init(*args): if not reduce(lambda x, y: x + y, [l for l in os.walk('.').next()[1:]]): sys_print(u'账户仅需要在第一次使用时设置一次') while 1: product_type = sys_input( u'请选择版本[0]中国版印象笔记[1]国际版Evernote[2]中国版沙盒>') if product_type == '0': is_international, is_sandbox = False, False elif product_type == '1': sys_print(u'目前尚未支持国际版', 'error') break elif product_type == '2': is_international, is_sandbox = False, True else: continue u = sys_input(u'登陆邮箱>') p = getpass.getpass() token = TokenFetcher(int(product_type), u, p).fetch_token() if token: mainController.log_in(token=token, isSpecialToken=True, sandbox=is_sandbox, isInternational=is_international, expireTime=None) if mainController.available: mainController.ls.update_config( token=token, isSpecialToken=True, sandbox=is_sandbox, isInternational=is_international, expireTime=None) sys_print(u'登陆成功') mainController.ls.save_credential(u, p) sys_print(u'保存用户身份成功') break else: sys_print(u'登录失败') if sys_input(u'重试登录?[yn] ') != 'y': break else: sys_print(u'获取token失败,请检查用户名或密码') if sys_input(u'重试登录?[yn] ') != 'y': break else: sys_print(u'目录非空,无法初始化', 'warn') return if mainController.available: if sys_input(u'已经登录,是否要重新登录?[yn] ') == 'y': _init(*args) else: _init(*args) print('Bye~')
def learn_policy(track_name): # Define Pi_0 steer_prog = Controller([0.97, 0.05, 49.98], 0, 2, 0) accel_prog = Controller( [3.97, 0.01, 48.79], 0.30, 5, 0, 0.0, 0.01, 'obs[-1][2][0] > -self.para_condition and obs[-1][2][0] < self.para_condition' ) brake_prog = Controller([0, 0, 0], 0, 2, 0) nn_agent = NeuralAgent(track_name=track_name) all_observations = [] all_actions = [] for i_iter in range(6): logging.info("Iteration {}".format(i_iter)) # Learn/Update Neural Policy if i_iter == 0: nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=200) observation_list, action_list = nn_agent.collect_data( [steer_prog, accel_prog, brake_prog]) all_observations += observation_list all_observations, _, all_actions = nn_agent.label_data( [steer_prog, accel_prog, brake_prog], all_observations) else: nn_agent.update_neural(tree_program, episode_count=100, tree=True) observation_list, action_list = nn_agent.collect_data(tree_program, tree=True) all_observations += observation_list _, _, all_actions = nn_agent.label_data(tree_program, all_observations, tree=True) # Learn new programmatic policy tree_program = DecisionTreeRegressor() tree_program.fit(all_observations, all_actions) programmatic_game(tree_program, track_name=track_name) return None
def __init__(self,parentWindow,profileNumber): self.__controller = Controller() self.__builder = Gtk.Builder() self.__profileNumber = profileNumber self.__parentWindow = parentWindow self.__builder.add_from_file('views/NewSaveDialog/NewSaveDialog.glade') self.__window = self.__builder.get_object("newSaveWindow") self.__builder.get_object("descriptionTextArea").set_wrap_mode(Pango.WrapMode.WORD_CHAR) # Handles: self.__builder.get_object("cancelButton").connect("clicked", self.__cancelButtonHandle) self.__builder.get_object("confirmButton").connect("clicked", self.__confirmButtonHandle) self.__window.connect("key-press-event",self.on_key_press_event)
def _check_files_format(*args, **kwargs): mainController = Controller() configFound, wrongFiles = mainController.check_files_format() if not configFound: sys_print(u'检测到你不在印象笔记主目录中,或配置文件损坏', 'warn') elif mainController.available: if wrongFiles and not DEBUG: for fileName, status in wrongFiles: if status == 1: sys_print(u'检测到错误放置的内容:' + fileName.decode('utf8'), 'warn') elif status == 2: sys_print(u'检测到内容过大的文件:' + fileName.decode('utf8'), 'warn') elif status == 3: sys_print(u'检测到意义不明的文件:' + fileName.decode('utf8'), 'warn') sys_print(u'请确保单条笔记有md或html的正文且不大于%s字节' % mainController.ls.maxUpload) sys_print(u'请确保没有文件夹格式的附件,或名为.DS_Store的笔记及笔记本。') else: return fn(mainController, *args, **kwargs) elif mainController.ls.get_credential(): u, p = mainController.ls.get_credential().split('|') _, _, sandbox, is_international, expire_time, _, _ = mainController.ls.get_config( ) token = TokenFetcher(is_international, u, p).fetch_token() if token: mainController.log_in(token=token, isSpecialToken=True, sandbox=sandbox, isInternational=is_international, expireTime=expire_time) if mainController.available: mainController.ls.update_config( token=token, isSpecialToken=True, sandbox=sandbox, isInternational=is_international, expireTime=expire_time) sys_print(u'刷新token成功') return fn(mainController, *args, **kwargs) else: sys_print(u'刷新token失败') else: sys_print(u'获取token失败,请检查用户名密码') else: sys_print(u'尚未初始化', 'warn')
def notebook(*args): mainController = Controller() notebooks = [] sys_print(u'请输入使用的笔记本名字,留空结束') while 1: nb = sys_input(u'> ').encode('utf8') if nb: notebooks.append(nb) else: break if notebooks: mainController.ls.update_config(notebooks=notebooks) sys_print(u'修改成功') else: sys_print(u'未修改') print('Bye~')
def _check_files_format(*args, **kwargs): mainController = Controller() configFound, wrongFiles = mainController.check_files_format() if not configFound: sys_print(u'检测到你不在印象笔记主目录中,或配置文件损坏', 'warn') elif mainController.available: if wrongFiles: for fileName, status in wrongFiles: if status == 1: sys_print(u'检测到错误放置的内容:'+fileName.decode('utf8'), 'warn') elif status == 2: sys_print(u'检测到内容过大的文件:'+fileName.decode('utf8'), 'warn') elif status == 3: sys_print(u'检测到意义不明的文件:'+fileName.decode('utf8'), 'warn') sys_print(u'请确保单条笔记有md或html的正文且不大于%s字节,笔记中没有文件夹格式的附件。'%mainController.ls.maxUpload, 'info') else: return fn(mainController, *args, **kwargs) else: sys_print(u'尚未登录', 'warn')
def __init__(self, parentWindow, controller, save): self.__controller = Controller() self.__builder = Gtk.Builder() self.__controller = controller self.__save = save self.__parentWindow = parentWindow self.__parentWindow = parentWindow self.__builder.add_from_file( 'views/DeleteSaveDialog/DeleteSaveDialog.glade') self.__window = self.__builder.get_object("deleteSaveWindow") self.__builder.get_object("saveNameLabel").set_text('" {} "'.format( save.getName())) # Handles: self.__builder.get_object("noButton").connect("clicked", self.__noButtonHandle) self.__builder.get_object("yesButton").connect("clicked", self.__yesButtonHandle) self.__window.connect("key-press-event", self.on_key_press_event)
def __init__(self, parentWindow, controller, save): self.__controller = Controller() self.__builder = Gtk.Builder() self.__controller = controller self.__save = save self.__parentWindow = parentWindow self.__parentWindow = parentWindow self.__builder.add_from_file('views/ModifySaveDialog/ModifySaveDialog.glade') self.__window = self.__builder.get_object("modifySaveWindow") self.__builder.get_object("saveNameLabel").set_text('" {} "'.format(save.getName())) self.__builder.get_object("nameEntry").set_text(save.getName()) self.__builder.get_object("descriptionTextArea").get_buffer().set_text(save.getDescription()) self.__builder.get_object("descriptionTextArea").set_wrap_mode(Pango.WrapMode.WORD_CHAR) self.__window.connect("key-press-event",self.on_key_press_event) # Handles: self.__builder.get_object("cancelButton").connect("clicked", self.__cancelButtonHandle) self.__builder.get_object("confirmButton").connect("clicked", self.__confirmButtonHandle)
def __init__(self) -> None: """initialization and prepare data.""" self.config = Config() self.model = ModelData() self.view = ViewGraph(self.config, main=self) self.controller = Controller(self.config, self.model, self.view) self.handler = Handler(self.config, self.model, self.view, self.controller) self.view.resized.connect( self.handler.reshow_elements_after_resize_main_window) self.view.bandwidths_clicked_event.connect( self.handler.bandwidths_activated) self.view.maximums_region_changed_event.connect( self.handler.change_range_search_extremums) self.view.minimums_region_changed_event.connect( self.handler.change_range_search_extremums) self.view.edit_max_start_changed_event.connect( self.handler.change_text_line_extremums_edits) self.view.edit_max_end_changed_event.connect( self.handler.change_text_line_extremums_edits) self.view.edit_min_start_changed_event.connect( self.handler.change_text_line_extremums_edits) self.view.edit_min_end_changed_event.connect( self.handler.change_text_line_extremums_edits) self.view.menu_open_file_event.connect(self.handler.show_dialog_open) self.view.open_clicked_event.connect(self.handler.show_dialog_open) self.view.menu_save_file_event.connect( self.handler.save_button_pressed) self.view.save_clicked_event.connect(self.handler.save_button_pressed) self.view.menu_close_file_event.connect( self.handler.close_button_pressed) self.view.add_clicked_event.connect(self.handler.add_new_bandwidth) self.view.value_changed_event.connect(self.handler.change_value_slider) self.view.toggle_visible_regions_event.connect( self.handler.hide_show_regions)
def main(): """ Function to launch the main program """ app = Controller() app.run()
def __init__(self, parent): self._c = Controller(self) super().__init__(parent, self._c)
os.mkdir(SONGS_PATH) if __name__ == "__main__": ensure_data_dir() app = QApplication(sys.argv) app.setQuitOnLastWindowClosed(True) app.setWindowIcon(QIcon(WINDOW_ICON)) app.setApplicationName("FeelUOwn") app_event_loop = QEventLoop(app) asyncio.set_event_loop(app_event_loop) qss = QSS_PATH with open(qss, "r") as qssfile: app.setStyleSheet(qssfile.read()) if MODE != DEBUG: f_handler = open(LOGFILE, 'w') sys.stdout = f_handler sys.stderr = f_handler w = Controller() w.move((QApplication.desktop().width() - w.width())/2, (QApplication.desktop().height() - w.height())/2) w.show() app_event_loop.run_forever() sys.exit()
def setUp(self) -> None: super(ControllerTests, self).setUp() self.controller = Controller(self.db_name)
imu_port = settings['server']['imu']['port'] imu_client = QTImuClient(server_adress=(server_ip, imu_port)) if args.slam: slam_client = QtSlamClient(server_adress=(slam_ip, slam_port)) if args.odo: odo_port = settings['server']['odo']['port'] odo_client = QTOdoClient(server_adress=(server_ip, odo_port)) client_sink = ClientSink(video_client=video_client, steering_client=steering_client, imu_client=imu_client, slam_client=slam_client, odo_client=odo_client) controller = Controller(client_sink=client_sink, intake_name=args.folder, dump_video=args.dump_video, dump_steering=args.dump_steering, dump_odo=args.dump_odo) other_windows = [] if args.imu: map_controller = MapController(client_sink, dump_imu=args.dump_imu, intake_name=args.folder) win2 = MapWindow(map_controller) other_windows.append(win2) win = MainApp(controller, other_windows) win.show() for window in other_windows: window.show() sys.exit(app.exec_())
sensor_map = {} sensor_map[Controller.imu_key] = (euler, gyro) sensor_map[Controller.gps_key] = gps_service.getPosition() sensor_map[Controller.blobs_key] = robot.getBlobPos() #TODO: add odometry and blobs return sensor_map if __name__ == "__main__": blink = 0xAA robot = AvcPlatform() #robot.setColorLut('lut_file.lut') #robot.initImu('accelcal.txt', 'magcal.txt') wp = StaticWayPointProvider() #gps_service = GpsService() controller = Controller() #gps_service.start() robot.setServoFailSafe(ESC_SERVO, ESC_ARM_ANGLE) robot.setServoFailSafe(STEERING_SERVO, 0.0) robot.resetWatchdog() robot.setServoAngle(STEERING_SERVO, 0.0) robot.setServoAngle(ESC_SERVO, ESC_ARM_ANGLE) try: while True: robot.setLeds(blink) robot.resetWatchdog() #target_pos= wp.getCurrentWayPoint() #current_pos = gps_service.getPosition() #sensors = populateSensorMap(robot, gps_service) sensors = {} #if len(sensors) == 0:
import falcon from controllers import Controller api = falcon.API() api.add_route('/call', Controller())
def learn_policy(track_name, test_program, seed, program_from_file): # Define Pi_0 # def __init__(self, pid_constants=(0, 0, 0), pid_target=0.0, pid_sensor=0, pid_sub_sensor=0, pid_increment=0.0, para_condition=0.0, condition='False') #steer_prog = Controller(pid_constants=[0.97, 0.05, 49.98], pid_target=0, pid_sensor=2, pid_sub_sensor=0) #accel_prog = Controller(pid_constants=[3.97, 0.01, 48.79], pid_target=0.30, pid_sensor=5, pid_sub_sensor=0, pid_increment=0.0, para_condition=0.01, condition='obs[-1][2][0] > -self.para_condition and obs[-1][2][0] < self.para_condition') #brake_prog = Controller(pid_constants=[0, 0, 0], pid_target=0, pid_sensor=2, pid_sub_sensor=0) steer_prog = Controller(pid_constants=[ 0.8811106985926564, 0.01712974054406783, 49.947819771350105 ], pid_target=-0.000664433050917396, pid_sensor=2, pid_sub_sensor=0) accel_prog = Controller( pid_constants=[ 4.1120530179121175, 0.13995816823737148, 48.684311417901206 ], pid_target=2.168666263543196, pid_sensor=5, pid_sub_sensor=0, pid_increment=0.20990457893971481, para_condition=0.0038142532010616106, condition= 'obs[-1][2][0] > -self.para_condition and obs[-1][2][0] < self.para_condition' ) brake_prog = Controller(pid_constants=[ -0.06600550019147762, 0.01192179945036169, -0.03761014893630601 ], pid_target=0.0012019017967644296, pid_sensor=2, pid_sub_sensor=0) if test_program == 1: for seeds in {1337, 1338, 1339, 1340, 1341, 1342, 1343}: random.seed(seeds) programmatic_game(steer_prog, accel_prog, brake_prog, track_name=track_name) print('Finish') return nn_agent = NeuralAgent(track_name=track_name) if program_from_file: logging.info("Now we load the weight") try: nn_agent.actor.model.load_weights("./model_1343/actormodel_" + str(1343) + '_' + str(900) + ".h5") nn_agent.critic.model.load_weights("./model_1343/criticmodel_" + str(1343) + '_' + str(900) + ".h5") nn_agent.actor.target_model.load_weights( "./model_1343/actormodel_" + str(1343) + '_' + str(900) + ".h5") nn_agent.critic.target_model.load_weights( "./model_1343/criticmodel_" + str(1343) + '_' + str(900) + ".h5") logging.info("Weight load successfully") except: logging.info("Cannot find the weight") else: # 1. train the neural network nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=1000, tree=False, seed=seed) # 2. Collect data all_observations = [] all_actions = [] data = dict(obs=[], act=[]) relabel_count = 1 for relabel_ind in range(relabel_count): logging.info("\n Iteration {}".format(relabel_ind)) for i_iter in range(3): # optimize controller parameters # Learn/Update Neural Policy #if i_iter == 0: # nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=2000) #else: # nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=100) # Collect Trajectories #if np.mod(i_iter, 3) == 0: # relaunch=True # relaunch TORCS every 3 episode because of the memory leak error #else: # relaunch=False observation_list, action_list = nn_agent.collect_data( [steer_prog, accel_prog, brake_prog]) #print('observation_list', observation_list[0]) #print('\n action_list', action_list[0]) data['obs'].append(observation_list) data['act'].append(action_list) all_observations += observation_list all_actions += action_list # Relabel Observations #_, _, all_actions = nn_agent.label_data([steer_prog, accel_prog, brake_prog], all_observations) #print('\n all_actions', all_actions[0]) filename = "./Fig/data_" + str(seed) dirname = os.path.dirname(filename) if not os.path.exists(dirname): os.makedirs(dirname) with open(filename, 'wb') as f: pickle.dump(data, f) # 3. Learn new programmatic policy logging.info("Learn programmatic policy! \n") #print('observations: ', np.array(all_observations)[0]) #print('actions', np.array(all_actions).shape) param_finder = ParameterFinder(all_observations, all_actions, steer_prog, accel_prog, brake_prog) #print('observations: ', np.array(all_observations).shape()) #print('actions', np.array(all_actions).shape()) #steer_ranges = [[create_interval(steer_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(steer_prog.pid_info()[1], 0.01)] #accel_ranges = [[create_interval(accel_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(accel_prog.pid_info()[1], 0.5), create_interval(accel_prog.pid_info()[2], 0.1), create_interval(accel_prog.pid_info()[3], 0.01)] #brake_ranges = [[create_interval(brake_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(brake_prog.pid_info()[1], 0.001)] steer_ranges = [ create_interval(steer_prog.pid_info()[0][const], 0.05) for const in range(3) ] steer_ranges.append(create_interval(steer_prog.pid_info()[1], 0.01)) accel_ranges = [ create_interval(accel_prog.pid_info()[0][const], 0.05) for const in range(3) ] accel_ranges.append(create_interval(accel_prog.pid_info()[1], 0.5)) accel_ranges.append(create_interval(accel_prog.pid_info()[2], 0.1)) accel_ranges.append(create_interval(accel_prog.pid_info()[3], 0.01)) brake_ranges = [ create_interval(brake_prog.pid_info()[0][const], 0.05) for const in range(3) ] brake_ranges.append(create_interval(brake_prog.pid_info()[1], 0.001)) pid_ranges = [steer_ranges, accel_ranges, brake_ranges] new_paras = param_finder.pid_parameters(pid_ranges) steer_prog.update_parameters( [new_paras[i] for i in ['sp0', 'sp1', 'sp2']], new_paras['spt']) accel_prog.update_parameters( [new_paras[i] for i in ['ap0', 'ap1', 'ap2']], new_paras['apt'], new_paras['api'], new_paras['apc']) brake_prog.update_parameters( [new_paras[i] for i in ['bp0', 'bp1', 'bp2']], new_paras['bpt']) for i_iter in range(1): #logging.info("\n Program Iteration {}".format(i_iter)) program_observations, program_actions = programmatic_game( steer_prog, accel_prog, brake_prog, track_name=track_name) # Relabel Observations _, _, program_actions = nn_agent.label_data( [steer_prog, accel_prog, brake_prog], program_observations) #print('\n all_actions', all_actions[0]) all_observations += program_observations all_actions += program_actions logging.info("Steering Controller" + str(steer_prog.pid_info())) logging.info("Acceleration Controller" + str(accel_prog.pid_info())) logging.info("Brake Controller" + str(brake_prog.pid_info())) programmatic_game(steer_prog, accel_prog, brake_prog, track_name=track_name)
def __init__(self): self.controller = Controller(self) self.side = PlayerSide(self) self.map = Map(self) self.gui = GameStateGUI(self)
action='store_true' ) cli_group.add_argument('-p', '--path', help='change the default settings directory', type=str, default='settings/' ) cli_group.add_argument('-t', '--time', help='the time to simulate in hours', type=float, default=24) cli_group.add_argument('-dt', '--step', help='the time step to use when simulating in hours', type=float, default=0.1) cli_group.add_argument('-s', '--seed', help='the seed to use for the simulation', type=int, default=None) args = parser.parse_args() utils.set_seed(args.seed) controller = Controller(use_gui=args.gui, time=args.time, time_step=args.step, path=args.path)
核心思想是: 分层和解耦, 提高了程序的扩展性、可重用性、可维护性和可读性 模型-视图-控制器模式是应用到面向对象编程的 SoC(关注点分离)原则 是一种非常通用的设计模式,虽然我私人会认为不算是严格的设计模式,更像是一种指导架构的架构模式。 - Model(模型) 是核心的部分, 代表着应用的信息本源, 包含和管理(业务)逻辑, 数据和状态以及应用的规则. - View(视图) 是模型的可视化表现, 它只决定怎么展示数据, 并不处理数据, 多为前端应用 - Controller(控制器) 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。 目前我了解到的, 基本上所有流行的Web框架例如 PHP中的 Laravel和Yii, Python中的Django 都有用到MVC或者其变种, 例如Django的MVT( Model, View, Template) View 视图, 和MVC里的C控制器功能相同, 接收请求, 处理业务逻辑 Template 模板, 与MVC里的V视图功能相同, 有点不同的是返回html涉及到的模板语言会不同, 基本作用都是展示数据 而Urlconf, 更像是控制器, 根据正则url匹配不同的视图来响应请求 """ from models import ProductModel from views import ProductView from controllers import Controller if __name__ == '__main__': model = ProductModel() view = ProductView() controller = Controller(model, view) controller.show_item_list() controller.show_item_info('milk') controller.show_item_info('apple')
def learn_policy(track_name, seed): Program_save = dict(total_reward=[], total_step=[], ave_reward=[], distRaced=[], lapTimes=[], avelapTime=[], ave_sp=[], max_sp=[], min_sp=[], ) # Define Pi_0 steer_prog = Controller([0.97, 0.05, 49.98], 0, 2, 0) accel_prog = Controller([3.97, 0.01, 48.79], 0.30, 5, 0, 0.0, 0.01, 'obs[-1][2][0] > -self.para_condition and obs[-1][2][0] < self.para_condition') brake_prog = Controller([0, 0, 0], 0, 2, 0) programmatic_game(steer_prog, accel_prog, brake_prog, track_name=track_name) nn_agent = NeuralAgent(track_name=track_name) ''' logging.info("Now we load the weight") try: nn_agent.actor.model.load_weights("./model_1343/actormodel_"+str(seed)+'_'+str(900)+".h5") nn_agent.critic.model.load_weights("./model_1343/criticmodel_"+str(seed)+'_'+str(900)+".h5") nn_agent.actor.target_model.load_weights("./model_1343/actormodel_"+str(seed)+'_'+str(900)+".h5") nn_agent.critic.target_model.load_weights("./model_1343/criticmodel_"+str(seed)+'_'+str(900)+".h5") logging.info("Weight load successfully") except: logging.info("Cannot find the weight")''' all_observations = [] all_actions = [] for i_iter in range(100): logging.info("Iteration {}".format(i_iter)) # Learn/Update Neural Policy if i_iter == 0: nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=20, seed=seed) else: nn_agent.update_neural([steer_prog, accel_prog, brake_prog], episode_count=20, seed=seed) # Collect Trajectories observation_list, action_list = nn_agent.collect_data([steer_prog, accel_prog, brake_prog]) all_observations += observation_list # Relabel Observations _,_, all_actions = nn_agent.label_data([steer_prog, accel_prog, brake_prog], all_observations) # Learn new programmatic policy param_finder = ParameterFinder(all_observations, all_actions, steer_prog, accel_prog, brake_prog) #steer_ranges = [[create_interval(steer_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(steer_prog.pid_info()[1], 0.01)] #accel_ranges = [[create_interval(accel_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(accel_prog.pid_info()[1], 0.5), create_interval(accel_prog.pid_info()[2], 0.1), create_interval(accel_prog.pid_info()[3], 0.01)] #brake_ranges = [[create_interval(brake_prog.pid_info()[0][const], 0.05) for const in range(3)], create_interval(brake_prog.pid_info()[1], 0.001)] steer_ranges = [create_interval(steer_prog.pid_info()[0][const], 0.05) for const in range(3)] steer_ranges.append(create_interval(steer_prog.pid_info()[1], 0.01)) accel_ranges = [create_interval(accel_prog.pid_info()[0][const], 0.05) for const in range(3)] accel_ranges.append(create_interval(accel_prog.pid_info()[1], 0.5)) accel_ranges.append(create_interval(accel_prog.pid_info()[2], 0.1)) accel_ranges.append(create_interval(accel_prog.pid_info()[3], 0.01)) brake_ranges = [create_interval(brake_prog.pid_info()[0][const], 0.05) for const in range(3)] brake_ranges.append(create_interval(brake_prog.pid_info()[1], 0.001)) pid_ranges = [steer_ranges, accel_ranges, brake_ranges] #logging.info(pid_ranges) new_paras = param_finder.pid_parameters(pid_ranges) steer_prog.update_parameters([new_paras[i] for i in ['sp0', 'sp1', 'sp2']], new_paras['spt']) accel_prog.update_parameters([new_paras[i] for i in ['ap0', 'ap1', 'ap2']], new_paras['apt'], new_paras['api'], new_paras['apc']) brake_prog.update_parameters([new_paras[i] for i in ['bp0', 'bp1', 'bp2']], new_paras['bpt']) _,_, total_reward, total_step, ave_reward, distRaced, lapTimes, avelapTime, ave_sp, max_sp, min_sp = programmatic_game(steer_prog, accel_prog, brake_prog) Program_save['total_reward'].append(total_reward) Program_save['total_step'].append(total_step) Program_save['ave_reward'].append(ave_reward) Program_save['distRaced'].append(distRaced) Program_save['lapTimes'].append(lapTimes) Program_save['avelapTime'].append(avelapTime) Program_save['ave_sp'].append(ave_sp) Program_save['max_sp'].append(max_sp) Program_save['min_sp'].append(min_sp) filename = "./Fig/program_save_" + str(seed) dirname = os.path.dirname(filename) if not os.path.exists(dirname): os.makedirs(dirname) with open(filename,'wb') as f: pickle.dump(Program_save, f) logging.info("Steering Controller" + str(steer_prog.pid_info())) logging.info("Acceleration Controller" + str(accel_prog.pid_info())) logging.info("Brake Controller" + str(brake_prog.pid_info())) return None
retain=False) print("publish", "water-monitor/" + name + "/flow-rate:", value) reader1 = Reader("water-main", 20) readers.append(reader1) water_sensor1 = water_sensor("water-main", read_rate=30, on_read=on_read, read=reader1.read) water_sensor1.read_loop_start() sensors.append(water_sensor1) controller1 = Controller("water-main", 18) controllers.append(controller1) client.loop_start() def teardown(): for controller in controllers: controller.teardown() water_sensor1.read_loop_stop() client.loop_stop() client.disconnect() try: