Commit 8edf3046 authored by 张晓彤's avatar 张晓彤

代码优化v3

parent c81d437a
...@@ -55,9 +55,9 @@ class Congestion(AlgorithmBase): ...@@ -55,9 +55,9 @@ class Congestion(AlgorithmBase):
task = self.truck.get_truck_current_task()[truck_id] task = self.truck.get_truck_current_task()[truck_id]
group_dynamic_excavator_num = len(self.group.dump) group_dynamic_excavator_num = len(self.group.group_dumps)
group_dynamic_dump_num = len(self.group.excavator) group_dynamic_dump_num = len(self.group.group_excavators)
except Exception as es: except Exception as es:
self.logger.error("车辆调度信息读取异常") self.logger.error("车辆调度信息读取异常")
...@@ -158,9 +158,9 @@ class ExpectedTime(AlgorithmBase): ...@@ -158,9 +158,9 @@ class ExpectedTime(AlgorithmBase):
truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id) truck_avl_time = self.pre_sch.get_truck_avl_time(truck_id=truck_id)
group_dynamic_excavator_num = len(self.group.excavator) group_dynamic_excavator_num = len(self.group.group_excavators)
group_dynamic_unload_area_num = len(self.group.unload_area) group_dynamic_unload_area_num = len(self.group.group_unload_areas)
# except Exception as es: # except Exception as es:
# self.logger.error("车辆调度信息读取异常") # self.logger.error("车辆调度信息读取异常")
...@@ -174,7 +174,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -174,7 +174,7 @@ class ExpectedTime(AlgorithmBase):
# try: # try:
self.logger.info(f'矿卡 {truck_id}') self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡启动或故障恢复") self.logger.info("矿卡状态:矿卡启动或故障恢复")
self.logger.info(f"涉及挖机:{self.group.excavator}") self.logger.info(f"涉及挖机:{self.group.group_excavators}")
# self.logger.info(f"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}") # self.logger.info(f"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
# except Exception as es: # except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配") # self.logger.error(f"矿卡{truck_id}状态不匹配")
...@@ -185,7 +185,7 @@ class ExpectedTime(AlgorithmBase): ...@@ -185,7 +185,7 @@ class ExpectedTime(AlgorithmBase):
excavator_val_time_dict = self.pre_sch.get_excavator_avl_time() excavator_val_time_dict = self.pre_sch.get_excavator_avl_time()
# 局部挖机可用时间 list # 局部挖机可用时间 list
group_excavator_avl_time_ls = np.full(len(self.group.excavator), 0.0) group_excavator_avl_time_ls = np.full(len(self.group.group_excavators), 0.0)
self.logger.info("self.group.excavator_uuid_index_dict") self.logger.info("self.group.excavator_uuid_index_dict")
self.logger.info(self.group.excavator_uuid_index_dict) self.logger.info(self.group.excavator_uuid_index_dict)
...@@ -229,18 +229,18 @@ class ExpectedTime(AlgorithmBase): ...@@ -229,18 +229,18 @@ class ExpectedTime(AlgorithmBase):
# try: # try:
self.logger.info(f'矿卡 {truck_id}') self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡空载") self.logger.info("矿卡状态:矿卡空载")
self.logger.info(f"涉及卸载设备:{self.group.dump}") self.logger.info(f"涉及卸载设备:{self.group.group_dumps}")
# self.logger.info(f"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}") # self.logger.info(f"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}")
# except Exception as es: # except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配") # self.logger.error(f"矿卡{truck_id}状态不匹配")
# self.logger.error(es) # self.logger.error(es)
try: try:
# get dump available time (List) for all # get group_dumps available time (List) for all
dump_val_time_dict = self.pre_sch.get_dump_avl_time() dump_val_time_dict = self.pre_sch.get_dump_avl_time()
# get dump available time (List) within the group # get group_dumps available time (List) within the group
group_dump_val_time_ls = np.full(len(self.group.unload_area), 0.0) group_dump_val_time_ls = np.full(len(self.group.group_unload_areas), 0.0)
self.logger.info("self.group.dump_uuid_index_dict") self.logger.info("self.group.dump_uuid_index_dict")
self.logger.info(self.group.dump_uuid_index_dict) self.logger.info(self.group.dump_uuid_index_dict)
...@@ -248,17 +248,17 @@ class ExpectedTime(AlgorithmBase): ...@@ -248,17 +248,17 @@ class ExpectedTime(AlgorithmBase):
for dump_id, dump_index in self.group.dump_uuid_index_dict.items(): for dump_id, dump_index in self.group.dump_uuid_index_dict.items():
group_dump_val_time_ls[dump_index] = dump_val_time_dict[dump_id] group_dump_val_time_ls[dump_index] = dump_val_time_dict[dump_id]
# get truck located excavator id (uuid) from truck trip # get truck located group_excavators id (uuid) from truck trip
if int(trip[1]) < 0 or int(trip[1]) >= len(DeviceMap.excavator_index_to_uuid_dict): if int(trip[1]) < 0 or int(trip[1]) >= len(DeviceMap.excavator_index_to_uuid_dict):
raise CoreException(105, f'车辆 {truck_id} 行程驶往 {int(trip[1])} 号挖机越界') raise CoreException(105, f'车辆 {truck_id} 行程驶往 {int(trip[1])} 号挖机越界')
excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])] excavator_id = DeviceMap.excavator_index_to_uuid_dict[int(trip[1])]
# get excavator index (int) within group from group's excavator_group_index # get group_excavators index (int) within group from group's excavator_group_index
if excavator_id not in self.group.excavator_uuid_index_dict: if excavator_id not in self.group.excavator_uuid_index_dict:
raise CoreException(106, f'挖机 {excavator_id} 不存在于分组 {self.group.name} excavator_uuid_index_dict') raise CoreException(106, f'挖机 {excavator_id} 不存在于分组 {self.group.name} excavator_uuid_index_dict')
excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id] excavator_group_index = self.group.excavator_uuid_index_dict[excavator_id]
# get travelling time (List) to each dump # 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 / self.truck.heavy_speed[truck_id] + truck_avl_time
...@@ -296,18 +296,18 @@ class ExpectedTime(AlgorithmBase): ...@@ -296,18 +296,18 @@ class ExpectedTime(AlgorithmBase):
# try: # try:
self.logger.info(f'矿卡 {truck_id}') self.logger.info(f'矿卡 {truck_id}')
self.logger.info("矿卡状态:矿卡重载") self.logger.info("矿卡状态:矿卡重载")
self.logger.info(f'涉及挖机设备:{self.group.excavator}') self.logger.info(f'涉及挖机设备:{self.group.group_excavators}')
# self.logger.info(f"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}") # self.logger.info(f"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
# except Exception as es: # except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配") # self.logger.error(f"矿卡{truck_id}状态不匹配")
# self.logger.error(es) # self.logger.error(es)
try: try:
# get excavator available time (List) for all # get group_excavators available time (List) for all
excavator_val_time = self.pre_sch.get_excavator_avl_time() excavator_val_time = self.pre_sch.get_excavator_avl_time()
# get excavator available time (List) within the group # get group_excavators available time (List) within the group
group_excavator_avl_time_ls = np.full(len(self.group.excavator), 0.0) group_excavator_avl_time_ls = np.full(len(self.group.group_excavators), 0.0)
self.logger.info("self.group.excavator_uuid_index_dict") self.logger.info("self.group.excavator_uuid_index_dict")
self.logger.info(self.group.excavator_uuid_index_dict) self.logger.info(self.group.excavator_uuid_index_dict)
...@@ -315,10 +315,10 @@ class ExpectedTime(AlgorithmBase): ...@@ -315,10 +315,10 @@ class ExpectedTime(AlgorithmBase):
for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items(): for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items():
group_excavator_avl_time_ls[excavator_index] = excavator_val_time[excavator_id] group_excavator_avl_time_ls[excavator_index] = excavator_val_time[excavator_id]
# get truck located dump id (uuid) from truck trip # get truck located group_dumps id (uuid) from truck trip
dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])] dump_id = DeviceMap.dump_index_to_uuid_dict[int(trip[1])]
# get unload area id (uuid) from DispatchInfo dump_id to unload_area mapping # get unload area id (uuid) from DispatchInfo dump_id to group_unload_areas mapping
unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id] unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id]
# get unload area id (uuid) from DispatchInfo dump_id to unload # get unload area id (uuid) from DispatchInfo dump_id to unload
......
...@@ -15,6 +15,9 @@ from data.para_config import get_value ...@@ -15,6 +15,9 @@ from data.para_config import get_value
from core.util import * from core.util import *
from typing import Mapping, List from typing import Mapping, List
from util import CoreException from util import CoreException
from equipment import TruckInfo, ExcavatorInfo, DumpInfo
from core.schedule import PreSchedule
from graph.topo_graph import Topo
class CurrentTruck: class CurrentTruck:
...@@ -31,7 +34,7 @@ class CurrentTruck: ...@@ -31,7 +34,7 @@ class CurrentTruck:
""" """
def __init__(self, truck_id, group_id, trip, task, state): def __init__(self, truck_id: str, group_id: str, trip: List[int], task: int, state: int):
self._truck_id = truck_id self._truck_id = truck_id
self._group_id = group_id self._group_id = group_id
self._trip = trip self._trip = trip
...@@ -58,9 +61,16 @@ class Group: ...@@ -58,9 +61,16 @@ class Group:
""" """
class for group instance. class for group instance.
""" """
def __init__(self, group_id, truck, pre_sch, excavator_info, dump_info, topo): def __init__(self, group_id, truck: TruckInfo, pre_sch: PreSchedule, excavator_info: ExcavatorInfo,
""" Generate a group obj. dump_info: DumpInfo, topo: Topo):
:param group_id: (uuid) group_id """
Generate a group obj.
:param group_id:
:param truck:
:param pre_sch:
:param excavator_info:
:param dump_info:
:param topo:
""" """
self.logger = get_logger("zxt.Group") self.logger = get_logger("zxt.Group")
# basic info. # basic info.
...@@ -76,11 +86,10 @@ class Group: ...@@ -76,11 +86,10 @@ class Group:
self.topo = topo self.topo = topo
# group devices # group devices
self.excavator = {} # excavator_id -> unload_area_id self.group_excavators = {}
self.unload_area = {} # unload_area_id -> load_area_id self.group_unload_areas = {}
self.dump = {} self.group_dumps = {}
self.truck_set = set() # truck_id self.group_trucks = set()
# road network info. # road network info.
self.to_excavator_distance = None self.to_excavator_distance = None
...@@ -124,17 +133,14 @@ class Group: ...@@ -124,17 +133,14 @@ class Group:
""" """
# update group devices # update group devices
# DispatchInfo.update_device_group_structure() # DispatchInfo.update_device_group_structure()
self.excavator = {} self.group_excavators = {}
self.unload_area = {} self.group_unload_areas = {}
self.dump = {} self.group_dumps = {}
self.truck_set = set() self.group_trucks = set()
self.excavator = DispatchInfo.get_excavator(self.group_id) self.group_excavators = DispatchInfo.get_excavator(self.group_id)
self.unload_area = DispatchInfo.get_unload_area(self.group_id) self.group_unload_areas = DispatchInfo.get_unload_area(self.group_id)
self.dump = DispatchInfo.get_dump(self.group_id) self.group_dumps = DispatchInfo.get_dump(self.group_id)
self.truck_set = DispatchInfo.get_truck_set(self.group_id) self.group_trucks = DispatchInfo.get_truck_set(self.group_id)
# self.logger.info(f'group excavator {self.excavator}')
# self.logger.info(f'group dump {self.dump}')
def update_group_road_network(self): def update_group_road_network(self):
""" """
...@@ -175,23 +181,10 @@ class Group: ...@@ -175,23 +181,10 @@ class Group:
# self.logger.info("物料兼容性") # self.logger.info("物料兼容性")
# self.logger.info(DispatchInfo.group_name[self.group_id]) # self.logger.info(DispatchInfo.group_name[self.group_id])
for dump_id in self.dump: for dump_id in self.group_dumps:
for excavator_id in self.excavator: for excavator_id in self.group_excavators:
# load_area_id = DispatchInfo.excavator_load_dict[excavator_id]
# unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id]
excavator_index = self.excavator_uuid_index_dict[excavator_id] excavator_index = self.excavator_uuid_index_dict[excavator_id]
dump_index = self.dump_uuid_index_dict[dump_id] dump_index = self.dump_uuid_index_dict[dump_id]
# load_area_index = get_value("load_area_uuid_to_index_dict")[load_area_id]
# unload_area_index = get_value("unload_area_uuid_to_index_dict")[unload_area_id]
# 两设备处理物料不同, 相关路网不可通行
# self.logger.info(excavator_id)
# self.logger.info(self.excavator_info.excavator_material)
# self.logger.info(self.excavator_info.excavator_material[excavator_id])
# self.logger.info(dump_id)
# self.logger.info(self.dump_info.dump_material)
# self.logger.info(self.dump_info.dump_material[dump_id])
if self.excavator_info.excavator_material[excavator_id] not in self.dump_info.dump_material[dump_id]: if self.excavator_info.excavator_material[excavator_id] not in self.dump_info.dump_material[dump_id]:
self.group_walk_available[excavator_index][dump_index] = 10 self.group_walk_available[excavator_index][dump_index] = 10
...@@ -263,7 +256,7 @@ class GroupDispatcher: ...@@ -263,7 +256,7 @@ class GroupDispatcher:
self.logger.info(f'分组 {self.group.group_name} 调度计算-调度模式 {self.group.group_mode}') self.logger.info(f'分组 {self.group.group_name} 调度计算-调度模式 {self.group.group_mode}')
for truck_id in list(self.group.truck_set): for truck_id in list(self.group.group_trucks):
self.logger.info(f'调度车辆 {truck_id}') self.logger.info(f'调度车辆 {truck_id}')
...@@ -433,7 +426,7 @@ class GroupDispatcher: ...@@ -433,7 +426,7 @@ class GroupDispatcher:
if i in self.group.truck.truck_excavator_bind: if i in self.group.truck.truck_excavator_bind:
try: try:
if i not in self.group.truck.truck_excavator_bind: if i not in self.group.truck.truck_excavator_bind:
raise CoreException(102, f'truck.excavator bind 中不存在 {i}') raise CoreException(102, f'truck.group_excavators bind 中不存在 {i}')
except CoreException as es: except CoreException as es:
es.with_traceback_info() es.with_traceback_info()
self.logger.error(es) self.logger.error(es)
...@@ -495,11 +488,12 @@ class GroupDispatcher: ...@@ -495,11 +488,12 @@ class GroupDispatcher:
self.logger.error(es) self.logger.error(es)
truck_dispatch[i] = [None, None] truck_dispatch[i] = [None, None]
elif truck_task == 0: elif truck_task == 0:
try: if i in self.group.truck.get_truck_locate_dict():
truck_locate = self.group.truck.get_truck_locate_dict()[i] truck_locate = self.group.truck.get_truck_locate_dict()[i]
except Exception as es: else:
self.logger.error("车辆位置信息丢失") self.logger.error(f'车辆 {i} 位置信息丢失')
self.logger.error(es) truck_dispatch[i] = [None, None]
return
self.logger.info(self.group.truck.truck_is_temp) self.logger.info(self.group.truck.truck_is_temp)
try: try:
...@@ -543,15 +537,26 @@ class GroupDispatcher: ...@@ -543,15 +537,26 @@ class GroupDispatcher:
if (truck_locate in self.group.topo.cross_bf_lanes) and (self.group.truck.truck_current_state[i] == 2) \ if (truck_locate in self.group.topo.cross_bf_lanes) and (self.group.truck.truck_current_state[i] == 2) \
and (not truck_is_temp): and (not truck_is_temp):
self.redispatch_to_dump(i, truck_dispatch, truck_locate, truck_trip)
def redispatch_to_dump(self, truck_id, truck_dispatch, truck_locate, truck_trip):
"""
redispatch truck to dumps.
:param truck_id:
:param truck_dispatch:
:param truck_locate:
:param truck_trip:
:return:
"""
# 当前绑定装载区 # 当前绑定装载区
if truck_trip[0] == -1: if truck_trip[0] == -1:
next_excavator_id = session_mysql.query(EquipmentPair).filter_by(truck_id=i, next_excavator_id = session_mysql.query(EquipmentPair).filter_by(truck_id=truck_id,
isdeleted=0).first().exactor_id isdeleted=0).first().exactor_id
else: else:
next_excavator_id = get_value("excavator_index_to_uuid_dict")[truck_trip[0]] next_excavator_id = get_value("excavator_index_to_uuid_dict")[truck_trip[0]]
# 当前绑定卸载区 # 当前绑定卸载区
if truck_trip[-1] == -1: if truck_trip[-1] == -1:
item = session_mysql.query(EquipmentPair).filter_by(truck_id=i, isdeleted=0).first() item = session_mysql.query(EquipmentPair).filter_by(truck_id=truck_id, isdeleted=0).first()
current_dump_id = item.dump_id current_dump_id = item.dump_id
current_unload_area_id = item.unload_area_id current_unload_area_id = item.unload_area_id
else: else:
...@@ -560,24 +565,18 @@ class GroupDispatcher: ...@@ -560,24 +565,18 @@ class GroupDispatcher:
unload_area_dict, unload_area_lane_dict = self.group.topo.get_unload_target_node_real(truck_locate, unload_area_dict, unload_area_lane_dict = self.group.topo.get_unload_target_node_real(truck_locate,
current_unload_area_id, current_unload_area_id,
True) True)
# 获取拥堵路段 # 获取拥堵路段
congestion_lane_dict = self.get_congestion_lanes() congestion_lane_dict = self.get_congestion_lanes()
# 获取当前交叉口下一路段集合 # 获取当前交叉口下一路段集合
next_lane_list = get_cross_next_lanes(truck_locate) next_lane_list = get_cross_next_lanes(truck_locate)
# 交叉口下一路段可达的装载区 # 交叉口下一路段可达的装载区
next_lane_load_area_dict = get_lane_reach_load_areas(unload_area_lane_dict, next_lane_load_area_dict = get_lane_reach_load_areas(unload_area_lane_dict,
next_lane_list) next_lane_list)
# 排除下一个路段阻塞的装载区 # 排除下一个路段阻塞的装载区
delete_congestion_load_area(congestion_lane_dict, unload_area_dict, delete_congestion_load_area(congestion_lane_dict, unload_area_dict,
next_lane_load_area_dict) next_lane_load_area_dict)
min_trip_time = 10000000 min_trip_time = 10000000
best_dump_id = current_dump_id best_dump_id = current_dump_id
for unload_area, value in unload_area_dict.items(): for unload_area, value in unload_area_dict.items():
# 车辆不需要掉头 # 车辆不需要掉头
if value[-1] == 1 and unload_area in DispatchInfo.unload_area_dump_dict: if value[-1] == 1 and unload_area in DispatchInfo.unload_area_dump_dict:
...@@ -595,16 +594,12 @@ class GroupDispatcher: ...@@ -595,16 +594,12 @@ class GroupDispatcher:
if min_trip_time > trip_time: if min_trip_time > trip_time:
best_dump_id = dump_id best_dump_id = dump_id
next_unload_area_id = DispatchInfo.dump_unload_area_dict[best_dump_id] next_unload_area_id = DispatchInfo.dump_unload_area_dict[best_dump_id]
truck_dispatch[truck_id] = [next_excavator_id, next_unload_area_id]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
# res = redispatch_request(truck_id, next_excavator_id, next_unload_area_id) # res = redispatch_request(truck_id, next_excavator_id, next_unload_area_id)
# self.logger.info(res) # self.logger.info(res)
self.logger.info(f'二次调度结果 {i}') self.logger.info(f'二次调度结果 {truck_id}')
self.logger.info(truck_dispatch[i]) self.logger.info(truck_dispatch[truck_id])
def redispatch_to_excavator(self, truck_id, truck_dispatch, truck_locate): def redispatch_to_excavator(self, truck_id, truck_dispatch, truck_locate):
""" """
...@@ -655,7 +650,7 @@ class GroupDispatcher: ...@@ -655,7 +650,7 @@ class GroupDispatcher:
def get_best_excavator(self, current_excavator_id, truck_id, load_area_dict): def get_best_excavator(self, current_excavator_id, truck_id, load_area_dict):
""" """
get best excavator get best group_excavators
:param current_excavator_id: 当前车辆配对挖机 :param current_excavator_id: 当前车辆配对挖机
:param truck_id: :param truck_id:
:param load_area_dict: 备选装载区 :param load_area_dict: 备选装载区
...@@ -670,7 +665,7 @@ class GroupDispatcher: ...@@ -670,7 +665,7 @@ class GroupDispatcher:
excavator_id = DispatchInfo.load_excavator_dict[load_area] excavator_id = DispatchInfo.load_excavator_dict[load_area]
else: else:
continue continue
if value[-1] == 1 and excavator_id in self.group.excavator: if value[-1] == 1 and excavator_id in self.group.group_excavators:
traveling_time = 60 * (value[0] / 1000) / empty_speed traveling_time = 60 * (value[0] / 1000) / empty_speed
self.logger.info(f'load_area {load_area}') self.logger.info(f'load_area {load_area}')
...@@ -768,7 +763,7 @@ class ReDispatcher: ...@@ -768,7 +763,7 @@ class ReDispatcher:
def get_best_excavator(self, current_excavator_id, truck_id, load_area_dict): def get_best_excavator(self, current_excavator_id, truck_id, load_area_dict):
""" """
get best excavator get best group_excavators
:param current_excavator_id: 当前车辆配对挖机 :param current_excavator_id: 当前车辆配对挖机
:param truck_id: :param truck_id:
:param load_area_dict: 备选装载区 :param load_area_dict: 备选装载区
...@@ -783,7 +778,7 @@ class ReDispatcher: ...@@ -783,7 +778,7 @@ class ReDispatcher:
excavator_id = DispatchInfo.load_excavator_dict[load_area] excavator_id = DispatchInfo.load_excavator_dict[load_area]
else: else:
continue continue
if value[-1] == 1 and excavator_id in self.group.excavator: if value[-1] == 1 and excavator_id in self.group.group_excavators:
traveling_time = 60 * (value[0] / 1000) / empty_speed traveling_time = 60 * (value[0] / 1000) / empty_speed
self.logger.info(f'load_area {load_area}') self.logger.info(f'load_area {load_area}')
......
...@@ -22,9 +22,9 @@ class PreSchedule: ...@@ -22,9 +22,9 @@ class PreSchedule:
根据矿卡请求队列及抵达信息,计算设备最早可用时间 根据矿卡请求队列及抵达信息,计算设备最早可用时间
Attribute: Attribute:
equipment class: truck, excavator, dump equipment class: truck, group_excavators, group_dumps
schedule start time schedule start time
equipment available time: truck, excavator, dump equipment available time: truck, group_excavators, group_dumps
""" """
......
...@@ -231,9 +231,9 @@ class DispatchSubmission: ...@@ -231,9 +231,9 @@ class DispatchSubmission:
""" """
self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}') self.logger.info(f'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}')
self.logger.info(f'组内车辆 {group.truck_set}') self.logger.info(f'组内车辆 {group.group_trucks}')
self.logger.info(f'组内挖机 {group.excavator}') self.logger.info(f'组内挖机 {group.group_excavators}')
self.logger.info(f'组内卸点 {group.dump}') self.logger.info(f'组内卸点 {group.group_dumps}')
self.logger.info(f'调度模式 {group.group_mode}') self.logger.info(f'调度模式 {group.group_mode}')
self.logger.info("dispatch_plan_dict") self.logger.info("dispatch_plan_dict")
self.logger.info(dispatch_plan_dict) self.logger.info(dispatch_plan_dict)
......
...@@ -25,15 +25,15 @@ class DispatchInfo: ...@@ -25,15 +25,15 @@ class DispatchInfo:
load_excavator_dict = {} # 装载区id-->>电铲编号的映射 load_excavator_dict = {} # 装载区id-->>电铲编号的映射
excavator_load_dict = {} # 电铲编号->>装载区id的映射 excavator_load_dict = {} # 电铲编号->>装载区id的映射
# excavator <-> group id # group_excavators <-> group id
group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...} group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...}
excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值 excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值
# unload_area <-> group id # group_unload_areas <-> group id
group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...} group_unload_area_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
unload_area_group_dict = {} # unload_area_id -> team_id unload_area_group_dict = {} # unload_area_id -> team_id
# dump <-> group id # group_dumps <-> group id
group_dump_dict = {} group_dump_dict = {}
dump_group_dict = {} dump_group_dict = {}
...@@ -54,7 +54,7 @@ class DispatchInfo: ...@@ -54,7 +54,7 @@ class DispatchInfo:
# truck -> match(excavator_id, unload_area_id) # truck -> match(excavator_id, unload_area_id)
truck_match_dict = {} truck_match_dict = {}
# unload_area <-> dump id # group_unload_areas <-> group_dumps id
dump_unload_area_dict = {} dump_unload_area_dict = {}
unload_area_dump_dict = {} unload_area_dump_dict = {}
...@@ -204,7 +204,7 @@ class DispatchInfo: ...@@ -204,7 +204,7 @@ class DispatchInfo:
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id # update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
try: try:
for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all(): for item in session_mysql.query(DispatchSetting).filter_by(isdeleted=0).all():
# add excavator # add group_excavators
if item.group_id not in cls.group_excavator_dict.keys(): if item.group_id not in cls.group_excavator_dict.keys():
cls.group_excavator_dict[item.group_id] = [item.exactor_id] cls.group_excavator_dict[item.group_id] = [item.exactor_id]
else: else:
...@@ -212,7 +212,7 @@ class DispatchInfo: ...@@ -212,7 +212,7 @@ class DispatchInfo:
cls.group_excavator_dict[item.group_id].append(item.exactor_id) cls.group_excavator_dict[item.group_id].append(item.exactor_id)
cls.excavator_group_dict[item.exactor_id] = item.group_id cls.excavator_group_dict[item.exactor_id] = item.group_id
# add unload_area # add group_unload_areas
if item.group_id not in cls.group_unload_area_dict.keys(): if item.group_id not in cls.group_unload_area_dict.keys():
cls.group_unload_area_dict[item.group_id] = [item.unload_area_id] cls.group_unload_area_dict[item.group_id] = [item.unload_area_id]
else: else:
...@@ -220,7 +220,7 @@ class DispatchInfo: ...@@ -220,7 +220,7 @@ class DispatchInfo:
cls.group_unload_area_dict[item.group_id].append(item.unload_area_id) cls.group_unload_area_dict[item.group_id].append(item.unload_area_id)
cls.unload_area_group_dict[item.unload_area_id] = item.group_id cls.unload_area_group_dict[item.unload_area_id] = item.group_id
# add dump # add group_dumps
if item.group_id not in cls.group_dump_dict.keys(): if item.group_id not in cls.group_dump_dict.keys():
cls.group_dump_dict[item.group_id] = [item.dump_id] cls.group_dump_dict[item.group_id] = [item.dump_id]
else: else:
......
...@@ -48,13 +48,13 @@ logger = get_logger("zxt.para") ...@@ -48,13 +48,13 @@ logger = get_logger("zxt.para")
# excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map() # excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map()
# #
# # 矿卡集合 # # 矿卡集合
# truck_set = set(update_total_truck()) # group_trucks = set(update_total_truck())
# #
# # 固定派车矿卡集合 # # 固定派车矿卡集合
# fixed_truck_set = set(update_fixdisp_truck()) # fixed_truck_set = set(update_fixdisp_truck())
# #
# # 动态派车矿卡集合 # # 动态派车矿卡集合
# # dynamic_truck_set = truck_set.difference(fixed_truck_set) # # dynamic_truck_set = group_trucks.difference(fixed_truck_set)
# dynamic_truck_set = update_dynamic_truck() # dynamic_truck_set = update_dynamic_truck()
# #
# dynamic_truck_num = len(dynamic_truck_set) # dynamic_truck_num = len(dynamic_truck_set)
...@@ -472,7 +472,7 @@ def global_period_para_update(): ...@@ -472,7 +472,7 @@ def global_period_para_update():
# 矿卡集合 # 矿卡集合
truck_set = set(update_total_truck()) truck_set = set(update_total_truck())
logger.info("truck_set") logger.info("group_trucks")
logger.info(truck_set) logger.info(truck_set)
# 固定派车矿卡集合 # 固定派车矿卡集合
...@@ -482,7 +482,7 @@ def global_period_para_update(): ...@@ -482,7 +482,7 @@ def global_period_para_update():
logger.info(fixed_truck_set) logger.info(fixed_truck_set)
# 动态派车矿卡集合 # 动态派车矿卡集合
# dynamic_truck_set = truck_set.difference(fixed_truck_set) # dynamic_truck_set = group_trucks.difference(fixed_truck_set)
dynamic_truck_set = update_dynamic_truck() dynamic_truck_set = update_dynamic_truck()
dynamic_truck_num = len(dynamic_truck_set) dynamic_truck_num = len(dynamic_truck_set)
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# @Time : 2021/8/24 11:28 # @Time : 2021/8/24 11:28
# @Author : Opfer # @Author : Opfer
# @Site : # @Site :
# @File : dump.py # @File : group_dumps.py
# @Software: PyCharm # @Software: PyCharm
from data.para_config import * from data.para_config import *
...@@ -33,7 +33,7 @@ class DumpInfo(WalkManage): ...@@ -33,7 +33,7 @@ class DumpInfo(WalkManage):
self.dump_strength = np.zeros(self.dynamic_dump_num) self.dump_strength = np.zeros(self.dynamic_dump_num)
# 日志器 # 日志器
self.logger = get_logger("zxt.dump") self.logger = get_logger("zxt.group_dumps")
# # 参数初始化 # # 参数初始化
# self.dump_para_period_update() # self.dump_para_period_update()
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# @Time : 2021/8/24 11:28 # @Time : 2021/8/24 11:28
# @Author : Opfer # @Author : Opfer
# @Site : # @Site :
# @File : excavator.py # @File : group_excavators.py
# @Software: PyCharm # @Software: PyCharm
from data.para_config import * from data.para_config import *
...@@ -37,7 +37,7 @@ class ExcavatorInfo(WalkManage): ...@@ -37,7 +37,7 @@ class ExcavatorInfo(WalkManage):
self.excavator_strength = np.zeros(self.dynamic_excavator_num) self.excavator_strength = np.zeros(self.dynamic_excavator_num)
# 日志器 # 日志器
self.logger = get_logger("zxt.excavator") self.logger = get_logger("zxt.group_excavators")
# #
# # 参数初始化 # # 参数初始化
# self.excavator_para_period_update() # self.excavator_para_period_update()
......
...@@ -76,7 +76,7 @@ class TruckInfo(WalkManage): ...@@ -76,7 +76,7 @@ class TruckInfo(WalkManage):
# 日志 # 日志
self.logger = get_logger("zxt.truck") self.logger = get_logger("zxt.truck")
# # 初始化读取参数 # # 初始化读取参数
# self.truck_para_period_update(dump, excavator) # self.truck_para_period_update(group_dumps, group_excavators)
# # 矿卡所属group # # 矿卡所属group
# self.truck_group = {} # self.truck_group = {}
# 矿卡禁用列表 # 矿卡禁用列表
...@@ -428,7 +428,7 @@ class TruckInfo(WalkManage): ...@@ -428,7 +428,7 @@ class TruckInfo(WalkManage):
# self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1 # self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡 # 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
else: else:
# end_eqp_index = excavator.excavator_uuid_to_index_dict[item.exactor_id] # end_eqp_index = group_excavators.excavator_uuid_to_index_dict[item.exactor_id]
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1 # self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
pass pass
except Exception as es: except Exception as es:
......
...@@ -474,7 +474,7 @@ def get_lanes_between_entrances(closer_node_id, further_node_id): ...@@ -474,7 +474,7 @@ def get_lanes_between_entrances(closer_node_id, further_node_id):
def get_excavator_state(excavator_id): def get_excavator_state(excavator_id):
""" """
get excavator state. get group_excavators state.
:param excavator_id: :param excavator_id:
:return: state :return: state
""" """
......
...@@ -142,7 +142,7 @@ class Topo(): ...@@ -142,7 +142,7 @@ class Topo():
Entrancenode_for_dump = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().EntranceNodeId) Entrancenode_for_dump = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().EntranceNodeId)
dump_name = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().Name) dump_name = str(session_postgre.query(DumpArea).filter_by(Id=item[0][1]).first().Name)
self.unload_G.add_node(Exitnode_for_digging, name='digging', type=digging_name) self.unload_G.add_node(Exitnode_for_digging, name='digging', type=digging_name)
self.unload_G.add_node(Entrancenode_for_dump, name='dump', type=dump_name) self.unload_G.add_node(Entrancenode_for_dump, name='group_dumps', type=dump_name)
# path_node_for_trip.append(Exitnode_for_digging) # add start node for trip # path_node_for_trip.append(Exitnode_for_digging) # add start node for trip
...@@ -215,7 +215,7 @@ class Topo(): ...@@ -215,7 +215,7 @@ class Topo():
self.load_G_all_nodes.append(Entrancenode_for_digging) self.load_G_all_nodes.append(Entrancenode_for_digging)
self.load_G_digging_nodes.append(Entrancenode_for_digging) self.load_G_digging_nodes.append(Entrancenode_for_digging)
self.load_G.add_node(Exitnode_for_dump, name='dump', type=digging_name) self.load_G.add_node(Exitnode_for_dump, name='group_dumps', type=digging_name)
self.load_G.add_node(Entrancenode_for_digging, name='digging', type=dump_name) self.load_G.add_node(Entrancenode_for_digging, name='digging', type=dump_name)
try: try:
...@@ -333,7 +333,7 @@ class Topo(): ...@@ -333,7 +333,7 @@ class Topo():
for (u, wt) in self.unload_G.nodes.data('name'): for (u, wt) in self.unload_G.nodes.data('name'):
# select next reachable target # select next reachable target
if wt == 'dump': if wt == 'group_dumps':
if allow: if allow:
target_list.append(u) target_list.append(u)
else: else:
......
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