Commit 9b576902 authored by 张晓彤's avatar 张晓彤

启动异常检测&任务状态修正

parent 2cd49cca
{ {
"para": { "para": {
<<<<<<< HEAD
"log_path": "E:\\Pycharm Projects\\Waytous\\",
"empty_speed": 25,
"heavy_speed": 22,
=======
"log_path": "/usr/local/fleet-log/dispatch", "log_path": "/usr/local/fleet-log/dispatch",
"empty_speed": 17, "empty_speed": 17,
"heavy_speed": 17, "heavy_speed": 17,
>>>>>>> new
"dump_target_mass": 5000, "dump_target_mass": 5000,
"excavator_target_mass": 5000 "excavator_target_mass": 5000
}, },
......
...@@ -347,7 +347,7 @@ class Dispatcher(WalkManage): ...@@ -347,7 +347,7 @@ class Dispatcher(WalkManage):
excavator_uuid_to_name_dict = get_value("excavator_uuid_to_name_dict") excavator_uuid_to_name_dict = get_value("excavator_uuid_to_name_dict")
self.logger.info(f"目的地:{excavator_uuid_to_name_dict[self.excavator.excavator_index_to_uuid_dict[target]]}") self.logger.info(f"目的地:{excavator_uuid_to_name_dict[self.excavator.excavator_index_to_uuid_dict[target]]}")
if task in [0, 1, 2]: if task in [0, 1]: # 矿卡空载行驶或正在入场
################################################ 矿卡空载 ############################################### ################################################ 矿卡空载 ###############################################
try: try:
...@@ -424,7 +424,7 @@ class Dispatcher(WalkManage): ...@@ -424,7 +424,7 @@ class Dispatcher(WalkManage):
dump_uuid_to_name_dict = get_value("dump_uuid_to_name_dict") dump_uuid_to_name_dict = get_value("dump_uuid_to_name_dict")
self.logger.info(f"目的地:{dump_uuid_to_name_dict[self.dump.dump_index_to_uuid_dict[target]]}") self.logger.info(f"目的地:{dump_uuid_to_name_dict[self.dump.dump_index_to_uuid_dict[target]]}")
elif task in [3, 4, 5]: elif task in [3, 4]: # 卡车重载行驶或正在入场
################################################ 矿卡重载 ############################################### ################################################ 矿卡重载 ###############################################
try: try:
...@@ -618,49 +618,54 @@ class Dispatcher(WalkManage): ...@@ -618,49 +618,54 @@ class Dispatcher(WalkManage):
record = {"truckId": self.truck.truck_index_to_uuid_dict[i]} record = {"truckId": self.truck.truck_index_to_uuid_dict[i]}
task = self.truck.get_truck_current_task()[self.truck.truck_index_to_uuid_dict[i]] task = self.truck.get_truck_current_task()[self.truck.truck_index_to_uuid_dict[i]]
except Exception as es: except Exception as es:
self.logger.error("truck_id,group_id,record,task出错") self.logger.error("调度结果写入异常-读取矿卡信息异常(uuid, group id, task)")
self.logger.error(es) self.logger.error(es)
if task in empty_task_set: if task in [0, 1, 2]: # 卡车空载或在装载区出场前, 可变更卸载目的地
try:
item = ( item = (
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
.filter_by(dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][1]], .filter_by(dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][1]],
exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][0]], exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][0]],
truck_id=truck_id, truck_id=truck_id,
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0, ).first()) isauto=1, isdeleted=0, ).first())
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
record["dumpId"] = item.dump_id record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id record["dispatchId"] = item.id
record["isdeleted"] = False record["isdeleted"] = False
record["creator"] = item.creator record["creator"] = item.creator
record["createtime"] = item.createtime.strftime( record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p") "%b %d, %Y %I:%M:%S %p")
redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record))) redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
elif task in heavy_task_set: except Exception as es:
item = ( self.logger.error("调度结果写入异常-矿卡空载")
session_mysql.query(Dispatch) elif task in [3, 4, 5]: # 卡车重载或在卸载区出场前, 可变更装载目的地
.filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]], try:
dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][0]], item = (
truck_id=truck_id, session_mysql.query(Dispatch)
group_id=group_id, .filter_by(exactor_id=DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]],
isauto=1, isdeleted=0, ).first()) dump_id=DeviceMap.dump_index_to_uuid_dict[Seq[i][0]],
record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[Seq[i][1]] truck_id=truck_id,
record["dumpId"] = item.dump_id group_id=group_id,
record["loadAreaId"] = item.load_area_id isauto=1, isdeleted=0, ).first())
record["unloadAreaId"] = item.unload_area_id record["exactorId"] = self.excavator.excavator_index_to_uuid_dict[Seq[i][1]]
record["dispatchId"] = item.id record["dumpId"] = item.dump_id
record["isdeleted"] = False record["loadAreaId"] = item.load_area_id
record["creator"] = item.creator record["unloadAreaId"] = item.unload_area_id
record["createtime"] = item.createtime.strftime( record["dispatchId"] = item.id
"%b %d, %Y %I:%M:%S %p") record["isdeleted"] = False
record["creator"] = item.creator
redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record))) record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
except Exception as es:
self.logger.error("调度结果写入异常-矿卡重载")
elif task == -2: elif task == -2:
try: try:
try: try:
...@@ -671,14 +676,14 @@ class Dispatcher(WalkManage): ...@@ -671,14 +676,14 @@ class Dispatcher(WalkManage):
group_id=group_id, group_id=group_id,
isauto=1, isdeleted=0).first()) isauto=1, isdeleted=0).first())
print(Seq) self.logger.info(Seq)
print(Seq[i][1]) self.logger.info(Seq[i][1])
print(DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]]) self.logger.info(DeviceMap.excavator_index_to_uuid_dict[Seq[i][1]])
print("item") self.logger.info("item")
print(item.id, item.truck_id, item.exactor_id, item.dump_id) print(item.id, item.truck_id, item.exactor_id, item.dump_id)
except Exception as es: except Exception as es:
self.logger.error("task-2,error01") self.logger.error("调度结果写入异常-矿卡故障或备停区-调度计划读取异常")
try: try:
record["exactorId"] = item.exactor_id record["exactorId"] = item.exactor_id
...@@ -694,17 +699,17 @@ class Dispatcher(WalkManage): ...@@ -694,17 +699,17 @@ class Dispatcher(WalkManage):
redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record))) redis5.set(self.truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
except Exception as es: except Exception as es:
self.logger.error("task-2,error02") self.logger.error("调度结果写入异常-矿卡故障或备停区-redis写入异常")
self.logger.error(es) self.logger.error(es)
except Exception as es: except Exception as es:
self.logger.error("task为-2时error") self.logger.error("调度结果写入异常-矿卡故障或备停区")
self.logger.error(es) self.logger.error(es)
else: else:
pass pass
except Exception as es: except Exception as es:
self.logger.error("调度结果写入异常-redis写入异常") self.logger.error("调度结果写入异常")
self.logger.error(f"调度结果:{Seq}") self.logger.error(f"调度结果:{Seq}")
self.logger.error(es) self.logger.error(es)
...@@ -775,19 +780,19 @@ class PreSchedule: ...@@ -775,19 +780,19 @@ class PreSchedule:
excavator_avl_ls = [[] for _ in range(dynamic_excavator_num)] excavator_avl_ls = [[] for _ in range(dynamic_excavator_num)]
dump_avl_ls = [[] for _ in range(dumps)] dump_avl_ls = [[] for _ in range(dumps)]
self.logger.info("update_truck_reach_time-trucks") # self.logger.info("update_truck_reach_time-trucks")
self.logger.info(trucks) # self.logger.info(trucks)
for i in range(trucks): for i in range(trucks):
task = truck_current_task[self.truck.truck_index_to_uuid_dict[i]] task = truck_current_task[self.truck.truck_index_to_uuid_dict[i]]
end_area_index = truck_current_trip[i][1] end_area_index = truck_current_trip[i][1]
self.logger.info("update_truck_reach_time-truck_current_trip") # self.logger.info("update_truck_reach_time-truck_current_trip")
self.logger.info(truck_current_trip) # self.logger.info(truck_current_trip)
if task in [0, 1]: if task in [0, 1]: # 卡车空载行驶或正在入场
reach_time = truck_reach_excavator[i] reach_time = truck_reach_excavator[i]
excavator_avl_ls[end_area_index].append( excavator_avl_ls[end_area_index].append(
[reach_time, i, end_area_index] [reach_time, i, end_area_index]
) )
elif task in [3, 4]: elif task in [3, 4]: # 卡车重载行驶或正在入场
reach_time = truck_reach_dump[i] reach_time = truck_reach_dump[i]
dump_avl_ls[end_area_index].append([reach_time, i, end_area_index]) dump_avl_ls[end_area_index].append([reach_time, i, end_area_index])
elif task == -2: elif task == -2:
......
...@@ -183,7 +183,7 @@ class TruckInfo(WalkManage): ...@@ -183,7 +183,7 @@ class TruckInfo(WalkManage):
# 判断是否为矿卡 # 判断是否为矿卡
if device_type == 1: if device_type == 1:
task = self.truck_current_task[item] task = self.truck_current_task[item]
if task in heavy_task_set: if task in [3, 4, 5]: # 矿卡重载行驶或仍未出场
if str_to_byte("lastLoadTime") in key_value_dict.keys(): # 若最后装载时间存在 if str_to_byte("lastLoadTime") in key_value_dict.keys(): # 若最后装载时间存在
last_load_time_tmp = eval(byte_to_str(key_value_dict[str_to_byte("lastLoadTime")])) last_load_time_tmp = eval(byte_to_str(key_value_dict[str_to_byte("lastLoadTime")]))
tmp_time = datetime.strptime(last_load_time_tmp, "%Y-%m-%d %H:%M:%S") tmp_time = datetime.strptime(last_load_time_tmp, "%Y-%m-%d %H:%M:%S")
...@@ -206,7 +206,7 @@ class TruckInfo(WalkManage): ...@@ -206,7 +206,7 @@ class TruckInfo(WalkManage):
# print("相对last_load_time", self.relative_last_load_time[item]) # print("相对last_load_time", self.relative_last_load_time[item])
self.logger.info("相对last_load_time") self.logger.info("相对last_load_time")
self.logger.info(self.relative_last_load_time[item]) self.logger.info(self.relative_last_load_time[item])
if task in empty_task_set: if task in [0, 1, 2]: # 矿卡空载行驶或仍未出场
if str_to_byte("lastUnloadTime") in key_value_dict.keys(): if str_to_byte("lastUnloadTime") in key_value_dict.keys():
last_unload_time_tmp = eval(key_value_dict[str_to_byte("lastUnloadTime")]) last_unload_time_tmp = eval(key_value_dict[str_to_byte("lastUnloadTime")])
tmp_time = datetime.strptime(last_unload_time_tmp, "%Y-%m-%d %H:%M:%S") tmp_time = datetime.strptime(last_unload_time_tmp, "%Y-%m-%d %H:%M:%S")
...@@ -277,7 +277,7 @@ class TruckInfo(WalkManage): ...@@ -277,7 +277,7 @@ class TruckInfo(WalkManage):
try: try:
# 若矿卡状态为空运 # 若矿卡状态为空运
if task in empty_task_set: if task in [0, 1, 2]: # 矿卡空载或仍未出装载区
last_unload_time = self.relative_last_unload_time[ last_unload_time = self.relative_last_unload_time[
self.truck_index_to_uuid_dict[i] self.truck_index_to_uuid_dict[i]
] ]
...@@ -312,7 +312,7 @@ class TruckInfo(WalkManage): ...@@ -312,7 +312,7 @@ class TruckInfo(WalkManage):
# # 目的地矿卡数加一 # # 目的地矿卡数加一
# 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
# 若矿卡状态为重载 # 若矿卡状态为重载
elif task in heavy_task_set: elif task in [3, 4, 5]: # 矿卡重载或仍未出卸载区
# print("读取重载行程") # print("读取重载行程")
# print(item.exactor_id, item.dump_id) # print(item.exactor_id, item.dump_id)
last_load_time = self.relative_last_load_time[ last_load_time = self.relative_last_load_time[
...@@ -383,7 +383,7 @@ class TruckInfo(WalkManage): ...@@ -383,7 +383,7 @@ class TruckInfo(WalkManage):
.filter_by(truck_id=truck_id, isdeleted=0) .filter_by(truck_id=truck_id, isdeleted=0)
.first() .first()
) )
if task in empty_task_set + heavy_task_set and item is None: if task in empty_task_set + heavy_task_set and item is None: # 矿卡处于正常工作状态, 但查询不到派车计划
raise Exception(f"矿卡 {truck_id} 配对关系异常") raise Exception(f"矿卡 {truck_id} 配对关系异常")
except Exception as es: except Exception as es:
self.logger.error("配对关系异常") self.logger.error("配对关系异常")
......
...@@ -119,11 +119,11 @@ class Group(WalkManage): ...@@ -119,11 +119,11 @@ class Group(WalkManage):
end_area_index = truck_current_trip[i][1] end_area_index = truck_current_trip[i][1]
start_area_index = truck_current_trip[i][0] start_area_index = truck_current_trip[i][0]
if task in heavy_task_set: if task in [3, 4]: # 矿卡空载或正在入场装载区
self.goto_dump_truck_num[start_area_index][end_area_index] += 1 self.goto_dump_truck_num[start_area_index][end_area_index] += 1
self.actual_goto_dump_traffic_flow[start_area_index][end_area_index] += float(payload[i]) self.actual_goto_dump_traffic_flow[start_area_index][end_area_index] += float(payload[i])
if task in empty_task_set: if task in [0, 1]: # 矿卡重载或正在入场卸载区
self.goto_excavator_truck_num[start_area_index][end_area_index] += 1 self.goto_excavator_truck_num[start_area_index][end_area_index] += 1
self.actual_goto_excavator_traffic_flow[start_area_index][end_area_index] += float(payload[i]) self.actual_goto_excavator_traffic_flow[start_area_index][end_area_index] += float(payload[i])
......
...@@ -349,45 +349,45 @@ class LaneInfo: ...@@ -349,45 +349,45 @@ class LaneInfo:
# used lane, 存在行驶矿卡的路段 # used lane, 存在行驶矿卡的路段
tmp_lane_set = [] tmp_lane_set = []
# try: try:
# 初始化 # 初始化
for lane_id in lane_set: for lane_id in lane_set:
self.lane_speed_dict[str(lane_id)] = 0 self.lane_speed_dict[str(lane_id)] = 0
lane_trucks_dict[str(lane_id)] = 0 lane_trucks_dict[str(lane_id)] = 0
# 对于各路段信息 # 对于各路段信息
print("truck_locate_dict") print("truck_locate_dict")
print(truck_locate_dict.keys()) print(truck_locate_dict.keys())
for truck in truck_locate_dict.keys(): for truck in truck_locate_dict.keys():
lane_id = truck_locate_dict[truck] lane_id = truck_locate_dict[truck]
logger.info("lane_speed_generate-lane_id") logger.info("lane_speed_generate-lane_id")
logger.info(lane_id) logger.info(lane_id)
if lane_id in lane_set and truck in truck_speed_dict and truck in truck_locate_dict: if lane_id in lane_set and truck in truck_speed_dict and truck in truck_locate_dict:
self.lane_speed_dict[truck_locate_dict[truck]] = self.lane_speed_dict[truck_locate_dict[truck]] + \ self.lane_speed_dict[truck_locate_dict[truck]] = self.lane_speed_dict[truck_locate_dict[truck]] + \
truck_speed_dict[truck] truck_speed_dict[truck]
# 该路段矿卡数量加一 # 该路段矿卡数量加一
lane_trucks_dict[truck_locate_dict[truck]] = lane_trucks_dict[truck_locate_dict[truck]] + 1 lane_trucks_dict[truck_locate_dict[truck]] = lane_trucks_dict[truck_locate_dict[truck]] + 1
# 记录存在行驶矿卡的路段 # 记录存在行驶矿卡的路段
tmp_lane_set.append(lane_id) tmp_lane_set.append(lane_id)
# 存在矿卡的路段 # 存在矿卡的路段
logger.info("存在矿卡的路段:") logger.info("存在矿卡的路段:")
logger.info(tmp_lane_set) logger.info(tmp_lane_set)
# 对不存在的矿卡路段,实时速度设置为最高 # 对不存在的矿卡路段,实时速度设置为最高
for lane_id in lane_set: for lane_id in lane_set:
if lane_id not in tmp_lane_set: if lane_id not in tmp_lane_set:
self.lane_speed_dict[str(lane_id)] = session_postgre.query(Lane).filter_by( self.lane_speed_dict[str(lane_id)] = session_postgre.query(Lane).filter_by(
Id=lane_id).first().MaxSpeed Id=lane_id).first().MaxSpeed
lane_trucks_dict[str(lane_id)] = 1 lane_trucks_dict[str(lane_id)] = 1
# 各路段实时速度取平均 # 各路段实时速度取平均
for lane in lane_trucks_dict: for lane in lane_trucks_dict:
self.lane_speed_dict[lane] = self.lane_speed_dict[lane] / lane_trucks_dict[lane] self.lane_speed_dict[lane] = self.lane_speed_dict[lane] / lane_trucks_dict[lane]
# except Exception as es: except Exception as es:
# logger.error("路段实时速度计算异常") logger.error("路段实时速度计算异常")
# logger.error(es) logger.error(es)
return self.lane_speed_dict return self.lane_speed_dict
......
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2021/9/3 14:44
# @Author : Opfer
# @Site :
# @File : priority_control.py
# @Software: PyCharm
from equipment.truck import *
from equipment.dump import *
from equipment.excavator import *
from para_config import *
from path_plan.topo_graph import *
class PriorityController():
def __init__(self, dump, excavator, truck):
# 设备类
self.dump = dump
self.excavator = excavator
self.truck = truck
# 获取日志器
self.logger = get_logger("zxt.prio")
def weighted_walk_calc(self):
"""
计算运输路线权重, 权重影响因素:设备优先级, 物料优先级,
:return:
walk_weight: 卸载-装载区 路网权重
park_walk_weight: 备停区-装载区 路网权重
"""
dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = get_value("dynamic_excavator_num")
dynamic_dump_set = get_value("dynamic_dump_set")
dynamic_excavator_set = get_value("dynamic_excavator_set")
walk_to_excavator_weight = np.ones((dynamic_dump_num, dynamic_excavator_num))
walk_to_dump_weight = np.ones((dynamic_excavator_num, dynamic_dump_num))
excavator_priority = self.excavator.excavator_priority_coefficient
excavator_material_priority = self.excavator.excavator_material_priority
dump_priority = self.dump.dump_priority_coefficient
dump_material_priority = np.ones(dynamic_dump_num)
park_walk_weight = np.ones((park_num, dynamic_excavator_num))
rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first()
if not rule6.disabled:
for dump_id in dynamic_dump_set:
for excavator_id in dynamic_excavator_set:
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_inedx = self.excavator.excavator_uuid_to_index_dict[excavator_id]
walk_to_excavator_weight[dump_index][excavator_inedx] += excavator_priority[excavator_inedx]
walk_to_dump_weight[excavator_inedx][dump_index] += dump_priority[dump_index]
park_walk_weight = park_walk_weight * self.excavator.excavator_priority_coefficient
rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first()
if not rule7.disabled:
for dump_id in dynamic_dump_set:
for excavator_id in dynamic_excavator_set:
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_inedx = self.excavator.excavator_uuid_to_index_dict[excavator_id]
walk_to_excavator_weight[dump_index][excavator_inedx] += excavator_material_priority[excavator_inedx]
walk_to_dump_weight[excavator_inedx][dump_index] += dump_material_priority[dump_index]
park_walk_weight = park_walk_weight * self.excavator.excavator_material_priority
try:
walk_to_excavator_weight = walk_to_excavator_weight - (walk_to_excavator_weight.min() - 1)
walk_to_dump_weight = walk_to_dump_weight - (walk_to_dump_weight.min() - 1)
park_walk_weight = park_walk_weight - (park_walk_weight.min() - 1)
except Exception as es:
self.logger.errro(es)
self.logger.error("优先级归一化异常")
return walk_to_excavator_weight, walk_to_dump_weight, park_walk_weight
def walk_available_calc(self):
"""
计算路网可通行性(物料, 地图, 分组三者综合)
:return:
walk_available: 路网可通行性(dump_num, excavator_num)
"""
map_walk_available = self.update_map_walk_available()
group_walk_available = self.update_group_walk_available()
material_walk_available = self.update_material_walk_available()
walk_available = map_walk_available * group_walk_available * material_walk_available
return walk_available
def update_group_walk_available(self):
"""
计算调度分组间的路网可通行性, 不同分组间路网不可通行
:return:
group_walk_available: 调度分组路网可通行性矩阵(dump_num, excavator_num)
"""
group_walk_available = np.zeros((get_value("dynamic_dump_num"), get_value("dynamic_excavator_num")))
for dump_id in get_value("dynamic_dump_set"):
for excavator_id in get_value("dynamic_excavator_set"):
item = session_mysql.query(Dispatch).filter_by(dump_id=dump_id, exactor_id=excavator_id, isauto=1,
isdeleted=0).first()
if item is not None:
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_index = self.excavator.excavator_uuid_to_index_dict[excavator_id]
group_walk_available[dump_index][excavator_index] = 1
return group_walk_available
def update_material_walk_available(self):
"""
更新物料兼容性下路网可通行性
:return:
walk_available: 物料兼容路网可通行性矩阵(dump_num, excavator_num)
"""
dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = get_value("dynamic_excavator_num")
dynamic_dump_set = get_value("dynamic_dump_set")
dynamic_excavator_set = get_value("dynamic_excavator_set")
walk_available = np.ones((dynamic_dump_num, dynamic_excavator_num))
try:
for dump_id in dynamic_dump_set:
for excavator_id in dynamic_excavator_set:
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_inedx = self.excavator.excavator_uuid_to_index_dict[excavator_id]
# 两设备处理物料不同, 相关路网不可通行
if self.excavator.excavator_material[excavator_id] != self.dump.dump_material[dump_id]:
walk_available[dump_index][excavator_inedx] = 0
except Exception as es:
self.logger.info(es)
self.logger.info("error-12")
return walk_available
def update_map_walk_available(self):
"""
更新物理路网可通行性
:return:
walk_available: 物理路网可通行性矩阵(dump_num, excavator_num)
"""
dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = get_value("dynamic_excavator_num")
walk_available = np.ones((dynamic_dump_num, dynamic_excavator_num))
walk_manage.period_walk_para_update()
for dump_index in range(dynamic_dump_num):
for excavator_index in range(dynamic_excavator_num):
if walk_manage.distance_to_excavator[dump_index][excavator_index] > M / 2:
walk_available[dump_index][excavator_index] = 0
return walk_available
...@@ -19,42 +19,42 @@ from dispatcher import Dispatcher, PreSchedule ...@@ -19,42 +19,42 @@ from dispatcher import Dispatcher, PreSchedule
def process(dispatcher): def process(dispatcher):
# try: try:
# 更新周期参数 # 更新周期参数
logger.info("#####################################周期更新开始#####################################") logger.info("#####################################周期更新开始#####################################")
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0: if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0:
raise Exception("无动态派车计划可用") raise Exception("无动态派车计划可用")
return return
if get_value("dynamic_truck_num") == 0: if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡") raise Exception("无动态派车可用矿卡")
return return
# 清空数据库缓存 # 清空数据库缓存
session_mysql.commit() session_mysql.commit()
session_mysql.flush() session_mysql.flush()
# 清空数据库缓存 # 清空数据库缓存
session_postgre.commit() session_postgre.commit()
session_postgre.flush() session_postgre.flush()
# 周期更新 # 周期更新
dispatcher.dispatcher_period_update() dispatcher.dispatcher_period_update()
# try: # try:
# 调度计算 # 调度计算
dispatcher.schedule_construct() dispatcher.schedule_construct()
# except Exception as es: # except Exception as es:
# logger.error("更新不及时") # logger.error("更新不及时")
# logger.error(es) # logger.error(es)
logger.info("#####################################周期更新结束#####################################") logger.info("#####################################周期更新结束#####################################")
# except Exception as es: except Exception as es:
# logger.error("最外层异常捕获") logger.error("最外层异常捕获")
# logger.error(es) logger.error(es)
def perform(inc, dispatcher): 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