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

group层修改

parent 6621a5c0
......@@ -52,6 +52,14 @@ class Dispatcher:
group = Group(group_id, self.truck)
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):
"""
Group dispatching logic.
......
......@@ -36,8 +36,8 @@ class Group:
self.truck = truck
# group devices
self.excavator_dict = {} # excavator_id -> unload_area_id
self.dump_dict = {} # dump_id -> load_area_id
self.excavator = {} # excavator_id -> unload_area_id
self.dump = {} # dump_id -> load_area_id
self.truck_set = set() # truck_id
# road network info.
......@@ -71,8 +71,8 @@ class Group:
"""
# update group devices
# DispatchInfo.update_device_group_structure()
self.excavator_dict = DispatchInfo.get_excavator_dict(self.group_id)
self.dump_dict = DispatchInfo.get_dump_dict(self.group_id)
self.excavator = DispatchInfo.get_excavator(self.group_id)
self.dump = DispatchInfo.get_dump(self.group_id)
self.truck_set = DispatchInfo.get_truck_set(self.group_id)
def update_group_road_network(self):
......@@ -92,17 +92,16 @@ class Group:
:return:
"""
# update device map
excavator_index = 0
for i in self.excavator_dict.keys():
self.excavator_uuid_index_dict[i] = excavator_index + 1
# excavator_index = 0
for i in range(len(self.excavator)):
self.excavator_uuid_index_dict[self.excavator[i]] = i
dump_index = 0
for i in self.dump_dict.keys():
self.dump_uuid_index_dict[i] = dump_index + 1
for i in range(len(self.dump)):
self.dump_uuid_index_dict[self.dump[i]] = i
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.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict)
......@@ -110,6 +109,16 @@ class Group:
# 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):
"""
Receive a alg obj. and output dispatch plan for trucks in this group.
......@@ -123,20 +132,21 @@ class Group:
s = solver(self) # algorithm init
# update truck task type
for i in self.truck_set:
truck_trip = self.truck.get_truck_current_trip(i)
truck_task = self.truck.get_truck_current_task(i)
for i in list(self.truck_set):
truck_trip = self.truck.get_truck_current_trip()[self.truck_uuid_index_dict[i]]
truck_task = self.truck.get_truck_current_task()[self.truck_uuid_index_dict[i]]
if truck_task in [-2, 3, 4]:
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_dump_id = truck_trip[-1]
truck_dispatch[i] = [next_excavator_id, next_dump_id]
if truck_task in [0, 1]:
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_excavator_id = truck_trip[-1]
truck_dispatch[i] = [next_excavator_id, next_dump_id]
......@@ -165,7 +175,7 @@ class Group:
#
# # group devices
# 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
#
# # road network info.
......
......@@ -46,6 +46,8 @@ class DispatchInfo:
@author:maqc
@desc:实例化对象,可直接访问
"""
cls.group_set = set()
cls.load_excavator_dict = {}
cls.excavator_load_dict = {}
......@@ -82,8 +84,10 @@ class DispatchInfo:
@author:maqc
@desc:分组与卸载区、挖机、矿卡的映射和反映射
"""
# build excavator group map
logger = get_logger("mqc.update_device_group_structure")
# build excavator group map
try:
for item in session_postgre.query(DiggingWorkArea).all():
......@@ -131,6 +135,12 @@ class DispatchInfo:
logger.error("矿卡与group_id映射更新异常")
logger.error(es)
# update group set
try:
cls.group_set = set(cls.group_excavator_dict.keys())
except Exception as es:
logger.error(es)
# try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # dump_group_dict = {} # unload_area_id -> team_id
......@@ -304,11 +314,11 @@ class DispatchInfo:
return cls.group_mode[group_id]
@classmethod
def get_excavator_dict(cls, group_id):
def get_excavator(cls, group_id):
return cls.group_excavator_dict[group_id]
@classmethod
def get_dump_dict(cls, group_id):
def get_dump(cls, group_id):
return cls.group_dump_dict[group_id]
@classmethod
......@@ -332,9 +342,9 @@ class DispatchInfo:
def get_park_to_excavator_distance(cls, group_id):
excavators = cls.group_excavator_dict[group_id]
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]]
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
return park_matrix
......
......@@ -18,7 +18,6 @@ from core.dispatcher import Dispatcher
from core.schedule import PreSchedule
from data.dispatchInfo import DispatchInfo
def process(dispatcher):
"""
周期调度进程
......@@ -57,15 +56,58 @@ def process(dispatcher):
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.group_generate()
dispatcher.group_info_update()
dispatcher.group_dispatch()
# logger.info("#####################################周期更新结束#####################################")
#
logger.info("#####################################周期更新结束#####################################")
# except Exception as es:
# logger.error("最外层异常捕获")
# logger.error(es)
......
......@@ -27,7 +27,7 @@ if __name__ == '__main__':
DispatchInfo.update_device_group_structure()
DispatchInfo.update_route_distance()
#
DispatchInfo.update_group_mode()
a = DispatchInfo.get_group_mode('9bb14655-4fd5-49da-a31a-13f6ced88d6c')
......@@ -50,3 +50,5 @@ if __name__ == '__main__':
# load = DispatchInfo.get_load_area(i)
# 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