Commit 2da8eccd authored by z5335534 Ao Guo's avatar z5335534 Ao Guo

group层修改

parent 6621a5c0
...@@ -52,6 +52,14 @@ class Dispatcher: ...@@ -52,6 +52,14 @@ class Dispatcher:
group = Group(group_id, self.truck) group = Group(group_id, self.truck)
self.group_list.append(group) self.group_list.append(group)
def group_info_update(self):
"""
Update group information.
:return: None
"""
for group in self.group_list:
group.info_update()
def group_dispatch(self): def group_dispatch(self):
""" """
Group dispatching logic. Group dispatching logic.
......
...@@ -36,8 +36,8 @@ class Group: ...@@ -36,8 +36,8 @@ class Group:
self.truck = truck self.truck = truck
# group devices # group devices
self.excavator_dict = {} # excavator_id -> unload_area_id self.excavator = {} # excavator_id -> unload_area_id
self.dump_dict = {} # dump_id -> load_area_id self.dump = {} # dump_id -> load_area_id
self.truck_set = set() # truck_id self.truck_set = set() # truck_id
# road network info. # road network info.
...@@ -71,8 +71,8 @@ class Group: ...@@ -71,8 +71,8 @@ class Group:
""" """
# update group devices # update group devices
# DispatchInfo.update_device_group_structure() # DispatchInfo.update_device_group_structure()
self.excavator_dict = DispatchInfo.get_excavator_dict(self.group_id) self.excavator = DispatchInfo.get_excavator(self.group_id)
self.dump_dict = DispatchInfo.get_dump_dict(self.group_id) self.dump = DispatchInfo.get_dump(self.group_id)
self.truck_set = DispatchInfo.get_truck_set(self.group_id) self.truck_set = DispatchInfo.get_truck_set(self.group_id)
def update_group_road_network(self): def update_group_road_network(self):
...@@ -92,17 +92,16 @@ class Group: ...@@ -92,17 +92,16 @@ class Group:
:return: :return:
""" """
# update device map # update device map
excavator_index = 0 # excavator_index = 0
for i in self.excavator_dict.keys(): for i in range(len(self.excavator)):
self.excavator_uuid_index_dict[i] = excavator_index + 1 self.excavator_uuid_index_dict[self.excavator[i]] = i
dump_index = 0 for i in range(len(self.dump)):
for i in self.dump_dict.keys(): self.dump_uuid_index_dict[self.dump[i]] = i
self.dump_uuid_index_dict[i] = dump_index + 1
for i in range(len(self.truck_set)):
self.truck_uuid_index_dict[list(self.truck_set)[i]] = i
truck_index = 0
for i in self.truck_set:
self.truck_uuid_index_dict[i] = truck_index + 1
self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict) self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict)
self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict) self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict)
...@@ -110,6 +109,16 @@ class Group: ...@@ -110,6 +109,16 @@ class Group:
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}} # group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
def info_update(self):
"""
update group info.
:return:
"""
self.update_group_mode()
self.update_group_device()
self.update_group_road_network()
self.update_group_device_map()
def group_dispatch(self, solver: object): def group_dispatch(self, solver: object):
""" """
Receive a alg obj. and output dispatch plan for trucks in this group. Receive a alg obj. and output dispatch plan for trucks in this group.
...@@ -123,20 +132,21 @@ class Group: ...@@ -123,20 +132,21 @@ class Group:
s = solver(self) # algorithm init s = solver(self) # algorithm init
# update truck task type # update truck task type
for i in self.truck_set: for i in list(self.truck_set):
truck_trip = self.truck.get_truck_current_trip(i) truck_trip = self.truck.get_truck_current_trip()[self.truck_uuid_index_dict[i]]
truck_task = self.truck.get_truck_current_task(i) truck_task = self.truck.get_truck_current_task()[self.truck_uuid_index_dict[i]]
if truck_task in [-2, 3, 4]: if truck_task in [-2, 3, 4]:
next_excavator_list = s.solve(i) next_excavator_list = s.solve(i)
min_index = next_excavator_list.index(min(next_excavator_list)) + 1 min_index = next_excavator_list.index(min(next_excavator_list))
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index] next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
next_dump_id = truck_trip[-1] next_dump_id = truck_trip[-1]
truck_dispatch[i] = [next_excavator_id, next_dump_id] truck_dispatch[i] = [next_excavator_id, next_dump_id]
if truck_task in [0, 1]: if truck_task in [0, 1]:
next_dump_list = s.solve(i) next_dump_list = s.solve(i)
min_index = next_dump_list.index(min(next_dump_list)) + 1 min_index = next_dump_list.index(min(next_dump_list))
next_dump_id = self.dump_uuid_index_dict.inverse[min_index] next_dump_id = self.dump_uuid_index_dict.inverse[min_index]
next_excavator_id = truck_trip[-1] next_excavator_id = truck_trip[-1]
truck_dispatch[i] = [next_excavator_id, next_dump_id] truck_dispatch[i] = [next_excavator_id, next_dump_id]
...@@ -165,7 +175,7 @@ class Group: ...@@ -165,7 +175,7 @@ class Group:
# #
# # group devices # # group devices
# self.excavator_dict = {} # excavator_id -> unload_area_id # self.excavator_dict = {} # excavator_id -> unload_area_id
# self.dump_dict = {} # dump_id -> load_area_id # self.dump = {} # dump_id -> load_area_id
# self.truck_set = set() # truck_id # self.truck_set = set() # truck_id
# #
# # road network info. # # road network info.
......
...@@ -46,6 +46,8 @@ class DispatchInfo: ...@@ -46,6 +46,8 @@ class DispatchInfo:
@author:maqc @author:maqc
@desc:实例化对象,可直接访问 @desc:实例化对象,可直接访问
""" """
cls.group_set = set()
cls.load_excavator_dict = {} cls.load_excavator_dict = {}
cls.excavator_load_dict = {} cls.excavator_load_dict = {}
...@@ -82,8 +84,10 @@ class DispatchInfo: ...@@ -82,8 +84,10 @@ class DispatchInfo:
@author:maqc @author:maqc
@desc:分组与卸载区、挖机、矿卡的映射和反映射 @desc:分组与卸载区、挖机、矿卡的映射和反映射
""" """
# build excavator group map
logger = get_logger("mqc.update_device_group_structure") logger = get_logger("mqc.update_device_group_structure")
# build excavator group map
try: try:
for item in session_postgre.query(DiggingWorkArea).all(): for item in session_postgre.query(DiggingWorkArea).all():
...@@ -131,6 +135,12 @@ class DispatchInfo: ...@@ -131,6 +135,12 @@ class DispatchInfo:
logger.error("矿卡与group_id映射更新异常") logger.error("矿卡与group_id映射更新异常")
logger.error(es) logger.error(es)
# update group set
try:
cls.group_set = set(cls.group_excavator_dict.keys())
except Exception as es:
logger.error(es)
# try: # try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...} # # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # dump_group_dict = {} # unload_area_id -> team_id # # dump_group_dict = {} # unload_area_id -> team_id
...@@ -304,11 +314,11 @@ class DispatchInfo: ...@@ -304,11 +314,11 @@ class DispatchInfo:
return cls.group_mode[group_id] return cls.group_mode[group_id]
@classmethod @classmethod
def get_excavator_dict(cls, group_id): def get_excavator(cls, group_id):
return cls.group_excavator_dict[group_id] return cls.group_excavator_dict[group_id]
@classmethod @classmethod
def get_dump_dict(cls, group_id): def get_dump(cls, group_id):
return cls.group_dump_dict[group_id] return cls.group_dump_dict[group_id]
@classmethod @classmethod
...@@ -332,9 +342,9 @@ class DispatchInfo: ...@@ -332,9 +342,9 @@ class DispatchInfo:
def get_park_to_excavator_distance(cls, group_id): def get_park_to_excavator_distance(cls, group_id):
excavators = cls.group_excavator_dict[group_id] excavators = cls.group_excavator_dict[group_id]
park_matrix = np.zeros((1, len(excavators))) park_matrix = np.zeros((1, len(excavators)))
for i in range(excavators): for i in range(len(excavators)):
load_area_id = cls.excavator_load_dict[excavators[i]] load_area_id = cls.excavator_load_dict[excavators[i]]
distance = session_postgre.query(WalkTimePark).filter_by(load_area_id=load_area_id).first() distance = session_postgre.query(WalkTimePark).filter_by(load_area_id=load_area_id).first().park_load_distance
park_matrix[0][i] = distance park_matrix[0][i] = distance
return park_matrix return park_matrix
......
...@@ -18,7 +18,6 @@ from core.dispatcher import Dispatcher ...@@ -18,7 +18,6 @@ from core.dispatcher import Dispatcher
from core.schedule import PreSchedule from core.schedule import PreSchedule
from data.dispatchInfo import DispatchInfo from data.dispatchInfo import DispatchInfo
def process(dispatcher): def process(dispatcher):
""" """
周期调度进程 周期调度进程
...@@ -57,15 +56,58 @@ def process(dispatcher): ...@@ -57,15 +56,58 @@ def process(dispatcher):
DispatchInfo.update_group_mode() DispatchInfo.update_group_mode()
# logger.info
# group_set = set()
#
# # device group structure
# load_excavator_dict = {} # 装载区id-->>电铲编号的映射
# excavator_load_dict = {} # 电铲编号->>装载区id的映射
#
# group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...}
# excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值
#
# group_dump_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
# dump_group_dict = {} # unload_area_id -> team_id
#
# group_truck_dict = {} # team_id -> dict # {group_id:[truck_id,truck_id],...}
# truck_group_dict = {} # truck_id -> team_id
#
# # group feature
# group_mode = {} # 数据格式: {team_id:mode_code}
#
# # route_distance(路网距离)
# load_distance = {}
# unload_distance = {}
logger.info("Dispatchinfo,更新后信息")
logger.info(DispatchInfo.group_set)
logger.info(DispatchInfo.group_excavator_dict)
logger.info(DispatchInfo.group_dump_dict)
logger.info(DispatchInfo.group_truck_dict)
logger.info(DispatchInfo.group_mode)
logger.info(DispatchInfo.load_distance)
logger.info(DispatchInfo.unload_distance)
logger.info(DispatchInfo.load_excavator_dict)
logger.info(DispatchInfo.excavator_load_dict)
logger.info(DispatchInfo.excavator_group_dict)
logger.info(DispatchInfo.dump_group_dict)
logger.info(DispatchInfo.truck_group_dict)
# 调度生成 # 调度生成
dispatcher.period_update() dispatcher.period_update()
dispatcher.group_generate() dispatcher.group_generate()
dispatcher.group_info_update()
dispatcher.group_dispatch() dispatcher.group_dispatch()
# logger.info("#####################################周期更新结束#####################################") logger.info("#####################################周期更新结束#####################################")
#
# except Exception as es: # except Exception as es:
# logger.error("最外层异常捕获") # logger.error("最外层异常捕获")
# logger.error(es) # logger.error(es)
......
...@@ -27,7 +27,7 @@ if __name__ == '__main__': ...@@ -27,7 +27,7 @@ if __name__ == '__main__':
DispatchInfo.update_device_group_structure() DispatchInfo.update_device_group_structure()
DispatchInfo.update_route_distance() DispatchInfo.update_route_distance()
#
DispatchInfo.update_group_mode() DispatchInfo.update_group_mode()
a = DispatchInfo.get_group_mode('9bb14655-4fd5-49da-a31a-13f6ced88d6c') a = DispatchInfo.get_group_mode('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
...@@ -50,3 +50,5 @@ if __name__ == '__main__': ...@@ -50,3 +50,5 @@ if __name__ == '__main__':
# load = DispatchInfo.get_load_area(i) # load = DispatchInfo.get_load_area(i)
# print(load) # print(load)
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