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

代码优化

parent de8e769f
...@@ -16,9 +16,9 @@ class ExcavatorInfo(WalkManage): ...@@ -16,9 +16,9 @@ class ExcavatorInfo(WalkManage):
# # 挖机集合 # # 挖机集合
# self.dynamic_excavator_set = set(update_autodisp_excavator()) # self.dynamic_excavator_set = set(update_autodisp_excavator())
# 装载设备数量 # 装载设备数量
self.dynamic_excavator_num = len(dynamic_excavator_set) self.dynamic_excavator_num = get_value("dynamic_excavator_num")
# 用于动态调度的卸载设备集合 # 用于动态调度的卸载设备集合
self.dynamic_excavator_set = [] self.dynamic_excavator_set = get_value("dynamic_excavator_set")
# 开始时间 # 开始时间
self.start_time = datetime.now() self.start_time = datetime.now()
# 装载时间 # 装载时间
...@@ -141,7 +141,7 @@ class ExcavatorInfo(WalkManage): ...@@ -141,7 +141,7 @@ class ExcavatorInfo(WalkManage):
logger.info("dynamic_excavator_set") logger.info("dynamic_excavator_set")
logger.info(self.dynamic_excavator_set) logger.info(self.dynamic_excavator_set)
for excavator_id in self.dynamic_excavator_set: for excavator_id in get_value("dynamic_excavator_set"):
item = session_mysql.query(Equipment).filter_by(id=excavator_id).first() item = session_mysql.query(Equipment).filter_by(id=excavator_id).first()
logger.info("excavator_priority_coefficient") logger.info("excavator_priority_coefficient")
logger.info(self.excavator_priority_coefficient) logger.info(self.excavator_priority_coefficient)
...@@ -194,14 +194,17 @@ class ExcavatorInfo(WalkManage): ...@@ -194,14 +194,17 @@ class ExcavatorInfo(WalkManage):
logger.info(rule7) logger.info(rule7)
# 装载周期参数 # 装载周期参数
self.period_map_para_update() self.period_map_para_load()
self.period_walk_para_update() print("truck.excavator_uuid_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_num = len(self.dynamic_excavator_set) # # 用于动态调度的挖机设备
# self.dynamic_excavator_set = set(update_autodisp_excavator())
#
# self.dynamic_excavator_num = len(self.dynamic_excavator_set)
# 计算平均装载时间 # 计算平均装载时间
self.update_excavator_loadtime() self.update_excavator_loadtime()
......
...@@ -132,6 +132,12 @@ class TruckInfo(WalkManage): ...@@ -132,6 +132,12 @@ class TruckInfo(WalkManage):
self.truck_current_task = {} self.truck_current_task = {}
device_name_set = redis2.keys() device_name_set = redis2.keys()
print("tast_truck_set")
print(get_value("dynamic_truck_set")) ## 两个
print(self.dynamic_truck_set)
print(self.truck_uuid_to_index_dict)
for item in device_name_set: for item in device_name_set:
try: try:
item = item.decode(encoding="utf-8") item = item.decode(encoding="utf-8")
...@@ -150,6 +156,23 @@ class TruckInfo(WalkManage): ...@@ -150,6 +156,23 @@ class TruckInfo(WalkManage):
logger.info("矿卡当前任务:") logger.info("矿卡当前任务:")
logger.info(self.truck_current_task) logger.info(self.truck_current_task)
# self.truck_current_task = {}
#
# dynamic_truck_set = get_value("dynamic_truck_set")
#
# for item in dynamic_truck_set:
# # try:
# # item = item.decode(encoding="utf-8")
# key_value_dict = redis2.hgetall(item) # reids str可以自动转为bytes
# currentTask = int(key_value_dict[str_to_byte("currentTask")])
# self.truck_current_task[item] = currentTask
# # except Exception as es:
# # logger.error("读取矿卡任务异常-reids读取异常")
# # logger.error(es)
#
# logger.info("矿卡当前任务:")
# logger.info(self.truck_current_task)
# 更新矿卡最后装载/卸载时间 # 更新矿卡最后装载/卸载时间
def update_truck_last_leave_time(self): def update_truck_last_leave_time(self):
self.last_load_time = {} self.last_load_time = {}
...@@ -500,46 +523,51 @@ class TruckInfo(WalkManage): ...@@ -500,46 +523,51 @@ class TruckInfo(WalkManage):
def update_truck_material(self): def update_truck_material(self):
self.truck_material_bind = {} try:
self.update_truck_excavator_bind()
self.update_truck_dump_area_bind()
self.excavator_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_excavator_num")), 0) self.truck_material_bind = {}
self.dump_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_dump_num")), 0) self.update_truck_excavator_bind()
self.update_truck_dump_area_bind()
for truck_id in self.dynamic_truck_set: self.excavator_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_excavator_num")), 0)
self.dump_material_bind_modify = np.full((self.dynamic_truck_num, get_value("dynamic_dump_num")), 0)
if truck_id in self.truck_dump_bind: for truck_id in self.dynamic_truck_set:
unload_area_id = self.truck_dump_bind[truck_id]
dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Material
self.truck_material_bind[truck_id] = dump_material_id
if truck_id in self.truck_excavator_bind: if truck_id in self.truck_dump_bind:
excavator_id = self.truck_excavator_bind[truck_id] unload_area_id = self.truck_dump_bind[truck_id]
# print(self.excavator.excavator_material) dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Material
excavator_material_id = self.excavator.excavator_material[excavator_id] self.truck_material_bind[truck_id] = dump_material_id
self.truck_material_bind[truck_id] = excavator_material_id
for truck_id in self.dynamic_truck_set: if truck_id in self.truck_excavator_bind:
excavator_id = self.truck_excavator_bind[truck_id]
# print(self.excavator.excavator_material)
excavator_material_id = self.excavator.excavator_material[excavator_id]
self.truck_material_bind[truck_id] = excavator_material_id
truck_index = self.truck_uuid_to_index_dict[truck_id] for truck_id in self.dynamic_truck_set:
if truck_id in self.truck_material_bind: truck_index = self.truck_uuid_to_index_dict[truck_id]
material = self.truck_material_bind[truck_id] if truck_id in self.truck_material_bind:
for excavator_id in get_value("dynamic_excavator_set"): material = self.truck_material_bind[truck_id]
excavator_material_id = self.excavator.excavator_material[excavator_id]
excavator_index = self.excavator_uuid_to_index_dict[excavator_id] for excavator_id in get_value("dynamic_excavator_set"):
print(truck_index, excavator_index) excavator_material_id = self.excavator.excavator_material[excavator_id]
if excavator_material_id != material: excavator_index = self.excavator_uuid_to_index_dict[excavator_id]
self.excavator_material_bind_modify[truck_index][excavator_index] = 1000000 print(truck_index, excavator_index)
if excavator_material_id != material:
self.excavator_material_bind_modify[truck_index][excavator_index] = 1000000
for dump_id in get_value("dynamic_dump_set"): for dump_id in get_value("dynamic_dump_set"):
dump_material_id = self.dump.dump_material[dump_id] dump_material_id = self.dump.dump_material[dump_id]
dump_index = self.dump_uuid_to_index_dict[dump_id] dump_index = self.dump_uuid_to_index_dict[dump_id]
if dump_material_id != material: if dump_material_id != material:
self.dump_material_bind_modify[truck_index][dump_index] = 1000000 self.dump_material_bind_modify[truck_index][dump_index] = 1000000
except Exception as es:
logger.error(es)
logger.error("矿卡物料更新异常")
def update_truck_spec(self): def update_truck_spec(self):
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
...@@ -621,6 +649,54 @@ class TruckInfo(WalkManage): ...@@ -621,6 +649,54 @@ class TruckInfo(WalkManage):
# 设备优先级启用 # 设备优先级启用
rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first().disabled rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first().disabled
# logger.info("Para truck update!")
#
# # 装载周期参数
# self.period_map_para_load()
#
# self.period_walk_para_load()
#
# # 更新有效载重
# self.update_truck_payload()
#
# logger.info("距离成本规则")
# logger.info(rule1)
#
# logger.info("拥堵成本规则")
# logger.info(rule2)
#
# logger.info("车流规划规则")
# logger.info(rule3 or rule4)
#
# logger.info("生产组织规则")
# logger.info(rule5)
#
# logger.info("设备优先级规则")
# logger.info(rule6)
#
# if not rule5:
# # 更新绑定关系
# self.update_truck_dump_area_bind()
#
# self.update_truck_excavator_bind()
#
# # 更新禁止关系
# self.update_truck_excavator_exclude()
#
# if not rule6:
# # 更新矿卡调度优先级
# self.update_truck_priority()
#
# # # 更新矿卡group
# # self.update_truck_group()
#
# # 更新矿卡物料类型
# self.update_truck_material()
# 物料优先级启用
rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first().disabled
logger.info("Para truck update!") logger.info("Para truck update!")
# 装载周期参数 # 装载周期参数
...@@ -631,39 +707,47 @@ class TruckInfo(WalkManage): ...@@ -631,39 +707,47 @@ class TruckInfo(WalkManage):
# 更新有效载重 # 更新有效载重
self.update_truck_payload() self.update_truck_payload()
logger.info("距离成本规则") if rule1:
logger.info(rule1) logger.info("距离成本规则未启用")
else:
logger.info("拥堵成本规则") logger.info("距离成本规则启用")
logger.info(rule2)
logger.info("车流规划规则") if rule2:
logger.info(rule3 or rule4) logger.info("拥堵成本规则未启用")
else:
logger.info("拥堵成本规则启用")
logger.info("生产组织规则") if rule3 or rule4:
logger.info(rule5) logger.info("车流规划规则未启用")
else:
logger.info("车流规划规则启用")
logger.info("设备优先级规则") if rule5:
logger.info(rule6) logger.info("生产组织规则未启用")
else:
if not rule5:
# 更新绑定关系 # 更新绑定关系
self.update_truck_dump_area_bind() self.update_truck_dump_area_bind()
self.update_truck_excavator_bind() self.update_truck_excavator_bind()
# 更新禁止关系 # 更新禁止关系
self.update_truck_excavator_exclude() self.update_truck_excavator_exclude()
logger.info("生产组织规划规则启用")
if not rule6: if rule6:
logger.info("设备优先级规则未启用")
else:
# 更新矿卡调度优先级 # 更新矿卡调度优先级
self.update_truck_priority() self.update_truck_priority()
logger.info("设备优先级规则启用")
if rule7:
logger.info("物料优先级规则未启用")
else:
# 更新矿卡物料类型
self.update_truck_material()
logger.info("物料优先级规则启用")
# # 更新矿卡group
# self.update_truck_group()
# 更新矿卡物料类型
self.update_truck_material()
def state_period_update(self): def state_period_update(self):
......
...@@ -174,6 +174,10 @@ class DeviceMap: ...@@ -174,6 +174,10 @@ class DeviceMap:
self.excavator_uuid_to_index_dict = device_map_dict[ self.excavator_uuid_to_index_dict = device_map_dict[
"excavator_uuid_to_index_dict" "excavator_uuid_to_index_dict"
] ]
print("device.dump_uuid_to_index_dict")
print(self.dump_uuid_to_index_dict)
self.dump_uuid_to_index_dict = device_map_dict["dump_uuid_to_index_dict"] self.dump_uuid_to_index_dict = device_map_dict["dump_uuid_to_index_dict"]
self.excavator_index_to_uuid_dict = device_map_dict[ self.excavator_index_to_uuid_dict = device_map_dict[
"excavator_index_to_uuid_dict" "excavator_index_to_uuid_dict"
...@@ -286,9 +290,9 @@ class WalkManage(DeviceMap): ...@@ -286,9 +290,9 @@ class WalkManage(DeviceMap):
def reset(self): def reset(self):
dynamic_excavator_num = get_value("dynamic_excavator_num") # dynamic_excavator_num
dynamic_dump_num = get_value("dynamic_dump_num") # dynamic_dump_num
park_num = get_value("park_num") # park_num
# 路网真实距离 # 路网真实距离
self.walk_time_to_excavator = np.full( self.walk_time_to_excavator = np.full(
...@@ -492,6 +496,15 @@ def period_para_update(): ...@@ -492,6 +496,15 @@ def period_para_update():
global_dict["dynamic_dump_num"] = dynamic_dump_num global_dict["dynamic_dump_num"] = dynamic_dump_num
global_dict["park_num"] = park_num global_dict["park_num"] = park_num
print("walk_manage.distance_to_excavator")
print(dynamic_dump_num, dynamic_excavator_num)
print(walk_manage.distance_to_excavator)
print("walk_manage.excavator_dict")
print(walk_manage.excavator_uuid_to_index_dict)
print("walk_manage.dump_dict")
print(walk_manage.dump_uuid_to_index_dict)
global_dict["distance_to_excavator"] = walk_manage.distance_to_excavator global_dict["distance_to_excavator"] = walk_manage.distance_to_excavator
global_dict["distance_park_to_excavator"] = walk_manage.distance_park_to_excavator global_dict["distance_park_to_excavator"] = walk_manage.distance_park_to_excavator
global_dict["distance_to_dump"] = walk_manage.distance_to_dump global_dict["distance_to_dump"] = walk_manage.distance_to_dump
...@@ -509,3 +522,8 @@ def period_para_update(): ...@@ -509,3 +522,8 @@ def period_para_update():
logger.info(walk_manage.dump_uuid_to_index_dict) logger.info(walk_manage.dump_uuid_to_index_dict)
logger.info("walk_manage.distance_park_to_excavator") logger.info("walk_manage.distance_park_to_excavator")
logger.info(walk_manage.distance_park_to_excavator) logger.info(walk_manage.distance_park_to_excavator)
logger.info("walk_manage.truck_index_to_uuid_dict")
logger.info(walk_manage.truck_index_to_uuid_dict)
logger.info("walk_manage.dynamic_truck_set")
logger.info(dynamic_truck_set)
...@@ -145,10 +145,20 @@ class PathPlanner(WalkManage): ...@@ -145,10 +145,20 @@ class PathPlanner(WalkManage):
def walk_cost(self): def walk_cost(self):
self.excavator.para_period_update()
self.dump.para_period_update()
self.truck.para_period_update(self.dump, self.excavator)
self.truck.state_period_update()
self.period_walk_para_load() self.period_walk_para_load()
self.period_map_para_load() self.period_map_para_load()
self.controller.period_update(self.dump, self.excavator, self.truck)
# 计算行驶成本前,更新路网速度信息 # 计算行驶成本前,更新路网速度信息
self.lane.lane_speed_generate() self.lane.lane_speed_generate()
...@@ -173,6 +183,8 @@ class PathPlanner(WalkManage): ...@@ -173,6 +183,8 @@ class PathPlanner(WalkManage):
logger.error(es) logger.error(es)
cost_to_excavator = np.zeros_like(get_value("distance_to_excavator")) cost_to_excavator = np.zeros_like(get_value("distance_to_excavator"))
print("distance_to_excavator")
print(cost_to_excavator)
cost_to_dump = np.zeros_like(get_value("distance_to_dump")) cost_to_dump = np.zeros_like(get_value("distance_to_dump"))
cost_park_to_excavator = np.zeros_like(get_value("distance_park_to_excavator")) cost_park_to_excavator = np.zeros_like(get_value("distance_park_to_excavator"))
...@@ -203,6 +215,7 @@ class PathPlanner(WalkManage): ...@@ -203,6 +215,7 @@ class PathPlanner(WalkManage):
unload_area_index = self.dump_index_to_unload_area_index_dict[i] unload_area_index = self.dump_index_to_unload_area_index_dict[i]
logger.info("cost_to_excavator") logger.info("cost_to_excavator")
logger.info(cost_to_excavator) logger.info(cost_to_excavator)
print(i, j)
cost_to_excavator[i][j] = self.cost_to_load_area[unload_area_index][load_area_index] / walk_weight[i][j] + group_walk_available[i][j] cost_to_excavator[i][j] = self.cost_to_load_area[unload_area_index][load_area_index] / walk_weight[i][j] + group_walk_available[i][j]
cost_to_dump[i][j] = self.cost_to_unload_area[unload_area_index][load_area_index] / walk_weight[i][j] + walk_available[i][j] + group_walk_available[i][j] cost_to_dump[i][j] = self.cost_to_unload_area[unload_area_index][load_area_index] / walk_weight[i][j] + walk_available[i][j] + group_walk_available[i][j]
......
...@@ -20,6 +20,12 @@ class PriorityController(): ...@@ -20,6 +20,12 @@ class PriorityController():
self.excavator = excavator self.excavator = excavator
self.truck = truck self.truck = truck
def period_update(self, dump, excavator, truck):
# 设备类
self.dump = dump
self.excavator = excavator
self.truck = truck
def weighted_walk_cost(self): def weighted_walk_cost(self):
dynamic_dump_num = get_value("dynamic_dump_num") dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = get_value("dynamic_excavator_num") dynamic_excavator_num = get_value("dynamic_excavator_num")
...@@ -54,9 +60,13 @@ class PriorityController(): ...@@ -54,9 +60,13 @@ class PriorityController():
excavator_material_priority[excavator_inedx] excavator_material_priority[excavator_inedx]
park_walk_weight = park_walk_weight * self.excavator.excavator_material_priority park_walk_weight = park_walk_weight * self.excavator.excavator_material_priority
walk_weight = walk_weight - (walk_weight.min() - 1) try:
walk_weight = walk_weight - (walk_weight.min() - 1)
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:
logger.errro(es)
logger.error("数值异常")
return walk_weight, park_walk_weight return walk_weight, park_walk_weight
...@@ -67,12 +77,20 @@ class PriorityController(): ...@@ -67,12 +77,20 @@ class PriorityController():
dynamic_excavator_set = get_value("dynamic_excavator_set") dynamic_excavator_set = get_value("dynamic_excavator_set")
walk_weight = np.zeros((dynamic_dump_num, dynamic_excavator_num)) walk_weight = np.zeros((dynamic_dump_num, dynamic_excavator_num))
for dump_id in dynamic_dump_set: print("here")
for excavator_id in dynamic_excavator_set: print(dynamic_dump_set)
dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_inedx = self.excavator.excavator_uuid_to_index_dict[excavator_id] try:
if self.excavator.excavator_material[excavator_id] != self.dump.dump_material[dump_id]:
walk_weight[dump_index][excavator_inedx] += 1000000 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_weight[dump_index][excavator_inedx] += 1000000
except Exception as es:
logger.info(es)
logger.info("error-12")
return walk_weight return walk_weight
......
...@@ -226,8 +226,9 @@ class Dispatcher(WalkManage): ...@@ -226,8 +226,9 @@ class Dispatcher(WalkManage):
truck_current_trip = truck.get_truck_current_trip() truck_current_trip = truck.get_truck_current_trip()
payload = truck.get_payload() payload = truck.get_payload()
dynamic_dump_num = dump.get_dump_num() dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = excavator.get_excavator_num() dynamic_excavator_num = get_value("dynamic_excavator_num")
dynamic_truck_num = get_value("dynamic_truck_num")
self.goto_dump_truck_num = np.zeros((dynamic_excavator_num, dynamic_dump_num)) self.goto_dump_truck_num = np.zeros((dynamic_excavator_num, dynamic_dump_num))
self.actual_goto_dump_traffic_flow = np.zeros( self.actual_goto_dump_traffic_flow = np.zeros(
...@@ -241,6 +242,14 @@ class Dispatcher(WalkManage): ...@@ -241,6 +242,14 @@ class Dispatcher(WalkManage):
) )
# try: # try:
logger.info("dynamic_truck_num")
logger.info(dynamic_truck_num)
print("truck.truck_index_to_uuid_dict")
print(truck.truck_index_to_uuid_dict)
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[truck.truck_index_to_uuid_dict[i]] task = truck_current_task[truck.truck_index_to_uuid_dict[i]]
...@@ -351,12 +360,7 @@ class Dispatcher(WalkManage): ...@@ -351,12 +360,7 @@ class Dispatcher(WalkManage):
logger.info("驶往挖机实际车流") logger.info("驶往挖机实际车流")
logger.info(self.actual_goto_excavator_traffic_flow) logger.info(self.actual_goto_excavator_traffic_flow)
def para_period_update(self): def dispatcher_period_update(self):
logger.info("#####################################周期更新开始#####################################")
# 调度分组更新
self.group.period_update()
# 装载映射参数及 # 装载映射参数及
self.period_map_para_load() self.period_map_para_load()
...@@ -372,11 +376,13 @@ class Dispatcher(WalkManage): ...@@ -372,11 +376,13 @@ class Dispatcher(WalkManage):
# 更新矿卡对象 # 更新矿卡对象
truck.para_period_update(dump, excavator) truck.para_period_update(dump, excavator)
def state_period_update(self):
# try:
truck.state_period_update() truck.state_period_update()
print("test_truck")
print(truck.dynamic_truck_set)
print(truck.truck_current_task)
print(truck.truck_uuid_to_index_dict)
# 更新实时车流 # 更新实时车流
self.update_actual_traffic_flow() self.update_actual_traffic_flow()
...@@ -394,9 +400,8 @@ class Dispatcher(WalkManage): ...@@ -394,9 +400,8 @@ class Dispatcher(WalkManage):
self.cost_to_excavator, self.cost_to_dump, self.cost_park_to_excavator = self.path.walk_cost() self.cost_to_excavator, self.cost_to_dump, self.cost_park_to_excavator = self.path.walk_cost()
# except Exception as es: # 调度分组更新
# logger.error("周期更新异常") self.group.period_update()
# logger.error(es)
def sim_para_reset(self): def sim_para_reset(self):
...@@ -805,184 +810,183 @@ class Dispatcher(WalkManage): ...@@ -805,184 +810,183 @@ class Dispatcher(WalkManage):
print("self.cur_truck_ava_time", self.cur_truck_ava_time) print("self.cur_truck_ava_time", self.cur_truck_ava_time)
# try:
# 读取所需信息
trucks = truck.get_truck_num()
truck_current_trip = truck.get_truck_current_trip()
truck_current_task = truck.get_truck_current_task()
payload = truck.get_payload()
unloading_time = dump.get_unloading_time()
loading_time = excavator.get_loading_time()
# 出入场时间
loading_task_time = excavator.get_loading_task_time()
unloading_task_time = dump.get_unloading_task_time()
walk_time_to_unload_area = walk_manage.get_walk_time_to_unload_area()
walk_time_to_load_area = walk_manage.get_walk_time_to_load_area()
# Seq初始化
Seq = [[truck_current_trip[i][1], -1] for i in range(trucks)]
# 根据矿卡最早可用时间顺序进行规划
print(self.cur_truck_ava_time)
print(truck.truck_priority)
temp = copy.deepcopy(self.cur_truck_ava_time) - truck.truck_priority
try: try:
# 没有启动的矿卡加上一个很大的值,降低其优先级
for i in range(trucks):
task = truck_current_task[truck.truck_index_to_uuid_dict[i]]
if task == -2:
temp[i] = temp[i] + M
except Exception as es:
logger.error("矿卡排序启动异常")
logger.error(es)
index = np.argsort(temp.reshape(1, -1))
index = index.flatten()
# 对于在线矿卡已经赋予新的派车计划,更新其最早可用时间,及相关设备时间参数 # 读取所需信息
for truck_index in index: dynamic_truck_num = get_value("dynamic_truck_num")
if len(Seq[truck_index]) > 0: truck_current_trip = truck.get_truck_current_trip()
truck_current_task = truck.get_truck_current_task()
# try: payload = truck.get_payload()
# 获取矿卡id unloading_time = dump.get_unloading_time()
truck_id = truck.truck_index_to_uuid_dict[truck_index] loading_time = excavator.get_loading_time()
# 判断矿卡是否禁用 # 出入场时间
if truck_id in truck.update_truck_disable_list(): loading_task_time = excavator.get_loading_task_time()
continue unloading_task_time = dump.get_unloading_task_time()
# 获取矿卡当前任务 walk_time_to_unload_area = walk_manage.get_walk_time_to_unload_area()
task = truck_current_task[truck.truck_index_to_uuid_dict[truck_index]] walk_time_to_load_area = walk_manage.get_walk_time_to_load_area()
# 矿卡结束当前派车计划后的目的地 # Seq初始化
end_eq_index = truck_current_trip[truck_index][1] Seq = [[truck_current_trip[i][1], -1] for i in range(dynamic_truck_num)]
# 调用调度函数,得到最优目的地序号 # 根据矿卡最早可用时间顺序进行规划
target_eq_index = self.truck_schedule(truck.truck_index_to_uuid_dict[truck_index]) print(self.cur_truck_ava_time)
print(truck.truck_priority)
temp = copy.deepcopy(self.cur_truck_ava_time) - truck.truck_priority
# 写入Seq序列 try:
Seq[truck_index][1] = target_eq_index # 没有启动的矿卡加上一个很大的值,降低其优先级
for i in range(dynamic_truck_num):
task = truck_current_task[truck.truck_index_to_uuid_dict[i]]
if task == -2:
temp[i] = temp[i] + M
except Exception as es:
logger.error("矿卡排序启动异常")
logger.error(es)
index = np.argsort(temp.reshape(1, -1))
index = index.flatten()
# 对于在线矿卡已经赋予新的派车计划,更新其最早可用时间,及相关设备时间参数
for truck_index in index:
if len(Seq[truck_index]) > 0:
try:
# 获取矿卡id
truck_id = truck.truck_index_to_uuid_dict[truck_index]
# 判断矿卡是否禁用
if truck_id in truck.update_truck_disable_list():
continue
# 获取矿卡当前任务
task = truck_current_task[truck.truck_index_to_uuid_dict[truck_index]]
# 矿卡结束当前派车计划后的目的地
end_eq_index = truck_current_trip[truck_index][1]
# 调用调度函数,得到最优目的地序号
target_eq_index = self.truck_schedule(truck.truck_index_to_uuid_dict[truck_index])
# 写入Seq序列
Seq[truck_index][1] = target_eq_index
try:
group_id = self.group.dispatch_truck_group[truck_id]
except Exception as es:
logger.error("非动态调度矿卡")
logger.error(es)
except Exception as es:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck_index]]} 派车计划计算异常')
logger.error(f'矿卡派车计划计算异常')
logger.error(es)
try:
if task in empty_task_set:
target_area_index = dump.dump_index_to_unload_area_index_dict[target_eq_index]
end_area_index = excavator.excavator_index_to_load_area_index_dict[end_eq_index]
# 更新变量,预计产量更新
self.sim_dump_real_mass[target_eq_index] = \
(self.sim_dump_real_mass[target_eq_index] + payload[truck_index])
# 预计卸载设备可用时间更新
self.sim_dump_ava_time[target_eq_index] = (
max(
self.sim_dump_ava_time[target_eq_index],
self.sim_truck_ava_time[truck_index] + \
walk_time_to_unload_area[target_area_index][end_area_index],)
+ unloading_task_time[target_eq_index]
)
elif task in heavy_task_set:
target_area_index = (excavator.excavator_index_to_load_area_index_dict[target_eq_index])
end_area_index = dump.dump_index_to_unload_area_index_dict[end_eq_index]
# 更新变量,预计产量更新
self.sim_excavator_real_mass[target_eq_index] = (self.sim_excavator_real_mass[target_eq_index]
+ payload[truck_index])
# 预计装载点可用时间更新
self.sim_excavator_ava_time[target_eq_index] = (
max(self.sim_excavator_ava_time[target_eq_index], self.sim_truck_ava_time[truck_index]
+ walk_time_to_unload_area[end_area_index][target_area_index],) \
+ loading_task_time[target_eq_index])
else:
pass
except Exception as es:
logger.error( f"矿卡 {truck_uuid_to_name_dict[truck.truck_index_to_uuid_dict[truck_index]]} 调度状态更新异常")
logger.error(es)
for i in range(len(Seq)):
try: try:
group_id = self.group.dispatch_truck_group[truck_id]
except Exception as es:
logger.error("非动态调度矿卡")
logger.error(es)
# except Exception as es:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck_index]]} 派车计划计算异常')
# logger.error(es)
try: truck_id = truck.truck_index_to_uuid_dict[i]
group_id = self.group.dispatch_truck_group[truck_id]
record = {"truckId": truck.truck_index_to_uuid_dict[i]}
task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[i]]
if task in empty_task_set: if task in empty_task_set:
target_area_index = dump.dump_index_to_unload_area_index_dict[target_eq_index] item = (
end_area_index = excavator.excavator_index_to_load_area_index_dict[end_eq_index] session_mysql.query(Dispatch)
# 更新变量,预计产量更新 .filter_by(dump_id=dump.dump_index_to_uuid_dict[Seq[i][1]],
self.sim_dump_real_mass[target_eq_index] = \ exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][0]],
(self.sim_dump_real_mass[target_eq_index] + payload[truck_index]) truck_id=truck_id,
# 预计卸载设备可用时间更新 group_id=group_id,
self.sim_dump_ava_time[target_eq_index] = ( isauto=1, isdeleted=0,).first())
max( record["exactorId"] = item.exactor_id
self.sim_dump_ava_time[target_eq_index], record["dumpId"] = item.dump_id
self.sim_truck_ava_time[truck_index] + \ record["loadAreaId"] = item.load_area_id
walk_time_to_unload_area[target_area_index][end_area_index],) record["unloadAreaId"] = item.unload_area_id
+ unloading_task_time[target_eq_index] record["dispatchId"] = item.id
) record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
elif task in heavy_task_set: elif task in heavy_task_set:
target_area_index = (excavator.excavator_index_to_load_area_index_dict[target_eq_index]) item = (
end_area_index = dump.dump_index_to_unload_area_index_dict[end_eq_index] session_mysql.query(Dispatch)
# 更新变量,预计产量更新 .filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]],
self.sim_excavator_real_mass[target_eq_index] = (self.sim_excavator_real_mass[target_eq_index] dump_id=dump.dump_index_to_unload_area_index_dict[Seq[i][0]],
+ payload[truck_index]) truck_id=truck_id,
# 预计装载点可用时间更新 group_id=group_id,
self.sim_excavator_ava_time[target_eq_index] = ( isauto=1, isdeleted=0,).first())
max(self.sim_excavator_ava_time[target_eq_index], self.sim_truck_ava_time[truck_index] record["exactorId"] = excavator.excavator_index_to_uuid_dict[Seq[i][1]]
+ walk_time_to_unload_area[end_area_index][target_area_index],) \ record["dumpId"] = item.dump_id
+ loading_task_time[target_eq_index]) record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id
record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
elif task == -2:
item = (
session_mysql.query(Dispatch)
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]], group_id=group_id,
isauto=1, isdeleted=0,).first())
record["exactorId"] = item.exactor_id
record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id
record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
else: else:
pass pass
redis5.set(truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
except Exception as es: except Exception as es:
logger.error( f"矿卡 {truck_uuid_to_name_dict[truck.truck_index_to_uuid_dict[truck_index]]} 调度状态更新异常") logger.error("调度结果写入异常-redis写入异常")
logger.error(f"调度结果:{Seq}")
logger.error(es) logger.error(es)
for i in range(len(Seq)): for i in range(dynamic_truck_num):
# try: print("dispatch_setting:")
print(redis5.get(truck.truck_index_to_uuid_dict[i]))
truck_id = truck.truck_index_to_uuid_dict[i] except Exception as es:
group_id = self.group.dispatch_truck_group[truck_id] logger.error("更新不及时-1")
logger.error(es)
record = {"truckId": truck.truck_index_to_uuid_dict[i]}
task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[i]]
if task in empty_task_set:
item = (
session_mysql.query(Dispatch)
.filter_by(dump_id=dump.dump_index_to_uuid_dict[Seq[i][1]],
exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][0]],
truck_id=truck_id,
group_id=group_id,
isauto=1, isdeleted=0,).first())
record["exactorId"] = item.exactor_id
record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id
record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
elif task in heavy_task_set:
item = (
session_mysql.query(Dispatch)
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]],
dump_id=dump.dump_index_to_unload_area_index_dict[Seq[i][0]],
truck_id=truck_id,
group_id=group_id,
isauto=1, isdeleted=0,).first())
record["exactorId"] = excavator.excavator_index_to_uuid_dict[Seq[i][1]]
record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id
record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
elif task == -2:
item = (
session_mysql.query(Dispatch)
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]], group_id=group_id,
isauto=1, isdeleted=0,).first())
record["exactorId"] = item.exactor_id
record["dumpId"] = item.dump_id
record["loadAreaId"] = item.load_area_id
record["unloadAreaId"] = item.unload_area_id
record["dispatchId"] = item.id
record["isdeleted"] = False
record["creator"] = item.creator
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
else:
pass
redis5.set(truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
# except Exception as es:
# logger.error("调度结果写入异常-redis写入异常")
# logger.error(f"调度结果:{Seq}")
# logger.error(es)
for i in range(trucks):
print("dispatch_setting:")
print(redis5.get(truck.truck_index_to_uuid_dict[i]))
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger.info("#####################################周期更新结束#####################################")
return Seq return Seq
...@@ -1017,16 +1021,22 @@ class Group(WalkManage): ...@@ -1017,16 +1021,22 @@ class Group(WalkManage):
# 更新矿卡-调度分组隶属关系 # 更新矿卡-调度分组隶属关系
self.dispatch_truck_group = {} self.dispatch_truck_group = {}
dynamic_truck_set = get_value("dynamic_truck_set") dynamic_truck_set = get_value("dynamic_truck_set")
print("dispatch_truck_group-dynamic_truck_set")
print(dynamic_truck_set)
# 动态派车数量没变,但是此时某条派车计划被删除,dispatch_truck_group 就会缺失矿卡
for truck_id in dynamic_truck_set: for truck_id in dynamic_truck_set:
item = session_mysql.query(Dispatch).filter_by(truck_id=truck_id, isauto=1, isdeleted=0).first() item = session_mysql.query(Dispatch).filter_by(truck_id=truck_id, isauto=1, isdeleted=0).first()
if item is None: if item is None:
print(truck_id)
continue continue
self.dispatch_truck_group[truck_id] = item.group_id self.dispatch_truck_group[truck_id] = item.group_id
print(self.dispatch_truck_group)
def update_group_set(self): def update_group_set(self):
# 更新调度组 # 更新调度组
self.group_set = set() self.group_set = set()
for item in session_mysql.query(Dispatch).all(): for item in session_mysql.query(Dispatch).filter_by(isauto=1, isdeleted=0).all():
if item.group_id is not None: if item.group_id is not None:
self.group_set.add(item.group_id) self.group_set.add(item.group_id)
self.group_num = len(self.group_set) self.group_num = len(self.group_set)
...@@ -1035,7 +1045,10 @@ class Group(WalkManage): ...@@ -1035,7 +1045,10 @@ class Group(WalkManage):
# 更新设备分组group_id -> {set(dump_id), set(excavator_id)} # 更新设备分组group_id -> {set(dump_id), set(excavator_id)}
self.device_group = {} self.device_group = {}
for group_id in self.get_group_set(): for group_id in self.get_group_set():
self.device_group[group_id] = [set(), set()] if group_id not in self.device_group:
self.device_group[group_id] = [set(), set()]
else:
continue
for item in session_mysql.query(Dispatch).filter_by(group_id=group_id, isauto=1, isdeleted=0).all(): for item in session_mysql.query(Dispatch).filter_by(group_id=group_id, isauto=1, isdeleted=0).all():
self.device_group[group_id][0].add(item.dump_id) self.device_group[group_id][0].add(item.dump_id)
self.device_group[group_id][1].add(item.exactor_id) self.device_group[group_id][1].add(item.exactor_id)
...@@ -1053,9 +1066,15 @@ class Group(WalkManage): ...@@ -1053,9 +1066,15 @@ class Group(WalkManage):
# try: # try:
print("uuid_to_index_dict")
print(dump.dump_uuid_to_index_dict)
print(excavator.excavator_uuid_to_index_dict)
for group_id in self.group_set: for group_id in self.group_set:
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]
print("group")
print(self.device_group)
local_opt_goto_dump_traffic_flow = np.zeros((len(excavator_group), len(dump_group))) local_opt_goto_dump_traffic_flow = np.zeros((len(excavator_group), len(dump_group)))
local_opt_goto_excavator_traffic_flow = np.zeros((len(dump_group), len(excavator_group))) local_opt_goto_excavator_traffic_flow = np.zeros((len(dump_group), len(excavator_group)))
local_actual_goto_dump_traffic_flow = np.zeros((len(excavator_group), len(dump_group))) local_actual_goto_dump_traffic_flow = np.zeros((len(excavator_group), len(dump_group)))
...@@ -1065,7 +1084,7 @@ class Group(WalkManage): ...@@ -1065,7 +1084,7 @@ 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[dump.excavator_uuid_to_index_dict[excavator_id]][dump.dump_uuid_to_index_dict[dump_id]] opt_goto_dump_traffic_flow[excavator.excavator_uuid_to_index_dict[excavator_id]][dump.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[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]] opt_goto_excavator_traffic_flow[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]]
...@@ -1094,35 +1113,38 @@ class Group(WalkManage): ...@@ -1094,35 +1113,38 @@ class Group(WalkManage):
walk_to_excavator_cost, walk_to_dump_cost, park_to_excavator_cost = self.path.walk_cost() walk_to_excavator_cost, walk_to_dump_cost, park_to_excavator_cost = self.path.walk_cost()
# try: try:
for group_id in self.group_set:
dump_group = self.device_group[group_id][0]
excavator_group = self.device_group[group_id][1]
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_park_to_excavator_cost = np.zeros((park_num, len(excavator_group)))
for excavator_id in excavator_group:
for dump_id in dump_group:
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]
local_walk_to_excavator_cost[dump_group_index][excavator_group_index] = \
walk_to_excavator_cost[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]]
local_walk_to_dump_cost[dump_group_index][excavator_group_index] = \
walk_to_dump_cost[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]]
for park_index in range(park_num): for group_id in self.group_set:
dump_group = self.device_group[group_id][0]
excavator_group = self.device_group[group_id][1]
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_park_to_excavator_cost = np.zeros((park_num, len(excavator_group)))
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] for dump_id in dump_group:
local_park_to_excavator_cost[park_index][excavator_group_index] = \ dump_group_index = self.group_dump_uuid_to_index_dict[group_id][dump_id]
park_to_excavator_cost[park_index][excavator.excavator_uuid_to_index_dict[excavator_id]] excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id]
print("dump_group")
self.group_walk_to_excavator_cost[group_id] = local_walk_to_excavator_cost print(dump_group)
self.group_walk_to_dump_cost[group_id] = local_walk_to_dump_cost local_walk_to_excavator_cost[dump_group_index][excavator_group_index] = \
self.group_park_to_excavator[group_id] = local_park_to_excavator_cost walk_to_excavator_cost[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]]
# except Exception as es:
# logger.info(es) local_walk_to_dump_cost[dump_group_index][excavator_group_index] = \
walk_to_dump_cost[dump.dump_uuid_to_index_dict[dump_id]][excavator.excavator_uuid_to_index_dict[excavator_id]]
for park_index in range(park_num):
for excavator_id in excavator_group:
excavator_group_index = self.group_excavator_uuid_to_index_dict[group_id][excavator_id]
local_park_to_excavator_cost[park_index][excavator_group_index] = \
park_to_excavator_cost[park_index][excavator.excavator_uuid_to_index_dict[excavator_id]]
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_park_to_excavator[group_id] = local_park_to_excavator_cost
except Exception as es:
logger.info(es)
logger.info("error-11")
def update_group_device_map(self): def update_group_device_map(self):
# 更新调度分组内设备映射 # 更新调度分组内设备映射
...@@ -1162,35 +1184,48 @@ class Group(WalkManage): ...@@ -1162,35 +1184,48 @@ class Group(WalkManage):
logger.info(self.group_excavator_uuid_to_index_dict) logger.info(self.group_excavator_uuid_to_index_dict)
def update_modify(self): def update_modify(self):
self.group_excavator_exclude_modify = {} try:
self.group_excavator_material_bind_modify = {}
self.group_dump_material_bind_modify = {} dynamic_truck_set = get_value("dynamic_truck_set")
for truck_id in dynamic_truck_set:
group_id = self.dispatch_truck_group[truck_id] print("update_modify")
group_dump_num = len(self.device_group[group_id][0]) print(dynamic_truck_set)
group_excavator_num = len(self.device_group[group_id][1])
excavator_exclude_modify = np.zeros(group_excavator_num)
excavator_material_bind_modify = np.zeros(group_excavator_num)
dump_material_bind_modify = np.zeros(group_dump_num)
truck_index = truck.truck_uuid_to_index_dict[truck_id] print("self.dispatch_truck_group")
print(self.dispatch_truck_group)
for group_excavator_index in range(group_excavator_num): self.group_excavator_exclude_modify = {}
excavator_index = excavator.excavator_uuid_to_index_dict[self.group_excavator_index_to_uuid_dict[group_id][group_excavator_index]] self.group_excavator_material_bind_modify = {}
excavator_exclude_modify[group_excavator_index] = truck.excavator_exclude_modify[truck_index][excavator_index] self.group_dump_material_bind_modify = {}
for truck_id in dynamic_truck_set:
group_id = self.dispatch_truck_group[truck_id]
group_dump_num = len(self.device_group[group_id][0])
group_excavator_num = len(self.device_group[group_id][1])
excavator_exclude_modify = np.zeros(group_excavator_num)
excavator_material_bind_modify = np.zeros(group_excavator_num)
dump_material_bind_modify = np.zeros(group_dump_num)
for group_excavator_index in range(group_excavator_num): truck_index = truck.truck_uuid_to_index_dict[truck_id]
excavator_index = excavator.excavator_uuid_to_index_dict[
self.group_excavator_index_to_uuid_dict[group_id][group_excavator_index]]
excavator_material_bind_modify[group_excavator_index] = truck.excavator_material_bind_modify[truck_index][excavator_index]
for group_dump_index in range(group_dump_num): for group_excavator_index in range(group_excavator_num):
dump_index = dump.dump_uuid_to_index_dict[self.group_dump_index_to_uuid_dict[group_id][group_dump_index]] excavator_index = excavator.excavator_uuid_to_index_dict[self.group_excavator_index_to_uuid_dict[group_id][group_excavator_index]]
dump_material_bind_modify[group_dump_index] = truck.dump_material_bind_modify[truck_index][dump_index] excavator_exclude_modify[group_excavator_index] = truck.excavator_exclude_modify[truck_index][excavator_index]
self.group_excavator_exclude_modify[truck_id] = excavator_exclude_modify for group_excavator_index in range(group_excavator_num):
self.group_excavator_material_bind_modify[truck_id] = excavator_material_bind_modify excavator_index = excavator.excavator_uuid_to_index_dict[
self.group_dump_material_bind_modify[truck_id] = dump_material_bind_modify self.group_excavator_index_to_uuid_dict[group_id][group_excavator_index]]
excavator_material_bind_modify[group_excavator_index] = truck.excavator_material_bind_modify[truck_index][excavator_index]
for group_dump_index in range(group_dump_num):
dump_index = dump.dump_uuid_to_index_dict[self.group_dump_index_to_uuid_dict[group_id][group_dump_index]]
dump_material_bind_modify[group_dump_index] = truck.dump_material_bind_modify[truck_index][dump_index]
self.group_excavator_exclude_modify[truck_id] = excavator_exclude_modify
self.group_excavator_material_bind_modify[truck_id] = excavator_material_bind_modify
self.group_dump_material_bind_modify[truck_id] = dump_material_bind_modify
except Exception as es:
logger.error(es)
logger.error("modify update 异常")
def period_update(self): def period_update(self):
self.reset() self.reset()
...@@ -1235,56 +1270,58 @@ class Group(WalkManage): ...@@ -1235,56 +1270,58 @@ class Group(WalkManage):
self.group_dump_material_bind_modify = {} self.group_dump_material_bind_modify = {}
def para_process(dispatcher): # def para_process(dispatcher):
#
logger.info("papa_process!") # logger.info("papa_process!")
#
# 清空数据库缓存 # # 清空数据库缓存
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.para_period_update() # dispatcher.para_period_update()
#
#
def state_process(dispatcher): # def state_process(dispatcher):
#
print("state_process!") # print("state_process!")
#
logger.info("state_process!") # logger.info("state_process!")
#
# 清空数据库缓存 # # 清空数据库缓存
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.state_period_update() # dispatcher.state_period_update()
#
# 参数重置 # # 参数重置
dispatcher.sim_para_reset() # dispatcher.sim_para_reset()
#
# 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)
# 下面三个函数保证程序定期执行,不用管他 # 下面三个函数保证程序定期执行,不用管他
def process(dispatcher): def process(dispatcher):
try: try:
# 更新周期参数 # 更新周期参数
logger.info("#####################################周期更新开始#####################################")
period_para_update() 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("无动态派车计划可用")
...@@ -1292,9 +1329,37 @@ def process(dispatcher): ...@@ -1292,9 +1329,37 @@ def process(dispatcher):
if get_value("dynamic_truck_num") == 0: if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡") raise Exception("无动态派车可用矿卡")
return return
para_process(dispatcher) # para_process(dispatcher)
#
# state_process(dispatcher)
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
state_process(dispatcher) # 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
#
# # 周期更新
# dispatcher.para_period_update()
# 周期更新
dispatcher.dispatcher_period_update()
# 参数重置
dispatcher.sim_para_reset()
# try:
# 调度计算
dispatcher.schedule_construct()
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger.info("#####################################周期更新结束#####################################")
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
......
...@@ -138,6 +138,9 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_ ...@@ -138,6 +138,9 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
print("static_excavator_uuid_to_index_dict")
print(excavator_uuid_to_index_dict)
return { return {
"excavator_uuid_to_index_dict": excavator_uuid_to_index_dict, "excavator_uuid_to_index_dict": excavator_uuid_to_index_dict,
"dump_uuid_to_index_dict": dump_uuid_to_index_dict, "dump_uuid_to_index_dict": dump_uuid_to_index_dict,
...@@ -161,6 +164,10 @@ def update_truck_uuid_index_map(dynamic_truck_set): ...@@ -161,6 +164,10 @@ def update_truck_uuid_index_map(dynamic_truck_set):
truck_index_to_uuid_dict[truck_num] = truck_id truck_index_to_uuid_dict[truck_num] = truck_id
truck_num = truck_num + 1 truck_num = truck_num + 1
print(dynamic_truck_set)
print("static-truck_uuid_to_index_dict")
print(truck_uuid_to_index_dict)
return { return {
"truck_uuid_to_index_dict": truck_uuid_to_index_dict, "truck_uuid_to_index_dict": truck_uuid_to_index_dict,
"truck_index_to_uuid_dict": truck_index_to_uuid_dict, "truck_index_to_uuid_dict": truck_index_to_uuid_dict,
...@@ -275,6 +282,9 @@ def update_autodisp_dump(): ...@@ -275,6 +282,9 @@ def update_autodisp_dump():
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常") raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
print("here1")
print(set(dynamic_dump_list))
return set(dynamic_dump_list) return set(dynamic_dump_list)
......
...@@ -180,12 +180,22 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu ...@@ -180,12 +180,22 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
# 动态派车矿卡集合 # 动态派车矿卡集合
tra_para.truck_total_num = get_value("dynamic_truck_num") tra_para.truck_total_num = get_value("dynamic_truck_num")
print("truck.get_dump_hold_truck_num")
print(truck.get_dump_hold_truck_num())
print("truck.get_excavator_hold_truck_num")
print(truck.get_excavator_hold_truck_num())
# 目的地矿卡数量 # 目的地矿卡数量
tra_para.dump_hold_truck_num = truck.get_dump_hold_truck_num() tra_para.dump_hold_truck_num = truck.get_dump_hold_truck_num()
tra_para.excavator_hold_truck_num = truck.get_excavator_hold_truck_num() tra_para.excavator_hold_truck_num = truck.get_excavator_hold_truck_num()
# 计算逻辑道路因子 # 计算逻辑道路因子
print("here4")
print(num_of_dump)
for i in range(num_of_excavator): for i in range(num_of_excavator):
for j in range(num_of_dump): for j in range(num_of_dump):
# 查找挖机绑定的装载区, 卸载设备绑定的卸载区 # 查找挖机绑定的装载区, 卸载设备绑定的卸载区
......
...@@ -109,11 +109,13 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat ...@@ -109,11 +109,13 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
# 约束四:车流可行性约束 # 约束四:车流可行性约束
# 当前车流可行性约束 # 当前车流可行性约束
for i in range(row): for i in range(row):
print(excavator_hold_truck_num[i]) print("excavator_hold_truck_num")
print(excavator_hold_truck_num, i)
prob += (pulp.lpSum((np.array(var_x))[i]) <= excavator_hold_truck_num[i] * 220 + 0.001) prob += (pulp.lpSum((np.array(var_x))[i]) <= excavator_hold_truck_num[i] * 220 + 0.001)
for j in range(col): for j in range(col):
print(dump_hold_truck_num[j]) print(dump_hold_truck_num)
print(dump_hold_truck_num, j)
prob += (pulp.lpSum((np.array(var_y))[j]) <= dump_hold_truck_num[j] * 220 + 0.001) prob += (pulp.lpSum((np.array(var_y))[j]) <= dump_hold_truck_num[j] * 220 + 0.001)
...@@ -153,14 +155,21 @@ def traffic_flow_plan(truck): ...@@ -153,14 +155,21 @@ def traffic_flow_plan(truck):
unload_area_set = set(unload_area_list) unload_area_set = set(unload_area_list)
excavator_num = len(excavator_set) # excavator_num = len(excavator_set)
#
dump_num = len(dump_set) # dump_num = len(dump_set)
unload_area_num = len(unload_area_set) unload_area_num = len(unload_area_set)
load_area_num = len(load_area_set) load_area_num = len(load_area_set)
dump_num = get_value("dynamic_dump_num")
print("here5")
print(dump_num)
excavator_num = get_value("dynamic_excavator_num")
print("装载区数量:", load_area_num, "卸载区数量:", unload_area_num, "挖机数量:", excavator_num, "卸载设备数量:", dump_num) print("装载区数量:", load_area_num, "卸载区数量:", unload_area_num, "挖机数量:", excavator_num, "卸载设备数量:", dump_num)
# try: # try:
...@@ -190,6 +199,9 @@ def traffic_flow_plan(truck): ...@@ -190,6 +199,9 @@ def traffic_flow_plan(truck):
walk_time_to_excavator = traffic_programme_para.walk_time_to_excavator walk_time_to_excavator = traffic_programme_para.walk_time_to_excavator
walk_time_to_dump = traffic_programme_para.walk_time_to_dump walk_time_to_dump = traffic_programme_para.walk_time_to_dump
truck_total_num = traffic_programme_para.truck_total_num truck_total_num = traffic_programme_para.truck_total_num
print("here1212")
print(traffic_programme_para.dump_hold_truck_num)
print(traffic_programme_para.excavator_hold_truck_num)
dump_hold_truck_num = traffic_programme_para.dump_hold_truck_num dump_hold_truck_num = traffic_programme_para.dump_hold_truck_num
excavator_hold_truck_num = traffic_programme_para.excavator_hold_truck_num excavator_hold_truck_num = traffic_programme_para.excavator_hold_truck_num
......
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