Commit 49054843 authored by 张晓彤's avatar 张晓彤

添加等待时间算法,修复部分BUG

parent 11c09e4a
...@@ -41,4 +41,13 @@ Changelog for package Dispatch ...@@ -41,4 +41,13 @@ Changelog for package Dispatch
[fix ]: [fix ]:
[TODO ]: [TODO ]:
[info ]: author: zxt ; time: 2021-11-03 10:13:00 ; email: ; tel: ; [info ]: author: zxt ; time: 2021-11-03 10:13:00 ; email: ; tel: ;
--------------------
--------------------
[version]: 3.4.0
[message]: add expected travelling time algorithm module
[feather]:
[fix ]:
[TODO ]:
[info ]: author: zxt ; time: 2022-04-07 17:33:00 ; email: ; tel: ;
-------------------- --------------------
\ No newline at end of file
This diff is collapsed.
{ {
"para": { "para": {
"log_path": "/usr/local/fleet-log/dispatch", "log_path": "E:\\Pycharm Projects\\Waytous\\",
"empty_speed": 25, "empty_speed": 25,
"heavy_speed": 22, "heavy_speed": 22,
"dump_target_mass": 5000, "dump_target_mass": 5000,
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
}, },
"mysql": { "mysql": {
"host": "192.168.28.111", "host": "192.168.9.152",
"port": "3306", "port": "3306",
"user": "root", "user": "root",
"password": "Huituo@123", "password": "Huituo@123",
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
}, },
"postgresql": { "postgresql": {
"host": "192.168.28.111", "host": "192.168.9.152",
"port": "5432", "port": "5432",
"user": "postgres", "user": "postgres",
"password": "Huituo@123", "password": "Huituo@123",
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
}, },
"redis": { "redis": {
"host": "192.168.28.111", "host": "192.168.9.152",
"password": "Huituo@123" "password": "Huituo@123"
} }
} }
\ No newline at end of file
This diff is collapsed.
...@@ -32,15 +32,11 @@ class DumpInfo(WalkManage): ...@@ -32,15 +32,11 @@ class DumpInfo(WalkManage):
# 卸点卸载能力 # 卸点卸载能力
self.dump_strength = np.zeros(self.dynamic_dump_num) self.dump_strength = np.zeros(self.dynamic_dump_num)
# 初始化读取映射及路网
self.period_map_para_load()
self.period_walk_para_load()
# 日志器 # 日志器
self.logger = get_logger("zxt.dump") self.logger = get_logger("zxt.dump")
# 参数初始化 # # 参数初始化
self.para_period_update() # self.dump_para_period_update()
def get_unloading_time(self): def get_unloading_time(self):
return self.unloading_time return self.unloading_time
...@@ -88,7 +84,7 @@ class DumpInfo(WalkManage): ...@@ -88,7 +84,7 @@ class DumpInfo(WalkManage):
# except Exception as es: # except Exception as es:
# self.logger.error(f"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)") # self.logger.error(f"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)")
# self.logger.error(es) # self.logger.error(es)
self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = 5.00 self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = 2.00
# print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]]) # print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]])
# 更新卸载设备出入时间 # 更新卸载设备出入时间
...@@ -126,7 +122,7 @@ class DumpInfo(WalkManage): ...@@ -126,7 +122,7 @@ class DumpInfo(WalkManage):
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().Material
self.dump_material[dump_id] = dump_material_id self.dump_material[dump_id] = dump_material_id
except Exception as es: except Exception as es:
self.logger.error("无动态派车计划可用") self.logger.error("卸点物料更新异常")
self.logger.error(es) self.logger.error(es)
def update_dump_priority(self): def update_dump_priority(self):
...@@ -135,10 +131,14 @@ class DumpInfo(WalkManage): ...@@ -135,10 +131,14 @@ class DumpInfo(WalkManage):
try: try:
unload_area_index = self.dump_index_to_unload_area_index_dict[self.dump_uuid_to_index_dict[dump_id]] unload_area_index = self.dump_index_to_unload_area_index_dict[self.dump_uuid_to_index_dict[dump_id]]
unload_area_id = unload_area_index_to_uuid_dict[unload_area_index] unload_area_id = unload_area_index_to_uuid_dict[unload_area_index]
self.logger.debug("update_dump_priority-unload_area_index")
self.logger.debug(unload_area_index)
self.logger.debug("update_dump_priority-unload_area_id")
self.logger.debug(unload_area_id)
item = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first() item = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first()
self.dump_priority_coefficient[self.dump_uuid_to_index_dict[dump_id]] += item.Priority self.dump_priority_coefficient[self.dump_uuid_to_index_dict[dump_id]] += item.Priority
except Exception as es: except Exception as es:
self.logger.error("无动态派车计划可用") self.logger.error("卸点优先级更新异常")
self.logger.error(es) self.logger.error(es)
def update_unload_ability(self): def update_unload_ability(self):
...@@ -149,10 +149,10 @@ class DumpInfo(WalkManage): ...@@ -149,10 +149,10 @@ class DumpInfo(WalkManage):
unload_area_id = unload_area_index_to_uuid_dict[self.dump_index_to_unload_area_index_dict[dump_index]] unload_area_id = unload_area_index_to_uuid_dict[self.dump_index_to_unload_area_index_dict[dump_index]]
unload_ability = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().UnloadAbililty unload_ability = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().UnloadAbililty
self.dump_strength[dump_index] = unload_ability # 卸载设备最大卸载能力,单位吨/小时 self.dump_strength[dump_index] = unload_ability # 卸载设备最大卸载能力,单位吨/小时
# if unload_ability < 200: if unload_ability < 200:
# raise Exception("卸载点卸载能力异常") raise Exception("卸载点卸载能力异常")
else: else:
self.dump_strength = np.full(self.dynamic_dump_num, 5000) self.dump_strength = np.full(self.dynamic_dump_num, 5000)
...@@ -178,7 +178,7 @@ class DumpInfo(WalkManage): ...@@ -178,7 +178,7 @@ class DumpInfo(WalkManage):
# 卸点卸载能力 # 卸点卸载能力
self.dump_strength = np.zeros(self.dynamic_dump_num) self.dump_strength = np.zeros(self.dynamic_dump_num)
def para_period_update(self): def dump_para_period_update(self):
self.reset() self.reset()
...@@ -186,11 +186,6 @@ class DumpInfo(WalkManage): ...@@ -186,11 +186,6 @@ class DumpInfo(WalkManage):
self.logger.info("Dump update!") self.logger.info("Dump update!")
# 装载周期参数
self.period_map_para_load()
self.period_walk_para_load()
# 计算平均卸载时间 # 计算平均卸载时间
self.update_dump_unloadtime() self.update_dump_unloadtime()
......
...@@ -36,15 +36,11 @@ class ExcavatorInfo(WalkManage): ...@@ -36,15 +36,11 @@ class ExcavatorInfo(WalkManage):
# 挖机装载能力 # 挖机装载能力
self.excavator_strength = np.zeros(self.dynamic_excavator_num) self.excavator_strength = np.zeros(self.dynamic_excavator_num)
# 初始化读取映射及路网
self.period_map_para_load()
self.period_walk_para_load()
# 日志器 # 日志器
self.logger = get_logger("zxt.excavator") self.logger = get_logger("zxt.excavator")
#
# 参数初始化 # # 参数初始化
self.para_period_update() # self.excavator_para_period_update()
def get_loading_time(self): def get_loading_time(self):
return self.loading_time return self.loading_time
...@@ -86,7 +82,7 @@ class ExcavatorInfo(WalkManage): ...@@ -86,7 +82,7 @@ class ExcavatorInfo(WalkManage):
self.logger.info(self.loading_time) self.logger.info(self.loading_time)
self.logger.info("excavator_uuid_to_index_dict") self.logger.info("excavator_uuid_to_index_dict")
self.logger.info(self.excavator_uuid_to_index_dict) self.logger.info(self.excavator_uuid_to_index_dict)
self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = 5.00 self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = 1.00
# 更新挖机设备出入时间 # 更新挖机设备出入时间
def update_excavator_entrance_exit_time(self): def update_excavator_entrance_exit_time(self):
...@@ -207,7 +203,7 @@ class ExcavatorInfo(WalkManage): ...@@ -207,7 +203,7 @@ class ExcavatorInfo(WalkManage):
# 挖机装载能力 # 挖机装载能力
self.excavator_strength = np.zeros(get_value("dynamic_excavator_num")) self.excavator_strength = np.zeros(get_value("dynamic_excavator_num"))
def para_period_update(self): def excavator_para_period_update(self):
self.reset() self.reset()
...@@ -218,14 +214,8 @@ class ExcavatorInfo(WalkManage): ...@@ -218,14 +214,8 @@ class ExcavatorInfo(WalkManage):
self.logger.info("物料优先级规则") self.logger.info("物料优先级规则")
self.logger.info(rule7) self.logger.info(rule7)
# 装载周期参数
self.period_map_para_load()
print("truck.excavator_uuid_index_dict") print("truck.excavator_uuid_index_dict")
print(self.excavator_uuid_to_index_dict) print(self.excavator_uuid_to_index_dict)
self.period_walk_para_load()
# # 用于动态调度的挖机设备 # # 用于动态调度的挖机设备
# self.dynamic_excavator_set = set(update_autodisp_excavator()) # self.dynamic_excavator_set = set(update_autodisp_excavator())
# #
......
This diff is collapsed.
...@@ -115,7 +115,7 @@ class Group(WalkManage): ...@@ -115,7 +115,7 @@ class Group(WalkManage):
print(truck_current_task) print(truck_current_task)
for i in range(dynamic_truck_num): for i in range(dynamic_truck_num):
task = truck_current_task[self.truck.truck_index_to_uuid_dict[i]] task = truck_current_task[DeviceMap.truck_index_to_uuid_dict[i]]
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]
...@@ -123,8 +123,6 @@ class Group(WalkManage): ...@@ -123,8 +123,6 @@ class Group(WalkManage):
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])
# logger.info("debug2")
if task in empty_task_set: if task in empty_task_set:
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])
...@@ -181,16 +179,16 @@ class Group(WalkManage): ...@@ -181,16 +179,16 @@ class Group(WalkManage):
dump_group_index = self.group_dump_uuid_to_index_dict[group_id][dump_id] dump_group_index = self.group_dump_uuid_to_index_dict[group_id][dump_id]
excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id] excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id]
local_opt_goto_dump_traffic_flow[excavator_group_index][dump_group_index] = \ local_opt_goto_dump_traffic_flow[excavator_group_index][dump_group_index] = \
opt_goto_dump_traffic_flow[self.excavator.excavator_uuid_to_index_dict[excavator_id]][self.dump.dump_uuid_to_index_dict[dump_id]] opt_goto_dump_traffic_flow[DeviceMap.excavator_uuid_to_index_dict[excavator_id]][DeviceMap.dump_uuid_to_index_dict[dump_id]]
local_opt_goto_excavator_traffic_flow[dump_group_index][excavator_group_index] = \ local_opt_goto_excavator_traffic_flow[dump_group_index][excavator_group_index] = \
opt_goto_excavator_traffic_flow[self.dump.dump_uuid_to_index_dict[dump_id]][self.excavator.excavator_uuid_to_index_dict[excavator_id]] opt_goto_excavator_traffic_flow[DeviceMap.dump_uuid_to_index_dict[dump_id]][DeviceMap.excavator_uuid_to_index_dict[excavator_id]]
local_actual_goto_dump_traffic_flow[excavator_group_index][dump_group_index] = \ local_actual_goto_dump_traffic_flow[excavator_group_index][dump_group_index] = \
actual_goto_dump_traffic_flow[self.excavator.excavator_uuid_to_index_dict[excavator_id]][self.dump.dump_uuid_to_index_dict[dump_id]] actual_goto_dump_traffic_flow[DeviceMap.excavator_uuid_to_index_dict[excavator_id]][DeviceMap.dump_uuid_to_index_dict[dump_id]]
local_actual_goto_excavator_traffic_flow[dump_group_index][excavator_group_index] = \ local_actual_goto_excavator_traffic_flow[dump_group_index][excavator_group_index] = \
actual_goto_excavator_traffic_flow[self.dump.dump_uuid_to_index_dict[dump_id]][self.excavator.excavator_uuid_to_index_dict[excavator_id]] actual_goto_excavator_traffic_flow[DeviceMap.dump_uuid_to_index_dict[dump_id]][DeviceMap.excavator_uuid_to_index_dict[excavator_id]]
self.group_opt_goto_dump_traffic_flow[group_id] = local_opt_goto_dump_traffic_flow self.group_opt_goto_dump_traffic_flow[group_id] = local_opt_goto_dump_traffic_flow
self.group_opt_goto_excavator_traffic_flow[group_id] = local_opt_goto_excavator_traffic_flow self.group_opt_goto_excavator_traffic_flow[group_id] = local_opt_goto_excavator_traffic_flow
...@@ -204,7 +202,6 @@ class Group(WalkManage): ...@@ -204,7 +202,6 @@ class Group(WalkManage):
logger.info(self.group_opt_goto_dump_traffic_flow) logger.info(self.group_opt_goto_dump_traffic_flow)
logger.info(self.group_opt_goto_excavator_traffic_flow) logger.info(self.group_opt_goto_excavator_traffic_flow)
def update_group_walk_cost(self): def update_group_walk_cost(self):
# 更新调度分组路网行驶成本 # 更新调度分组路网行驶成本
...@@ -217,7 +214,7 @@ class Group(WalkManage): ...@@ -217,7 +214,7 @@ class Group(WalkManage):
dump_group = self.device_group[group_id][0] dump_group = self.device_group[group_id][0]
excavator_group = self.device_group[group_id][1] excavator_group = self.device_group[group_id][1]
local_walk_to_excavator_cost = np.zeros((len(dump_group), len(excavator_group))) local_walk_to_excavator_cost = np.zeros((len(dump_group), len(excavator_group)))
local_walk_to_dump_cost = np.zeros((len(dump_group), len(excavator_group))) local_walk_to_dump_cost = np.zeros((len(excavator_group), len(dump_group)))
local_park_to_excavator_cost = np.zeros((park_num, len(excavator_group))) local_park_to_excavator_cost = np.zeros((park_num, len(excavator_group)))
for excavator_id in excavator_group: for excavator_id in excavator_group:
for dump_id in dump_group: for dump_id in dump_group:
...@@ -226,16 +223,19 @@ class Group(WalkManage): ...@@ -226,16 +223,19 @@ class Group(WalkManage):
print("dump_group") print("dump_group")
print(dump_group) print(dump_group)
local_walk_to_excavator_cost[dump_group_index][excavator_group_index] = \ local_walk_to_excavator_cost[dump_group_index][excavator_group_index] = \
walk_to_excavator_cost[self.dump.dump_uuid_to_index_dict[dump_id]][self.excavator.excavator_uuid_to_index_dict[excavator_id]] walk_to_excavator_cost[DeviceMap.dump_uuid_to_index_dict[dump_id]][DeviceMap.excavator_uuid_to_index_dict[excavator_id]]
local_walk_to_dump_cost[dump_group_index][excavator_group_index] = \ local_walk_to_dump_cost[excavator_group_index][dump_group_index] = \
walk_to_dump_cost[self.dump.dump_uuid_to_index_dict[dump_id]][self.excavator.excavator_uuid_to_index_dict[excavator_id]] walk_to_dump_cost[DeviceMap.dump_uuid_to_index_dict[dump_id]][DeviceMap.excavator_uuid_to_index_dict[excavator_id]]
for park_index in range(park_num): for park_index in range(park_num):
for excavator_id in excavator_group: for excavator_id in excavator_group:
excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id] excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id]
local_park_to_excavator_cost[park_index][excavator_group_index] = \ local_park_to_excavator_cost[park_index][excavator_group_index] = \
park_to_excavator_cost[park_index][self.excavator.excavator_uuid_to_index_dict[excavator_id]] park_to_excavator_cost[park_index][DeviceMap.excavator_uuid_to_index_dict[excavator_id]]
print("here1")
print(park_to_excavator_cost)
self.group_walk_to_excavator_cost[group_id] = local_walk_to_excavator_cost self.group_walk_to_excavator_cost[group_id] = local_walk_to_excavator_cost
self.group_walk_to_dump_cost[group_id] = local_walk_to_dump_cost self.group_walk_to_dump_cost[group_id] = local_walk_to_dump_cost
...@@ -358,6 +358,42 @@ class Group(WalkManage): ...@@ -358,6 +358,42 @@ class Group(WalkManage):
return group_dump_hold_truck return group_dump_hold_truck
def update_excavator_avl_time(self, excavator_avl_time):
'''
更新调度分组内挖机可用时间
:param excavator_hold_truck:
:return:
'''
group_excavator_avl_time= {}
for group_id in self.group_set:
excavator_group = self.device_group[group_id][1]
group_excavator_avl_time[group_id] = np.zeros(len(excavator_group))
for excavator_id in excavator_group:
group_excavator_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id]
excavator_index = self.excavator.excavator_uuid_to_index_dict[excavator_id]
group_excavator_avl_time[group_id][group_excavator_index] = excavator_avl_time[excavator_index]
return group_excavator_avl_time
def update_dump_avl_time(self, dump_avl_time):
'''
更新调度分组内挖机可用时间
:param dump_hold_truck:
:return:
'''
group_dump_avl_time= {}
for group_id in self.group_set:
dump_group = self.device_group[group_id][0]
group_dump_avl_time[group_id] = np.zeros(len(dump_group))
for dump_id in dump_group:
group_dump_index = self.group_dump_uuid_to_index_dict[group_id][dump_id]
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
group_dump_avl_time[group_id][group_dump_index] = dump_avl_time[dump_index]
return group_dump_avl_time
def update_allow_flow_to_excavator(self): def update_allow_flow_to_excavator(self):
group_allow_flow_to_excavator = {} group_allow_flow_to_excavator = {}
...@@ -391,7 +427,7 @@ class Group(WalkManage): ...@@ -391,7 +427,7 @@ class Group(WalkManage):
self.update_device_group() self.update_device_group()
self.update_group_device_map() self.update_group_device_map()
self.update_group_walk_cost() self.update_group_walk_cost()
self.update_group_truck_flow() # self.update_group_truck_flow()
self.update_modify() self.update_modify()
def get_diaptch_truck_group(self): def get_diaptch_truck_group(self):
......
This diff is collapsed.
...@@ -69,9 +69,9 @@ class PathPlanner(WalkManage): ...@@ -69,9 +69,9 @@ class PathPlanner(WalkManage):
# weighted_distance = weighted_walk_cost() # weighted_distance = weighted_walk_cost()
# 修正因子 # 修正因子
weight = 60 weight = 10
# 阻塞成本权重 # 阻塞成本权重
alpha = 1 alpha = 0
# 距离成本权重 # 距离成本权重
beta = 1 beta = 1
...@@ -87,9 +87,11 @@ class PathPlanner(WalkManage): ...@@ -87,9 +87,11 @@ class PathPlanner(WalkManage):
if rule2.disabled == 0: if rule2.disabled == 0:
alpha = rule2.rule_weight alpha = rule2.rule_weight
beta /= beta if alpha > 0:
beta /= (beta + 0.001)
alpha = alpha / beta * weight alpha = alpha / beta * weight
else:
beta = 1
try: try:
...@@ -153,18 +155,14 @@ class PathPlanner(WalkManage): ...@@ -153,18 +155,14 @@ class PathPlanner(WalkManage):
def walk_cost_cal(self): def walk_cost_cal(self):
self.excavator.para_period_update() self.excavator.excavator_para_period_update()
self.dump.para_period_update() self.dump.dump_para_period_update()
self.truck.para_period_update(self.dump, self.excavator) self.truck.truck_para_period_update(self.dump, self.excavator)
self.truck.state_period_update() self.truck.state_period_update()
self.period_walk_para_load()
self.period_map_para_load()
# self.controller.period_update(self.dump, self.excavator, self.truck) # self.controller.period_update(self.dump, self.excavator, self.truck)
# 计算行驶成本前,更新路网速度信息 # 计算行驶成本前,更新路网速度信息
...@@ -186,6 +184,9 @@ class PathPlanner(WalkManage): ...@@ -186,6 +184,9 @@ class PathPlanner(WalkManage):
load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)]
self.cost_park_to_load_area[park_area_index][load_area_index], _ = \ self.cost_park_to_load_area[park_area_index][load_area_index], _ = \
self.path_cost_generate(str(walk_time_park.load_area_id), str(walk_time_park.park_area_id), True) self.path_cost_generate(str(walk_time_park.load_area_id), str(walk_time_park.park_area_id), True)
logger.info(self.cost_park_to_load_area)
logger.info(self.distance_park_to_excavator)
except Exception as es: except Exception as es:
logger.error('路网信息计成本计算异常') logger.error('路网信息计成本计算异常')
logger.error(es) logger.error(es)
...@@ -233,6 +234,7 @@ class PathPlanner(WalkManage): ...@@ -233,6 +234,7 @@ class PathPlanner(WalkManage):
for j in range(get_value("dynamic_excavator_num")): for j in range(get_value("dynamic_excavator_num")):
load_area_index = self.excavator_index_to_load_area_index_dict[j] load_area_index = self.excavator_index_to_load_area_index_dict[j]
self.cost_park_to_excavator[0][j] = self.cost_park_to_load_area[0][load_area_index] / park_walk_weight[0][j] self.cost_park_to_excavator[0][j] = self.cost_park_to_load_area[0][load_area_index] / park_walk_weight[0][j]
print()
logger.info("真实路网距离-驶往挖机:") logger.info("真实路网距离-驶往挖机:")
logger.info(self.distance_to_excavator) logger.info(self.distance_to_excavator)
...@@ -283,25 +285,25 @@ class LaneInfo: ...@@ -283,25 +285,25 @@ class LaneInfo:
def update_truck_loacate(self): def update_truck_loacate(self):
# 读取矿卡所在路段信息 # 读取矿卡所在路段信息
try: # try:
truck_locate_dict = {} truck_locate_dict = {}
device_name_set = redis2.keys() device_name_set = redis2.keys()
for item in device_name_set: for item in device_name_set:
item = item.decode(encoding='utf-8') item = item.decode(encoding='utf-8')
# json_value = json.loads(redis2.get(item)) # json_value = json.loads(redis2.get(item))
key_value_dict = redis2.hgetall(item) key_value_dict = redis2.hgetall(item)
device_type = key_value_dict[str_to_byte('type')] device_type = key_value_dict[str_to_byte('type')]
is_online = key_value_dict[str_to_byte('online')] is_online = key_value_dict[str_to_byte('online')]
key_set = key_value_dict.keys() key_set = key_value_dict.keys()
if (device_type == str_to_byte("1")) \ if (device_type == str_to_byte("1")) \
and (str_to_byte('online') in key_set) \ and (str_to_byte('online') in key_set) \
and (bytes.decode(is_online) in ["true" or "True"]) \ and (bytes.decode(is_online) in ["true" or "True"]) \
and (str_to_byte('laneId') in key_set): and (str_to_byte('laneId') in key_set):
truck_locate = key_value_dict[str_to_byte('laneId')] truck_locate = key_value_dict[str_to_byte('laneId')]
truck_locate_dict[truck_name_to_uuid_dict[item]] = eval(truck_locate) truck_locate_dict[truck_name_to_uuid_dict[item]] = eval(truck_locate)
except Exception as es: # except Exception as es:
logger.error(f'矿卡{item}所在路段信息读取异常') # logger.error(f'矿卡{item}所在路段信息读取异常')
logger.error(es) # logger.error(es)
print("truck_locate_dict") print("truck_locate_dict")
print(truck_locate_dict) print(truck_locate_dict)
...@@ -347,47 +349,45 @@ class LaneInfo: ...@@ -347,47 +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.keys())
for truck in truck_locate_dict.keys():
lane_id = truck_locate_dict[truck]
logger.info("lane_speed_generate-lane_id")
logger.info(lane_id)
if lane_id in lane_set:
self.lane_speed_dict[truck_locate_dict[truck]] = self.lane_speed_dict[truck_locate_dict[truck]] + \
truck_speed_dict[truck]
# 该路段矿卡数量加一
lane_trucks_dict[truck_locate_dict[truck]] = lane_trucks_dict[truck_locate_dict[truck]] + 1
# 记录存在行驶矿卡的路段
tmp_lane_set.append(lane_id)
# 存在矿卡的路段
print("存在矿卡的路段:")
print(tmp_lane_set)
logger.info("存在矿卡的路段:")
logger.info(tmp_lane_set)
# 对不存在的矿卡路段,实时速度设置为最高
for lane_id in lane_set:
if lane_id not in tmp_lane_set:
self.lane_speed_dict[str(lane_id)] = session_postgre.query(Lane).filter_by(
Id=lane_id).first().MaxSpeed
lane_trucks_dict[str(lane_id)] = 1
# 各路段实时速度取平均
for lane in lane_trucks_dict:
self.lane_speed_dict[lane] = self.lane_speed_dict[lane] / lane_trucks_dict[lane]
except Exception as es: # 对于各路段信息
logger.error("路段实时速度计算异常") print("truck_locate_dict")
logger.error(es) print(truck_locate_dict.keys())
for truck in truck_locate_dict.keys():
lane_id = truck_locate_dict[truck]
logger.info("lane_speed_generate-lane_id")
logger.info(lane_id)
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]] + \
truck_speed_dict[truck]
# 该路段矿卡数量加一
lane_trucks_dict[truck_locate_dict[truck]] = lane_trucks_dict[truck_locate_dict[truck]] + 1
# 记录存在行驶矿卡的路段
tmp_lane_set.append(lane_id)
# 存在矿卡的路段
logger.info("存在矿卡的路段:")
logger.info(tmp_lane_set)
# 对不存在的矿卡路段,实时速度设置为最高
for lane_id in lane_set:
if lane_id not in tmp_lane_set:
self.lane_speed_dict[str(lane_id)] = session_postgre.query(Lane).filter_by(
Id=lane_id).first().MaxSpeed
lane_trucks_dict[str(lane_id)] = 1
# 各路段实时速度取平均
for lane in lane_trucks_dict:
self.lane_speed_dict[lane] = self.lane_speed_dict[lane] / lane_trucks_dict[lane]
# except Exception as es:
# logger.error("路段实时速度计算异常")
# logger.error(es)
return self.lane_speed_dict return self.lane_speed_dict
......
...@@ -72,7 +72,7 @@ class PriorityController(): ...@@ -72,7 +72,7 @@ class PriorityController():
park_walk_weight = park_walk_weight - (park_walk_weight.min() - 1) park_walk_weight = park_walk_weight - (park_walk_weight.min() - 1)
except Exception as es: except Exception as es:
self.logger.errro(es) self.logger.error(es)
self.logger.error("优先级归一化异常") self.logger.error("优先级归一化异常")
return walk_to_excavator_weight, walk_to_dump_weight, park_walk_weight return walk_to_excavator_weight, walk_to_dump_weight, park_walk_weight
...@@ -148,11 +148,9 @@ class PriorityController(): ...@@ -148,11 +148,9 @@ class PriorityController():
dynamic_excavator_num = get_value("dynamic_excavator_num") dynamic_excavator_num = get_value("dynamic_excavator_num")
walk_available = np.ones((dynamic_dump_num, 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 dump_index in range(dynamic_dump_num):
for excavator_index in range(dynamic_excavator_num): for excavator_index in range(dynamic_excavator_num):
if walk_manage.distance_to_excavator[dump_index][excavator_index] > M / 2: if WalkManage.distance_to_excavator[dump_index][excavator_index] > M / 2:
walk_available[dump_index][excavator_index] = 0 walk_available[dump_index][excavator_index] = 0
return walk_available return walk_available
...@@ -8,8 +8,6 @@ ...@@ -8,8 +8,6 @@
# 实时调度模块 # 实时调度模块
from traffic_flow.traffic_flow_planner import *
from para_config import * from para_config import *
from equipment.truck import TruckInfo from equipment.truck import TruckInfo
from equipment.excavator import ExcavatorInfo from equipment.excavator import ExcavatorInfo
...@@ -21,43 +19,42 @@ from dispatcher import Dispatcher, PreSchedule ...@@ -21,43 +19,42 @@ from dispatcher import Dispatcher, PreSchedule
def process(dispatcher): def process(dispatcher):
try: # try:
# 更新周期参数 # 更新周期参数
logger.info("#####################################周期更新开始#####################################") logger.info("#####################################周期更新开始#####################################")
period_para_update() 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):
...@@ -90,7 +87,7 @@ if __name__ == "__main__": ...@@ -90,7 +87,7 @@ if __name__ == "__main__":
logger = get_logger("zxt.main") logger = get_logger("zxt.main")
# 全局参数更新 # 全局参数更新
period_para_update() global_period_para_update()
# 实例化设备对象 # 实例化设备对象
dump = DumpInfo() dump = DumpInfo()
...@@ -109,4 +106,4 @@ if __name__ == "__main__": ...@@ -109,4 +106,4 @@ if __name__ == "__main__":
logger.info(" ") logger.info(" ")
logger.info("调度系统启动") logger.info("调度系统启动")
main(10, dispatcher) main(30, dispatcher)
...@@ -67,8 +67,8 @@ def set_log(): ...@@ -67,8 +67,8 @@ def set_log():
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60) # timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10) # filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10)
# filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10) filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10)
# 设置后缀名称,跟strftime的格式一样 # 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log" filehandler.suffix = "%Y-%m-%d_%H-%M.log"
......
...@@ -25,7 +25,7 @@ with open(json_file) as f: ...@@ -25,7 +25,7 @@ with open(json_file) as f:
with open(json_file) as f: with open(json_file) as f:
postgre_config = json.load(f)["postgresql"] postgre_config = json.load(f)["postgresql"]
logger = get_logger("zxt.tables") # logger = get_logger("zxt.tables")
# # 创建对象的基类: # # 创建对象的基类:
# Base = declarative_base() # Base = declarative_base()
...@@ -107,8 +107,9 @@ try: ...@@ -107,8 +107,9 @@ try:
session_postgre.expire_on_commit = False session_postgre.expire_on_commit = False
except Exception as es: except Exception as es:
logger.error("数据库连接失败") # logger.error("数据库连接失败")
logger.error(es) # logger.error(es)
pass
# 定义对象: # 定义对象:
......
...@@ -52,11 +52,6 @@ class Traffic_flow(WalkManage): ...@@ -52,11 +52,6 @@ class Traffic_flow(WalkManage):
# 更新实际交通流 # 更新实际交通流
def update_actual_traffic_flow(self): def update_actual_traffic_flow(self):
# 装载周期参数
self.period_map_para_load()
self.period_walk_para_load()
loading_task_time = self.excavator.get_loading_task_time() loading_task_time = self.excavator.get_loading_task_time()
unloading_task_time = self.dump.get_unloading_task_time() unloading_task_time = self.dump.get_unloading_task_time()
...@@ -228,6 +223,10 @@ class Traffic_para(WalkManage): ...@@ -228,6 +223,10 @@ class Traffic_para(WalkManage):
rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first() rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first()
if not rule4.disabled: if not rule4.disabled:
for excavator_index in range(len(self.excavator_index_to_uuid_dict)): for excavator_index in range(len(self.excavator_index_to_uuid_dict)):
logger.debug("extract_excavator_info-excavator_index")
logger.debug(excavator_index)
logger.debug("extract_excavator_info-excavator_id")
logger.debug(self.excavator_index_to_uuid_dict[excavator_index])
load_ability = session_mysql.query(EquipmentSpec.mining_abililty).\ load_ability = session_mysql.query(EquipmentSpec.mining_abililty).\
join(Equipment, Equipment.equipment_spec == EquipmentSpec.id).\ join(Equipment, Equipment.equipment_spec == EquipmentSpec.id).\
filter(Equipment.id == self.excavator_index_to_uuid_dict[excavator_index]).first() filter(Equipment.id == self.excavator_index_to_uuid_dict[excavator_index]).first()
...@@ -316,10 +315,6 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu ...@@ -316,10 +315,6 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck) tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck)
tra_para.period_map_para_load()
tra_para.period_walk_para_load()
tra_para.extract_excavator_info() tra_para.extract_excavator_info()
tra_para.extract_dump_info() tra_para.extract_dump_info()
......
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