Commit c6e1edd1 authored by Allvey's avatar Allvey

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

parent 8fbf84be
......@@ -197,12 +197,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \
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)
# 计算行程时间
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(truck_reach_time_ls)
......@@ -212,9 +219,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-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(transport_value)
......@@ -260,7 +264,11 @@ class ExpectedTime(AlgorithmBase):
# get travelling time (List) to each group_dumps
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)
if len(truck_reach_time_ls) != len(group_dump_val_time_ls):
......@@ -270,6 +278,9 @@ class ExpectedTime(AlgorithmBase):
# get trip 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(truck_reach_time_ls)
......@@ -279,9 +290,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-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(transport_value)
......@@ -331,12 +339,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls = 60 * self.group.to_excavator_distance[unload_area_group_index, :] \
/ 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)
# 计算行程时间
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(truck_reach_time_ls)
......@@ -346,9 +361,6 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-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(transport_value)
......
......@@ -308,8 +308,8 @@ class Group:
self.logger.info("group_walk_available")
self.logger.info(self.group_walk_available)
except Exception as es:
self.logger.error(es)
self.logger.error(es.__traceback__.tb_lineno)
self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("设备物料读取异常")
def update_device_bind(self):
......@@ -679,9 +679,9 @@ class GroupDispatcher:
f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}')
except Exception as es:
self.logger.error("重载车辆全智能模式-计算异常")
self.logger.error(es.__traceback__.tb_lineno)
self.logger.error(es)
self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("重载车辆全智能模式计算异常, 执行默认调度计划")
def empty_period_dispatch(self, s: AlgorithmBase, truck_dispatch: Mapping[str, List[str]], truck_id: str, truck_info: CurrentTruck,
truck_trip: List[int]):
......@@ -715,9 +715,9 @@ class GroupDispatcher:
f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}')
except Exception as es:
self.logger.error("空载车辆全智能模式-计算异常")
self.logger.error(es.__traceback__.tb_lineno)
self.logger.error(es)
self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("空载车辆全智能模式计算异常, 执行默认调度计划")
def truck_construct(self, truck_id):
"""
......@@ -993,9 +993,9 @@ class ReDispatcher:
else:
continue
except Exception as es:
self.logger.error("寻找最佳卸载区异常")
self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("寻找最佳卸载区异常")
return best_dump_id
......@@ -1018,36 +1018,38 @@ class ReDispatcher:
else:
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:
traveling_time = 60 * (value[0] / 1000) / empty_speed
if value[-1] == 1 and excavator_id in self.group.group_excavators:
self.logger.info(f'load_area {load_area}')
self.logger.info(f'traveling_time {traveling_time}')
traveling_time = 60 * (value[0] / 1000) / empty_speed
now = float(
(datetime.now() - self.group.pre_sch.start_time) / timedelta(hours=0, minutes=1, seconds=0))
self.logger.info(f'load_area {load_area}')
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)[
excavator_id]) - now
self.logger.info(f'reach_time {reach_time}')
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:
best_excavator_id = excavator_id
min_trip_time = trip_time
self.logger.info(f'trip_time {trip_time}')
if min_trip_time > trip_time:
best_excavator_id = excavator_id
min_trip_time = trip_time
else:
continue
except Exception as es:
self.logger.error("寻找最佳装载区异常")
self.logger.error(f'exception {es}')
self.logger.error(f'in line {es.__traceback__.tb_lineno}')
self.logger.error("寻找最佳装载区异常")
return best_excavator_id
def get_congestion_lanes(self):
......
......@@ -89,12 +89,12 @@ class DispatchSubmission:
:param redispatch:
:return:
"""
if (task in [1, 2]) or (task == 3 and state == 2): # 车辆位于装载区,或车辆重载等待
if task in [1, 2, 3]: # 车辆位于装载区,或车辆重载等待
# if task in [1, 2]:
# self.logger.info(f'车辆 {truck_id} 装载区调度')
# else:
# self.logger.info(f'车辆 {truck_id} 重载二次调度')
if task in [1, 2]:
self.logger.info(f'车辆 {truck_id} 装载区调度')
else:
self.logger.info(f'车辆 {truck_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):
......@@ -141,14 +141,14 @@ class DispatchSubmission:
# 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:
# self.logger.info(f'车辆 {truck_id} 备停区调度')
# elif task in [4, 5]:
# self.logger.info(f'车辆 {truck_id} 卸载区调度')
# else:
# self.logger.info(f'车辆 {truck_id} 空载二次调度')
if task == -2:
self.logger.info(f'车辆 {truck_id} 备停区调度')
elif task in [4, 5]:
self.logger.info(f'车辆 {truck_id} 卸载区调度')
else:
self.logger.info(f'车辆 {truck_id} 空载二次调度')
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if dispatch_seq[0] is None:
......@@ -173,33 +173,24 @@ class DispatchSubmission:
# try:
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:
# 车辆停车等待
# try:
# if truck_id in self.truck.truck_is_temp and not self.truck.truck_is_temp[truck_id]:
self.logger.info("二次调度前往装载区")
record["isTemp"] = True # 避免反复修改
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
# 车辆重载等待,且前方道路阻塞
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]:
self.logger.info("二次调度前往装载区")
record["isTemp"] = True # 避免反复修改
POST(truck_id)
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
else:
self.logger.info("正常调度前往装载区")
record["isTemp"] = False
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
POST(truck_id)
else:
self.logger.info("正常调度前往装载区")
record["isTemp"] = False
self.logger.info(f'redis 注入 {record}')
redis5.set(truck_id, str(json.dumps(record)))
else:
pass
......@@ -246,7 +237,7 @@ class DispatchSubmission:
self.logger.info(
"======================================== 计划完成写入 =======================================")
else:
raise Exception(f'车辆 {truck_id} 未正常生成派车计划')
raise Exception(f'车辆 {truck_id} 未正常生成派车计划, 执行默认派车计划')
except Exception as es:
# self.logger.error("group_dispatch_to_redis_error")
self.logger.error(es)
......
......@@ -319,9 +319,17 @@ def global_period_para_update():
dynamic_excavator_set = set(update_autodisp_excavator())
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_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_num"] = dynamic_excavator_num
global_dict["dynamic_dump_set"] = dynamic_dump_set
......
......@@ -239,7 +239,8 @@ class TruckInfo(WalkManage):
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")
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:
self.last_load_time[item] = datetime.now()
......@@ -260,7 +261,8 @@ class TruckInfo(WalkManage):
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")
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:
self.last_unload_time[item] = datetime.now()
......@@ -417,7 +419,7 @@ class TruckInfo(WalkManage):
self.logger.info(f'车辆预期抵达挖机时间信息')
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.truck_current_trip.flatten()
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