def test_reset(self, pev, graph, CS_list): self.graph = graph self.path_info = [] self.CS_list = CS_list self.pev = pev self.sim_time = self.pev.t_start self.timeIDX = int(self.sim_time / 5) self.path_info = ta.get_feature_state(self.sim_time, self.pev, self.CS_list, self.graph, NCS) self.pev.path.append(self.pev.curr_location) state = [ self.pev.curr_location / self.graph.num_node, self.pev.destination / self.graph.num_node, self.pev.curr_SOC, self.sim_time / 288 ] for path in self.path_info: cs, req_soc, driving_cost, fpath, rpath, fp_dist, rp_dist, fp_dt, rp_dt, fp_w, r_w, wtime, ctime, cs_char_cost, home_char_cost = path state += [ wtime, ctime, driving_cost / 10, cs_char_cost / 10, home_char_cost / 10 ] state = np.reshape(state, [1, self.state_size]) return state, self.pev.source, self.pev.destination
def reset(self): # self.graph.reset_traffic_info() self.CS_list = reset_CS_info(self.graph) t_start, soc = default_setting_random_value() self.graph.source_node_set = list(self.graph.source_node_set) source = self.graph.source_node_set[np.random.randint( 0, len(self.graph.source_node_set) - 1)] self.graph.destination_node_set = list(self.graph.destination_node_set) destination = self.graph.destination_node_set[np.random.randint( 0, len(self.graph.destination_node_set) - 1)] while source == destination or destination in self.graph.cs_info: destination = self.graph.destination_node_set[np.random.randint( 0, len(self.graph.destination_node_set) - 1)] self.path_info = [] self.pev = EV(e, t_start, soc, source, destination) self.pev.path.append(self.pev.curr_location) self.sim_time = self.pev.t_start self.timeIDX = int(self.sim_time / 5) self.path_info = ta.get_feature_state(self.sim_time, self.pev, self.CS_list, self.graph, NCS) # print('\npev soc', self.pev.SOC) state = [ self.pev.curr_location / self.graph.num_node, self.pev.destination / self.graph.num_node, self.pev.curr_SOC, self.sim_time / 288 ] for path in self.path_info: cs, req_soc, driving_cost, fpath, rpath, fp_dist, rp_dist, fp_dt, rp_dt, fp_w, r_w, wtime, ctime, cs_char_cost, home_char_cost = path state += [ wtime, ctime, driving_cost / 10, cs_char_cost / 10, home_char_cost / 10 ] state = np.reshape(state, [1, self.state_size]) return state, source, destination
def step(self, action): cs, req_soc, driving_cost, fpath, rpath, fp_dist, rp_dist, fp_dt, rp_dt, fp_w, r_w, wtime, ctime, cs_char_cost, home_char_cost = self.path_info[ action] self.pev.path.append(self.pev.curr_location) if len(fpath) > 1: next_node = fpath[1] chargingprice = cs.price[int(self.sim_time / 5)] distance_onetwo = self.graph.get_path_distance(fpath[0:2]) velocity_onetwo = self.graph.velocity(fpath[0], fpath[1], int(self.sim_time / 5)) croad = self.pev.ECRate * distance_onetwo * chargingprice troad = UNITtimecost * distance_onetwo / velocity_onetwo road_cost = croad + troad self.sim_time, time = ta.update_ev(self.pev, self.graph, self.pev.curr_location, next_node, self.sim_time) if self.sim_time == 0 and time == 0: done = 1 reward = -50 return np.zeros((1, self.state_size)), -1, reward, done if self.pev.curr_SOC <= 0.0: done = 1 reward = -50 return np.zeros((1, self.state_size)), -1, reward, done done = 0 reward = -1 * road_cost self.path_info = ta.get_feature_state(self.sim_time, self.pev, self.CS_list, self.graph, self.action_size) next_state = [ self.pev.curr_location / self.graph.num_node, self.pev.destination / self.graph.num_node, self.pev.curr_SOC, self.sim_time / 288 ] for path in self.path_info: cs, req_soc, driving_cost, fpath, rpath, fp_dist, rp_dist, fp_dt, rp_dt, fp_w, r_w, wtime, ctime, cs_char_cost, home_char_cost = path next_state += [ wtime, ctime, driving_cost / 10, cs_char_cost / 10, home_char_cost / 10 ] next_state = np.reshape(next_state, [1, self.state_size]) return next_state, next_node, reward, done elif self.pev.curr_location == cs.id: self.pev.charged = 1 self.pev.cs = cs self.pev.csid = cs.id self.pev.req_SOC = req_soc self.pev.rear_path = rpath self.pev.cssoc = self.pev.curr_SOC self.pev.before_charging_SOC = self.pev.curr_SOC self.pev.cscharingenergy = self.pev.maxBCAPA * self.pev.req_SOC - self.pev.curr_SOC * self.pev.maxBCAPA self.pev.cschargingwaitingtime = cs.waittime[int(self.sim_time / 5)] self.pev.cschargingstarttime = self.sim_time + self.pev.cschargingwaitingtime * 60 self.pev.cschargingprice = cs.price[int( self.pev.cschargingstarttime / 5)] self.pev.cschargingcost = self.pev.cscharingenergy * self.pev.cschargingprice self.pev.csdrivingtime = self.pev.totaldrivingtime self.pev.csdistance = self.pev.totaldrivingdistance self.pev.cschargingwaitingtime = self.pev.cschargingwaitingtime self.pev.cschargingtime = ( self.pev.cscharingenergy / (cs.chargingpower * self.pev.charging_effi)) self.pev.curr_SOC = self.pev.req_SOC self.sim_time += self.pev.cschargingwaitingtime * 60 self.sim_time += self.pev.cschargingtime * 60 self.pev.curr_time = self.sim_time rpath = self.pev.rear_path # print(rpath) for i in range(len(rpath) - 1): fnode = rpath[i] tnode = rpath[i + 1] # print(fnode, tnode, self.pev.curr_location) self.pev.path.append(tnode) self.sim_time, homedtime = ta.update_ev( self.pev, self.graph, fnode, tnode, self.sim_time) self.pev.homedrivingtime += homedtime # print(self.pev.curr_location,self.pev.destination) if self.pev.curr_location == self.pev.destination: self.pev.homesoc = self.pev.curr_SOC self.pev.homechargingstarttime = self.sim_time self.pev.homechargingenergy = self.pev.maxBCAPA * self.pev.final_soc - self.pev.curr_SOC * self.pev.maxBCAPA self.pev.homechargingtime = ( self.pev.homechargingenergy / (cs.homechargingpower * self.pev.charging_effi)) self.pev.homedrivingdistance = self.graph.get_path_distance( rpath) self.pev.homechargingprice = cs.TOU_price[int(self.sim_time / 60)] self.pev.homechargingcost = self.pev.homechargingenergy * self.pev.homechargingprice self.pev.curr_SOC = self.pev.final_soc self.sim_time += self.pev.homechargingtime self.pev.curr_time = self.sim_time self.pev.expense_time_part = ( self.pev.totaldrivingtime + self.pev.cschargingwaitingtime + self.pev.cschargingtime) * UNITtimecost self.pev.expense_cost_part = self.pev.totaldrivingdistance * self.pev.ECRate * self.pev.cschargingprice + self.pev.cschargingcost + self.pev.homechargingcost self.pev.totalcost = self.pev.expense_time_part + self.pev.expense_cost_part done = 1 # reward = -1 * ((self.pev.cschargingwaitingtime + self.pev.cschargingtime + rp_dt) * UNITtimecost + self.pev.homechargingcost) reward = -1 * self.pev.totalcost else: print('error final destination') input() return np.zeros((1, self.state_size)), -1, reward, done else: done = 1 reward = -50 return np.zeros((1, self.state_size)), -1, reward, done