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

代码优化

parent de8e769f
......@@ -16,9 +16,9 @@ class ExcavatorInfo(WalkManage):
# # 挖机集合
# 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()
# 装载时间
......@@ -141,7 +141,7 @@ class ExcavatorInfo(WalkManage):
logger.info("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()
logger.info("excavator_priority_coefficient")
logger.info(self.excavator_priority_coefficient)
......@@ -194,14 +194,17 @@ class ExcavatorInfo(WalkManage):
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.dynamic_excavator_set = set(update_autodisp_excavator())
self.period_walk_para_load()
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()
......
......@@ -132,6 +132,12 @@ class TruckInfo(WalkManage):
self.truck_current_task = {}
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:
try:
item = item.decode(encoding="utf-8")
......@@ -150,6 +156,23 @@ class TruckInfo(WalkManage):
logger.info("矿卡当前任务:")
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):
self.last_load_time = {}
......@@ -500,46 +523,51 @@ class TruckInfo(WalkManage):
def update_truck_material(self):
self.truck_material_bind = {}
self.update_truck_excavator_bind()
self.update_truck_dump_area_bind()
try:
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)
self.truck_material_bind = {}
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:
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
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
if truck_id in self.truck_dump_bind:
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
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"):
excavator_material_id = self.excavator.excavator_material[excavator_id]
excavator_index = self.excavator_uuid_to_index_dict[excavator_id]
print(truck_index, excavator_index)
if excavator_material_id != material:
self.excavator_material_bind_modify[truck_index][excavator_index] = 1000000
material = self.truck_material_bind[truck_id]
for excavator_id in get_value("dynamic_excavator_set"):
excavator_material_id = self.excavator.excavator_material[excavator_id]
excavator_index = self.excavator_uuid_to_index_dict[excavator_id]
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"):
dump_material_id = self.dump.dump_material[dump_id]
dump_index = self.dump_uuid_to_index_dict[dump_id]
if dump_material_id != material:
self.dump_material_bind_modify[truck_index][dump_index] = 1000000
for dump_id in get_value("dynamic_dump_set"):
dump_material_id = self.dump.dump_material[dump_id]
dump_index = self.dump_uuid_to_index_dict[dump_id]
if dump_material_id != material:
self.dump_material_bind_modify[truck_index][dump_index] = 1000000
except Exception as es:
logger.error(es)
logger.error("矿卡物料更新异常")
def update_truck_spec(self):
for truck_id in self.dynamic_truck_set:
......@@ -621,6 +649,54 @@ class TruckInfo(WalkManage):
# 设备优先级启用
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!")
# 装载周期参数
......@@ -631,39 +707,47 @@ class TruckInfo(WalkManage):
# 更新有效载重
self.update_truck_payload()
logger.info("距离成本规则")
logger.info(rule1)
logger.info("拥堵成本规则")
logger.info(rule2)
if rule1:
logger.info("距离成本规则未启用")
else:
logger.info("距离成本规则启用")
logger.info("车流规划规则")
logger.info(rule3 or rule4)
if rule2:
logger.info("拥堵成本规则未启用")
else:
logger.info("拥堵成本规则启用")
logger.info("生产组织规则")
logger.info(rule5)
if rule3 or rule4:
logger.info("车流规划规则未启用")
else:
logger.info("车流规划规则启用")
logger.info("设备优先级规则")
logger.info(rule6)
if not rule5:
if rule5:
logger.info("生产组织规则未启用")
else:
# 更新绑定关系
self.update_truck_dump_area_bind()
self.update_truck_excavator_bind()
# 更新禁止关系
self.update_truck_excavator_exclude()
logger.info("生产组织规划规则启用")
if not rule6:
if rule6:
logger.info("设备优先级规则未启用")
else:
# 更新矿卡调度优先级
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):
......
......@@ -174,6 +174,10 @@ class DeviceMap:
self.excavator_uuid_to_index_dict = device_map_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.excavator_index_to_uuid_dict = device_map_dict[
"excavator_index_to_uuid_dict"
......@@ -286,9 +290,9 @@ class WalkManage(DeviceMap):
def reset(self):
dynamic_excavator_num = get_value("dynamic_excavator_num")
dynamic_dump_num = get_value("dynamic_dump_num")
park_num = get_value("park_num")
# dynamic_excavator_num
# dynamic_dump_num
# park_num
# 路网真实距离
self.walk_time_to_excavator = np.full(
......@@ -492,6 +496,15 @@ def period_para_update():
global_dict["dynamic_dump_num"] = dynamic_dump_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_park_to_excavator"] = walk_manage.distance_park_to_excavator
global_dict["distance_to_dump"] = walk_manage.distance_to_dump
......@@ -509,3 +522,8 @@ def period_para_update():
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.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):
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_map_para_load()
self.controller.period_update(self.dump, self.excavator, self.truck)
# 计算行驶成本前,更新路网速度信息
self.lane.lane_speed_generate()
......@@ -173,6 +183,8 @@ class PathPlanner(WalkManage):
logger.error(es)
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_park_to_excavator = np.zeros_like(get_value("distance_park_to_excavator"))
......@@ -203,6 +215,7 @@ class PathPlanner(WalkManage):
unload_area_index = self.dump_index_to_unload_area_index_dict[i]
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_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():
self.excavator = excavator
self.truck = truck
def period_update(self, dump, excavator, truck):
# 设备类
self.dump = dump
self.excavator = excavator
self.truck = truck
def weighted_walk_cost(self):
dynamic_dump_num = get_value("dynamic_dump_num")
dynamic_excavator_num = get_value("dynamic_excavator_num")
......@@ -54,9 +60,13 @@ class PriorityController():
excavator_material_priority[excavator_inedx]
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
......@@ -67,12 +77,20 @@ class PriorityController():
dynamic_excavator_set = get_value("dynamic_excavator_set")
walk_weight = np.zeros((dynamic_dump_num, dynamic_excavator_num))
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
print("here")
print(dynamic_dump_set)
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_weight[dump_index][excavator_inedx] += 1000000
except Exception as es:
logger.info(es)
logger.info("error-12")
return walk_weight
......
This diff is collapsed.
......@@ -138,6 +138,9 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
except Exception as es:
logger.warning(es)
print("static_excavator_uuid_to_index_dict")
print(excavator_uuid_to_index_dict)
return {
"excavator_uuid_to_index_dict": excavator_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):
truck_index_to_uuid_dict[truck_num] = truck_id
truck_num = truck_num + 1
print(dynamic_truck_set)
print("static-truck_uuid_to_index_dict")
print(truck_uuid_to_index_dict)
return {
"truck_uuid_to_index_dict": truck_uuid_to_index_dict,
"truck_index_to_uuid_dict": truck_index_to_uuid_dict,
......@@ -275,6 +282,9 @@ def update_autodisp_dump():
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es:
logger.warning(es)
print("here1")
print(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
# 动态派车矿卡集合
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.excavator_hold_truck_num = truck.get_excavator_hold_truck_num()
# 计算逻辑道路因子
print("here4")
print(num_of_dump)
for i in range(num_of_excavator):
for j in range(num_of_dump):
# 查找挖机绑定的装载区, 卸载设备绑定的卸载区
......
......@@ -109,11 +109,13 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
# 约束四:车流可行性约束
# 当前车流可行性约束
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)
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)
......@@ -153,14 +155,21 @@ def traffic_flow_plan(truck):
unload_area_set = set(unload_area_list)
excavator_num = len(excavator_set)
dump_num = len(dump_set)
# excavator_num = len(excavator_set)
#
# dump_num = len(dump_set)
unload_area_num = len(unload_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)
# try:
......@@ -190,6 +199,9 @@ def traffic_flow_plan(truck):
walk_time_to_excavator = traffic_programme_para.walk_time_to_excavator
walk_time_to_dump = traffic_programme_para.walk_time_to_dump
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
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