Commit b9fd0034 authored by 张晓彤's avatar 张晓彤 Committed by z5335534 Ao Guo

Upadte debug

parent aed9900d
......@@ -15,11 +15,11 @@
# @File : group.py
# @Software: PyCharm
from data.dispatchInfo import DispatchInfo
from data.dispatchInfo import *
from bidict import bidict
from alg.algorithm import AlgorithmBase
import numpy as np
# from settings import get_logger
class CurrentTruck:
""" class for the information of current dispatching truck.
......@@ -61,6 +61,7 @@ class Group:
""" Generate a group obj.
:param group_id: (uuid) group_id
"""
self.logger = get_logger("ga.Group")
# basic info.
self.group_id = group_id
self.group_mode = 1
......@@ -93,6 +94,7 @@ class Group:
:return:
"""
# DispatchInfo.update_group_mode()
self.group_mode = 1
self.group_mode = DispatchInfo.get_group_mode(self.group_id)
def update_group_device(self):
......@@ -102,6 +104,9 @@ class Group:
"""
# update group devices
# DispatchInfo.update_device_group_structure()
self.excavators = {}
self.unload_areas = {}
self.truck_set = set()
self.excavators = DispatchInfo.get_excavator(self.group_id)
self.unload_areas = DispatchInfo.get_unload_area(self.group_id)
self.truck_set = DispatchInfo.get_truck_set(self.group_id)
......@@ -112,6 +117,9 @@ class Group:
:return:
"""
# DispatchInfo.update_route_distance()
self.to_excavator_distance = None
self.to_unload_area_distance = None
self.park_to_excavator_distance = None
self.to_excavator_distance = DispatchInfo.get_to_excavator_distance(self.group_id)
self.to_unload_area_distance = DispatchInfo.get_to_unload_area_distance(self.group_id)
self.park_to_excavator_distance = DispatchInfo.get_park_to_excavator_distance(self.group_id)
......@@ -122,18 +130,24 @@ class Group:
:return:
"""
# excavator_index = 0
self.excavator_uuid_index_dict = {}
self.unload_area_uuid_index_dict = {}
self.truck_uuid_index_dict = {}
for i in range(len(self.excavators)):
self.excavator_uuid_index_dict[list(self.excavators)[i]] = i
for i in range(len(self.unload_areas)):
self.unload_area_uuid_index_dict[list(self.unload_areas)[i]] = i
b = self.truck_set
for i in range(len(self.truck_set)):
self.truck_uuid_index_dict[list(self.truck_set)[i]] = i
self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict)
self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict)
self.unload_area_uuid_index_dict = bidict(self.unload_area_uuid_index_dict)
self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict)
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
......@@ -156,60 +170,64 @@ class Group:
"""
truck_dispatch = {}
# 全智能模式
if self.group_mode == 1:
assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
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()[i]
truck_info = CurrentTruck(i, self.group_id, truck_trip, truck_task)
if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i, truck_info)
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2:
next_unload_area_id = "Park"
else:
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]:
next_unload_area_value = s.solve(i)
min_index = np.argmin(next_unload_area_value)
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[min_index]
next_excavator_id = self.excavator_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
# 空车智能模式
elif self.group_mode == 2:
assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
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()[i]
truck_info = CurrentTruck(i, self.group_id, truck_trip, truck_task)
if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i, truck_info)
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2:
next_unload_area_id = "Park"
else:
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]:
try:
# 全智能模式
if self.group_mode == 1:
assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
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()[i]
truck_info = CurrentTruck(i, self.group_id, truck_trip, truck_task)
if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i, truck_info)
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2:
next_unload_area_id = "Park"
else:
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]:
next_unload_area_value = s.solve(i)
min_index = np.argmin(next_unload_area_value)
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[min_index]
next_excavator_id = self.excavator_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
# 空车智能模式
elif self.group_mode == 2:
assert issubclass(solver, AlgorithmBase)
s = solver(self, self.truck, self.pre_sch) # algorithm init
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()[i]
truck_info = CurrentTruck(i, self.group_id, truck_trip, truck_task)
if truck_task in [-2, 3, 4]:
next_excavator_value = s.solve(i, truck_info)
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(next_excavator_value)
next_excavator_id = self.excavator_uuid_index_dict.inverse[min_index]
if truck_task == -2:
next_unload_area_id = "Park"
else:
next_unload_area_id = self.unload_area_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
if truck_task in [0, 1]:
truck_dispatch[i] = DispatchInfo.get_truck_match(i)
# 定铲派车
elif self.group_mode == 3:
for i in list(self.truck_set):
truck_dispatch[i] = DispatchInfo.get_truck_match(i)
# 定铲派车
elif self.group_mode == 3:
for i in list(self.truck_set):
truck_dispatch[i] = DispatchInfo.get_truck_match(i)
elif self.group_mode == 4:
pass
elif self.group_mode == 4:
pass
except Exception as es:
self.logger.error("group调度出错")
self.logger.error(es)
# return dispatch plan
return truck_dispatch
\ No newline at end of file
return truck_dispatch
......@@ -269,20 +269,20 @@ class DispatchInfo:
def get_truck_match(cls, truck_id):
return cls.truck_match_dict[truck_id]
@classmethod
def get_park_to_excavator_distance(cls, group_id):
excavators = cls.group_excavator_dict[group_id]
park_matrix = np.ones((1, len(excavators)))
try:
b = excavators
for i in range(len(excavators)):
load_area_id = cls.excavator_load_dict[excavators[i]]
try:
distance = session_postgre.query(WalkTimePark).filter_by(load_area_id=load_area_id).first().park_load_distance
park_matrix[0][i] = distance
except Exception as es:
logger.error("查询不到距离,设置为100000000")
logger.error(es)
logger.warning("查询不到距离,设置为100000000")
logger.warning(es)
park_matrix[0][i] = 100000000 # 设置为一个很大的数字
except Exception as es:
logger.error("park->load距离更新异常, 存在备停区不可达的装载区")
......
......@@ -62,101 +62,101 @@ def process(dispatcher):
# # 直接读取数据库写入redis
# direct2redis()
try:
# try:
# 更新周期参数
logger.info("#####################################周期更新开始#####################################")
global_period_para_update()
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0:
raise Exception("无动态派车计划可用")
return
if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡")
return
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
# 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
global_period_para_update()
# 更新调度信息
DispatchInfo.reset()
DispatchInfo.update_device_group_structure()
DispatchInfo.update_route_distance()
DispatchInfo.update_group_mode()
DispatchInfo.update_group_name()
# 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("group_set")
logger.info(DispatchInfo.group_set)
logger.info("group_excavator_dict")
logger.info(DispatchInfo.group_excavator_dict)
logger.info("group_unload_area_dict")
logger.info(DispatchInfo.group_unload_area_dict)
logger.info("group_truck_dict")
logger.info(DispatchInfo.group_truck_dict)
logger.info("group_mode")
logger.info(DispatchInfo.group_mode)
logger.info("load_distance")
logger.info(DispatchInfo.load_distance)
logger.info("unload_distance")
logger.info(DispatchInfo.unload_distance)
# logger.info("load_excavator_dict")
# logger.info(DispatchInfo.load_excavator_dict)
# logger.info("excavator_load_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("#####################################周期更新结束#####################################")
except Exception as es:
logger.error("最外层异常捕获")
logger.error(es)
logger.info("#####################################周期更新开始#####################################")
global_period_para_update()
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0:
raise Exception("无动态派车计划可用")
return
if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡")
return
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
# 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
global_period_para_update()
# 更新调度信息
DispatchInfo.reset()
DispatchInfo.update_device_group_structure()
DispatchInfo.update_route_distance()
DispatchInfo.update_group_mode()
DispatchInfo.update_group_name()
# 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("group_set")
logger.info(DispatchInfo.group_set)
logger.info("group_excavator_dict")
logger.info(DispatchInfo.group_excavator_dict)
logger.info("group_unload_area_dict")
logger.info(DispatchInfo.group_unload_area_dict)
logger.info("group_truck_dict")
logger.info(DispatchInfo.group_truck_dict)
logger.info("group_mode")
logger.info(DispatchInfo.group_mode)
logger.info("load_distance")
logger.info(DispatchInfo.load_distance)
logger.info("unload_distance")
logger.info(DispatchInfo.unload_distance)
# logger.info("load_excavator_dict")
# logger.info(DispatchInfo.load_excavator_dict)
# logger.info("excavator_load_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("#####################################周期更新结束#####################################")
# except Exception as es:
# logger.error("最外层异常捕获")
# logger.error(es)
def perform(inc, dispatcher):
......
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