Commit c6e1edd1 authored by Allvey's avatar Allvey

代码优化&二次调度触发方式优化

parent 8fbf84be
...@@ -197,12 +197,19 @@ class ExpectedTime(AlgorithmBase): ...@@ -197,12 +197,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \ truck_reach_time_ls = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \
empty_speed + truck_avl_time empty_speed + truck_avl_time
self.logger.info('truck travel time')
self.logger.info(60 * self.group.park_to_excavator_distance[0, :] / 1000 / \
empty_speed)
# 计算车辆得到服务时间 # 计算车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls) truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls)
# 计算行程时间 # 计算行程时间
transport_value = truck_service_time - truck_avl_time transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-truck_reach_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(truck_reach_time_ls) self.logger.info(truck_reach_time_ls)
...@@ -212,9 +219,6 @@ class ExpectedTime(AlgorithmBase): ...@@ -212,9 +219,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_service_time) self.logger.info(truck_service_time)
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-transport_value") self.logger.info("expected_travelling_schedule-transport_value")
self.logger.info(transport_value) self.logger.info(transport_value)
...@@ -260,7 +264,11 @@ class ExpectedTime(AlgorithmBase): ...@@ -260,7 +264,11 @@ class ExpectedTime(AlgorithmBase):
# get travelling time (List) to each group_dumps # get travelling time (List) to each group_dumps
truck_reach_time_ls = 60 * self.group.to_unload_area_distance[excavator_group_index, :] \ truck_reach_time_ls = 60 * self.group.to_unload_area_distance[excavator_group_index, :] \
/ 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time / 1000 / heavy_speed + truck_avl_time
self.logger.info('truck travel time')
self.logger.info(60 * self.group.to_unload_area_distance[excavator_group_index, :] \
/ 1000 / heavy_speed)
# get truck servicing time (List) # get truck servicing time (List)
if len(truck_reach_time_ls) != len(group_dump_val_time_ls): if len(truck_reach_time_ls) != len(group_dump_val_time_ls):
...@@ -270,6 +278,9 @@ class ExpectedTime(AlgorithmBase): ...@@ -270,6 +278,9 @@ class ExpectedTime(AlgorithmBase):
# get trip time # get trip time
transport_value = truck_service_time - truck_avl_time transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-truck_reach_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(truck_reach_time_ls) self.logger.info(truck_reach_time_ls)
...@@ -279,9 +290,6 @@ class ExpectedTime(AlgorithmBase): ...@@ -279,9 +290,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_service_time) self.logger.info(truck_service_time)
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-transport_value") self.logger.info("expected_travelling_schedule-transport_value")
self.logger.info(transport_value) self.logger.info(transport_value)
...@@ -331,12 +339,19 @@ class ExpectedTime(AlgorithmBase): ...@@ -331,12 +339,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \ truck_reach_time_ls = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \
/ 1000 / empty_speed + truck_avl_time / 1000 / empty_speed + truck_avl_time
self.logger.info('truck travel time')
self.logger.info(60 * self.group.to_excavator_distance[unload_area_group_index, :] \
/ 1000 / empty_speed)
# 计算车辆得到服务时间 # 计算车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls) truck_service_time = np.maximum(truck_reach_time_ls, group_excavator_avl_time_ls)
# 计算行程时间 # 计算行程时间
transport_value = truck_service_time - truck_avl_time transport_value = truck_service_time - truck_avl_time
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-truck_reach_time") self.logger.info("expected_travelling_schedule-truck_reach_time")
self.logger.info(truck_reach_time_ls) self.logger.info(truck_reach_time_ls)
...@@ -346,9 +361,6 @@ class ExpectedTime(AlgorithmBase): ...@@ -346,9 +361,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-truck_service_time") self.logger.info("expected_travelling_schedule-truck_service_time")
self.logger.info(truck_service_time) self.logger.info(truck_service_time)
self.logger.info("expected_travelling_schedule-truck_avl_time")
self.logger.info(truck_avl_time)
self.logger.info("expected_travelling_schedule-transport_value") self.logger.info("expected_travelling_schedule-transport_value")
self.logger.info(transport_value) self.logger.info(transport_value)
......
...@@ -308,8 +308,8 @@ class Group: ...@@ -308,8 +308,8 @@ class Group:
self.logger.info("group_walk_available") self.logger.info("group_walk_available")
self.logger.info(self.group_walk_available) self.logger.info(self.group_walk_available)
except Exception as es: except Exception as es:
self.logger.error(es) self.logger.error(f'exception {es}')
self.logger.error(es.__traceback__.tb_lineno) self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("设备物料读取异常") self.logger.error("设备物料读取异常")
def update_device_bind(self): def update_device_bind(self):
...@@ -679,9 +679,9 @@ class GroupDispatcher: ...@@ -679,9 +679,9 @@ class GroupDispatcher:
f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}') f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}')
except Exception as es: except Exception as es:
self.logger.error("重载车辆全智能模式-计算异常") self.logger.error(f'exception {es}')
self.logger.error(es.__traceback__.tb_lineno) self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error(es) self.logger.error("重载车辆全智能模式计算异常, 执行默认调度计划")
def empty_period_dispatch(self, s: AlgorithmBase, truck_dispatch: Mapping[str, List[str]], truck_id: str, truck_info: CurrentTruck, def empty_period_dispatch(self, s: AlgorithmBase, truck_dispatch: Mapping[str, List[str]], truck_id: str, truck_info: CurrentTruck,
truck_trip: List[int]): truck_trip: List[int]):
...@@ -715,9 +715,9 @@ class GroupDispatcher: ...@@ -715,9 +715,9 @@ class GroupDispatcher:
f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}') f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}')
except Exception as es: except Exception as es:
self.logger.error("空载车辆全智能模式-计算异常") self.logger.error(f'exception {es}')
self.logger.error(es.__traceback__.tb_lineno) self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error(es) self.logger.error("空载车辆全智能模式计算异常, 执行默认调度计划")
def truck_construct(self, truck_id): def truck_construct(self, truck_id):
""" """
...@@ -993,9 +993,9 @@ class ReDispatcher: ...@@ -993,9 +993,9 @@ class ReDispatcher:
else: else:
continue continue
except Exception as es: except Exception as es:
self.logger.error("寻找最佳卸载区异常")
self.logger.error(f'exception {es}') self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}') self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("寻找最佳卸载区异常")
return best_dump_id return best_dump_id
...@@ -1018,36 +1018,38 @@ class ReDispatcher: ...@@ -1018,36 +1018,38 @@ class ReDispatcher:
else: else:
continue continue
if excavator_id in self.group.group_excavators: self.logger.info("value")
self.logger.info(value)
if value[-1] == 1 and excavator_id in self.group.group_excavators: if value[-1] == 1 and excavator_id in self.group.group_excavators:
traveling_time = 60 * (value[0] / 1000) / empty_speed
self.logger.info(f'load_area {load_area}') traveling_time = 60 * (value[0] / 1000) / empty_speed
self.logger.info(f'traveling_time {traveling_time}')
now = float( self.logger.info(f'load_area {load_area}')
(datetime.now() - self.group.pre_sch.start_time) / timedelta(hours=0, minutes=1, seconds=0)) self.logger.info(f'traveling_time {traveling_time}')
reach_time = now + traveling_time now = float(
(datetime.now() - self.group.pre_sch.start_time) / timedelta(hours=0, minutes=1, seconds=0))
self.logger.info(f'reach_time {reach_time}') reach_time = now + traveling_time
trip_time = max(reach_time, self.group.pre_sch.get_excavator_avl_time(truck_id=truck_id)[ self.logger.info(f'reach_time {reach_time}')
excavator_id]) - now
self.logger.info(f'trip_time {trip_time}') trip_time = max(reach_time, self.group.pre_sch.get_excavator_avl_time(truck_id=truck_id)[
excavator_id]) - now
if min_trip_time > trip_time: self.logger.info(f'trip_time {trip_time}')
best_excavator_id = excavator_id
min_trip_time = trip_time if min_trip_time > trip_time:
best_excavator_id = excavator_id
min_trip_time = trip_time
else: else:
continue continue
except Exception as es: except Exception as es:
self.logger.error("寻找最佳装载区异常")
self.logger.error(f'exception {es}') self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}') self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("寻找最佳装载区异常")
return best_excavator_id return best_excavator_id
def get_congestion_lanes(self): def get_congestion_lanes(self):
......
...@@ -89,12 +89,12 @@ class DispatchSubmission: ...@@ -89,12 +89,12 @@ class DispatchSubmission:
:param redispatch: :param redispatch:
:return: :return:
""" """
if (task in [1, 2]) or (task == 3 and state == 2): # 车辆位于装载区,或车辆重载等待 if task in [1, 2, 3]: # 车辆位于装载区,或车辆重载等待
# if task in [1, 2]: if task in [1, 2]:
# self.logger.info(f'车辆 {truck_id} 装载区调度') self.logger.info(f'车辆 {truck_id} 装载区调度')
# else: else:
# self.logger.info(f'车辆 {truck_id} 重载二次调度') self.logger.info(f'车辆 {truck_id} 重载二次调度')
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id] # 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if dispatch_seq[1] is None or (dispatch_seq[1] not in DispatchInfo.unload_area_dump_dict): if dispatch_seq[1] is None or (dispatch_seq[1] not in DispatchInfo.unload_area_dump_dict):
...@@ -141,14 +141,14 @@ class DispatchSubmission: ...@@ -141,14 +141,14 @@ class DispatchSubmission:
# self.logger.error("调度结果写入异常-矿卡空载") # self.logger.error("调度结果写入异常-矿卡空载")
elif (task in [-2, 4, 5]) or (task == 0 and state == 2): # 车辆位于备停区或位于卸载区,或车辆空载等待 elif task in [-2, 4, 5, 0]: # 车辆位于备停区或位于卸载区,或车辆空载等待
# if task == -2: if task == -2:
# self.logger.info(f'车辆 {truck_id} 备停区调度') self.logger.info(f'车辆 {truck_id} 备停区调度')
# elif task in [4, 5]: elif task in [4, 5]:
# self.logger.info(f'车辆 {truck_id} 卸载区调度') self.logger.info(f'车辆 {truck_id} 卸载区调度')
# else: else:
# self.logger.info(f'车辆 {truck_id} 空载二次调度') self.logger.info(f'车辆 {truck_id} 空载二次调度')
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id] # 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if dispatch_seq[0] is None: if dispatch_seq[0] is None:
...@@ -173,33 +173,24 @@ class DispatchSubmission: ...@@ -173,33 +173,24 @@ class DispatchSubmission:
# try: # try:
record = redis_format(truck_id, group_id, str(uuid.uuid1()), item) record = redis_format(truck_id, group_id, str(uuid.uuid1()), item)
if self.topo is not None: # 车辆重载等待,且前方道路阻塞
if self.topo is not None and redispatch:
# 车辆重载等待,且前方道路阻塞 # 车辆停车等待
if self.topo is not None and redispatch: # try:
# 车辆停车等待 # if truck_id in self.truck.truck_is_temp and not self.truck.truck_is_temp[truck_id]:
# try: self.logger.info("二次调度前往装载区")
# if truck_id in self.truck.truck_is_temp and not self.truck.truck_is_temp[truck_id]: record["isTemp"] = True # 避免反复修改
self.logger.info("二次调度前往装载区")
record["isTemp"] = True # 避免反复修改
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
POST(truck_id) self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
else: POST(truck_id)
self.logger.info("正常调度前往装载区")
record["isTemp"] = False
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
else: else:
self.logger.info("正常调度前往装载区") self.logger.info("正常调度前往装载区")
record["isTemp"] = False record["isTemp"] = False
self.logger.info(f'redis 注入 {record}') self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record))) redis5.set(truck_id, str(json.dumps(record)))
else: else:
pass pass
...@@ -246,7 +237,7 @@ class DispatchSubmission: ...@@ -246,7 +237,7 @@ class DispatchSubmission:
self.logger.info( self.logger.info(
"======================================== 计划完成写入 =======================================") "======================================== 计划完成写入 =======================================")
else: else:
raise Exception(f'车辆 {truck_id} 未正常生成派车计划') raise Exception(f'车辆 {truck_id} 未正常生成派车计划, 执行默认派车计划')
except Exception as es: except Exception as es:
# self.logger.error("group_dispatch_to_redis_error") # self.logger.error("group_dispatch_to_redis_error")
self.logger.error(es) self.logger.error(es)
......
...@@ -319,9 +319,17 @@ def global_period_para_update(): ...@@ -319,9 +319,17 @@ def global_period_para_update():
dynamic_excavator_set = set(update_autodisp_excavator()) dynamic_excavator_set = set(update_autodisp_excavator())
dynamic_excavator_num = len(dynamic_excavator_set) dynamic_excavator_num = len(dynamic_excavator_set)
logger.info("可用于派车的挖机:")
logger.info(dynamic_excavator_num)
logger.info(dynamic_excavator_set)
dynamic_dump_set = set(update_autodisp_dump()) dynamic_dump_set = set(update_autodisp_dump())
dynamic_dump_num = len(dynamic_dump_set) dynamic_dump_num = len(dynamic_dump_set)
logger.info("可用于派车的卸点:")
logger.info(dynamic_dump_num)
logger.info(dynamic_dump_set)
global_dict["dynamic_excavator_set"] = dynamic_excavator_set global_dict["dynamic_excavator_set"] = dynamic_excavator_set
global_dict["dynamic_excavator_num"] = dynamic_excavator_num global_dict["dynamic_excavator_num"] = dynamic_excavator_num
global_dict["dynamic_dump_set"] = dynamic_dump_set global_dict["dynamic_dump_set"] = dynamic_dump_set
......
...@@ -239,7 +239,8 @@ class TruckInfo(WalkManage): ...@@ -239,7 +239,8 @@ class TruckInfo(WalkManage):
last_load_time_tmp = eval(byte_to_str(key_value_dict[str_to_byte("lastLoadTime")])) last_load_time_tmp = eval(byte_to_str(key_value_dict[str_to_byte("lastLoadTime")]))
tmp_time = datetime.strptime(last_load_time_tmp, "%Y-%m-%d %H:%M:%S") tmp_time = datetime.strptime(last_load_time_tmp, "%Y-%m-%d %H:%M:%S")
if tmp_time > datetime.strptime("2020-01-01 01:01:01", "%Y-%m-%d %H:%M:%S"): # 若最后装载时间异常 if tmp_time > datetime.strptime("2020-01-01 01:01:01", "%Y-%m-%d %H:%M:%S"): # 若最后装载时间异常
self.last_load_time[item] = tmp_time # self.last_load_time[item] = tmp_time
self.last_load_time[item] = datetime.now()
else: else:
self.last_load_time[item] = datetime.now() self.last_load_time[item] = datetime.now()
...@@ -260,7 +261,8 @@ class TruckInfo(WalkManage): ...@@ -260,7 +261,8 @@ class TruckInfo(WalkManage):
last_unload_time_tmp = eval(key_value_dict[str_to_byte("lastUnloadTime")]) last_unload_time_tmp = eval(key_value_dict[str_to_byte("lastUnloadTime")])
tmp_time = datetime.strptime(last_unload_time_tmp, "%Y-%m-%d %H:%M:%S") tmp_time = datetime.strptime(last_unload_time_tmp, "%Y-%m-%d %H:%M:%S")
if tmp_time > datetime.strptime("2020-01-01 01:01:01", "%Y-%m-%d %H:%M:%S"): if tmp_time > datetime.strptime("2020-01-01 01:01:01", "%Y-%m-%d %H:%M:%S"):
self.last_unload_time[item] = tmp_time # self.last_unload_time[item] = tmp_time
self.last_unload_time[item] = datetime.now()
else: else:
self.last_unload_time[item] = datetime.now() self.last_unload_time[item] = datetime.now()
...@@ -417,7 +419,7 @@ class TruckInfo(WalkManage): ...@@ -417,7 +419,7 @@ class TruckInfo(WalkManage):
self.logger.info(f'车辆预期抵达挖机时间信息') self.logger.info(f'车辆预期抵达挖机时间信息')
self.logger.info(self.cur_truck_reach_excavator) self.logger.info(self.cur_truck_reach_excavator)
self.logger.info(f'车辆预期抵达电铲时间信息') self.logger.info(f'车辆预期抵达卸点时间信息')
self.logger.info(self.cur_truck_reach_dump) self.logger.info(self.cur_truck_reach_dump)
self.truck_current_trip.flatten() self.truck_current_trip.flatten()
self.logger.info("矿卡行程信息") self.logger.info("矿卡行程信息")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment