Commit 66ff835d authored by 张晓彤's avatar 张晓彤

1.alg 传入 pre_sch truck obj, 2. group truck_task 读取修复 3. value 取最值 4. 读动态派车集合更新

parent 2da8eccd
......@@ -32,9 +32,11 @@ class Congestion(AlgorithmBase):
class for congestion alg.
"""
def __init__(self, group):
def __init__(self, group, truck, pre_sch):
super().__init__()
self.group = group
self.truck = truck
self.pre_sch = pre_sch
self.logger = get_logger("zxt.algorithm.congestion")
def solve(self, truck_id):
......@@ -46,15 +48,15 @@ class Congestion(AlgorithmBase):
try:
truck_index = truck.truck_uuid_to_index_dict[truck_id]
truck_index = self.truck.truck_uuid_to_index_dict[truck_id]
trip = truck.get_truck_current_trip()[truck_index]
trip = self.truck.get_truck_current_trip()[truck_index]
task = truck.get_truck_current_task()[truck_id]
task = self.truck.get_truck_current_task()[truck_id]
group_dynamic_excavator_num = len(self.group.dump_dict)
group_dynamic_excavator_num = len(self.group.dump)
group_dynamic_dump_num = len(self.group.excavator_dict)
group_dynamic_dump_num = len(self.group.excavator)
except Exception as es:
self.logger.error("车辆调度信息读取异常")
......@@ -130,10 +132,12 @@ class ExpectedTime(AlgorithmBase):
class for expected traveling time alg.
"""
def __init__(self, group):
def __init__(self, group, truck, pre_sch):
super().__init__()
self.group = group
self.truck = truck
self.pre_sch = pre_sch
self.logger = get_logger("zxt.algorithm.expected")
def solve(self, truck_id):
......@@ -145,17 +149,17 @@ class ExpectedTime(AlgorithmBase):
try:
truck_index = truck.truck_uuid_to_index_dict[truck_id]
truck_index = self.truck.truck_uuid_to_index_dict[truck_id]
trip = truck.get_truck_current_trip()[truck_index]
trip = self.truck.get_truck_current_trip()[truck_index]
task = truck.get_truck_current_task()[truck_id]
task = self.truck.get_truck_current_task()[truck_id]
truck_avl_time = 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.dump_dict)
group_dynamic_excavator_num = len(self.group.dump)
group_dynamic_dump_num = len(self.group.excavator_dict)
group_dynamic_dump_num = len(self.group.excavator)
except Exception as es:
self.logger.error("车辆调度信息读取异常")
......@@ -171,18 +175,18 @@ class ExpectedTime(AlgorithmBase):
self.logger.error(f"矿卡{truck_id}状态不匹配")
self.logger.error(es)
try:
# try:
# 挖机可用时间
excavator_val_time_global = pre_sch.get_excavator_avl_time()
excavator_val_time_global = self.pre_sch.get_excavator_avl_time()
excavator_val_time = np.full(len(self.group.excavator_dict), 0)
excavator_val_time = np.full(len(self.group.excavator), 0)
for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items():
excavator_val_time[excavator_index] = excavator_val_time_global[excavator_id]
# 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.park_to_excavator_distance[0, :] / 1000 / \
truck.empty_speed[truck_id] + truck_avl_time
self.truckempty_speed[truck_id] + truck_avl_time
# 计算车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time, excavator_val_time)
......@@ -202,10 +206,10 @@ class ExpectedTime(AlgorithmBase):
self.logger.info("expected_travelling_schedule-excavator_val_time")
self.logger.info(excavator_val_time)
except Exception as es:
self.logger.error("矿卡启动调度异常")
self.logger.error(es)
transport_value = np.zeros(group_dynamic_excavator_num)
# except Exception as es:
# self.logger.error("矿卡启动调度异常")
# self.logger.error(es)
# transport_value = np.zeros(group_dynamic_excavator_num)
if task in [0, 1, 2]:
################################################ 矿卡空载 ###############################################
......@@ -219,10 +223,10 @@ class ExpectedTime(AlgorithmBase):
try:
# 全局卸点可用时间 dict
dump_val_time_global = pre_sch.get_dump_avl_time()
dump_val_time_global = self.pre_sch.get_dump_avl_time()
# 局部卸点可用时间 list
dump_val_time = np.full(len(self.group.dump_dict), 0)
dump_val_time = np.full(len(self.group.dump), 0)
for dump_id, dump_index in self.group.dump_uuid_index_dict.items():
dump_val_time[dump_index] = dump_val_time_global[dump_id]
......@@ -234,7 +238,7 @@ class ExpectedTime(AlgorithmBase):
# 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.to_dump_distance[excavator_group_index, :] \
/ 1000 / truck.heavy_speed[truck_id] + truck_avl_time
/ 1000 / self.truck.heavy_speed[truck_id] + truck_avl_time
# 车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time, dump_val_time)
......@@ -271,9 +275,9 @@ class ExpectedTime(AlgorithmBase):
try:
# 挖机可用时间
excavator_val_time_global = pre_sch.get_excavator_avl_time()
excavator_val_time_global = self.pre_sch.get_excavator_avl_time()
excavator_val_time = np.full(len(self.group.excavator_dict), 0)
excavator_val_time = np.full(len(self.group.excavator), 0)
for excavator_id, excavator_index in self.group.excavator_uuid_index_dict.items():
excavator_val_time[excavator_index] = excavator_val_time_global[excavator_id]
......@@ -286,7 +290,7 @@ class ExpectedTime(AlgorithmBase):
# 车辆驶往各目的地时间
truck_reach_time = 60 * self.group.to_excavator_distance[dump_group_index, :] \
/ 1000 / truck.empty_speed[truck_id] + truck_avl_time
/ 1000 / self.truck.empty_speed[truck_id] + truck_avl_time
# 计算车辆得到服务时间
truck_service_time = np.maximum(truck_reach_time, excavator_val_time)
......
......@@ -28,6 +28,8 @@ class Dispatcher:
self.truck = truck
self.dump = dump
self.excavator = excavator
self.pre_sch = pre_sch
self.request_mode = request_mode
self.submission = DispatchSubmission(dump, excavator, truck)
def period_update(self):
......@@ -49,7 +51,7 @@ class Dispatcher:
:return: None
"""
for group_id in DispatchInfo.group_dump_dict.keys():
group = Group(group_id, self.truck)
group = Group(group_id, self.truck, self.pre_sch)
self.group_list.append(group)
def group_info_update(self):
......@@ -228,6 +230,6 @@ class DispatchSubmission:
:param dispatch_plan_dict: (Dict)
:return: None
"""
for truck_id, dispatch_plan in dispatch_plan_dict:
for truck_id, dispatch_plan in dispatch_plan_dict.items():
self.truck_dispatch_to_redis(truck_id, dispatch_plan)
......@@ -18,15 +18,14 @@
from data.dispatchInfo import DispatchInfo
from bidict import bidict
from alg.algorithm import AlgorithmBase
import numpy as np
class Group:
"""
class for group instance.
"""
def __init__(self, group_id, truck):
def __init__(self, group_id, truck, pre_sch):
""" Generate a group obj.
:param group_id: (uuid) group_id
"""
......@@ -34,6 +33,7 @@ class Group:
self.group_id = group_id
self.group_mode = 1
self.truck = truck
self.pre_sch = pre_sch
# group devices
self.excavator = {} # excavator_id -> unload_area_id
......@@ -130,16 +130,17 @@ class Group:
assert issubclass(solver, AlgorithmBase)
s = solver(self) # algorithm init
s = solver(self, self.truck, self.pre_sch) # algorithm init
# update truck task type
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]]
truck_task = self.truck.get_truck_current_task()[i]
if truck_task in [-2, 3, 4]:
next_excavator_list = s.solve(i)
min_index = next_excavator_list.index(min(next_excavator_list))
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index = np.argmin(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]
......
......@@ -584,10 +584,12 @@ class TruckInfo(WalkManage):
if truck_id in self.truck_dump_bind:
unload_area_id = self.truck_dump_bind[truck_id]
try:
dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Material
dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Materials
except Exception as es:
self.logger.error(es)
session_postgre.rollback()
session_mysql.rollback()
self.truck_material_bind[truck_id] = dump_material_id
if truck_id in self.truck_excavator_bind:
......
......@@ -47,7 +47,7 @@ def process(dispatcher):
global_period_para_update()
# 更新数据库缓存
# 更新调度信息
DispatchInfo.renew_set()
DispatchInfo.update_device_group_structure()
......
......@@ -262,14 +262,29 @@ def update_total_truck():
def update_dynamic_truck():
dynamic_truck_list = []
# try:
# query = np.array(
# session_mysql.query(Dispatch).filter_by(isauto=1, isdeleted=0).all()
# )
#
# for item in query:
# if item.truck_id is not None:
# dynamic_truck_list.append(item.truck_id)
#
# except Exception as es:
# logger.error(es)
# logger.error("动态调度矿卡读取异常")
# session_postgre.rollback()
# session_mysql.rollback()
try:
query = np.array(
session_mysql.query(Dispatch).filter_by(isauto=1, isdeleted=0).all()
session_mysql.query(DispatchEquipment).filter_by(isdeleted=0).all()
)
for item in query:
if item.truck_id is not None:
dynamic_truck_list.append(item.truck_id)
if item.equipment_id is not None:
dynamic_truck_list.append(item.equipment_id)
except Exception as es:
logger.error(es)
......
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