Commit 435b229f authored by 张晓彤's avatar 张晓彤

修复索引溢出异常

parent 2f1f9dca
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
# @Time : 2021/8/24 11:28 # @Time : 2021/8/24 11:28
# @Author : Opfer # @Author : Opfer
# @Site : # @Site :
# @File : truck.py # @File : truck.py
# @Software: PyCharm # @Software: PyCharm
from para_config import * from para_config import *
...@@ -132,11 +132,12 @@ class TruckInfo(WalkManage): ...@@ -132,11 +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("tast_truck_set")
print(get_value("dynamic_truck_set")) ## 两个 # print(get_value("dynamic_truck_set")) ## 两个
#
# print(self.dynamic_truck_set)
# print(self.truck_uuid_to_index_dict)
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:
...@@ -156,6 +157,11 @@ class TruckInfo(WalkManage): ...@@ -156,6 +157,11 @@ class TruckInfo(WalkManage):
logger.info("矿卡当前任务:") logger.info("矿卡当前任务:")
logger.info(self.truck_current_task) logger.info(self.truck_current_task)
# logger.info("device_name_set,大小")
# logger.info(len(device_name_set))
# logger.info("device_name_set")
# logger.info(device_name_set)
# self.truck_current_task = {} # self.truck_current_task = {}
# #
# dynamic_truck_set = get_value("dynamic_truck_set") # dynamic_truck_set = get_value("dynamic_truck_set")
......
...@@ -458,342 +458,404 @@ class Dispatcher(WalkManage): ...@@ -458,342 +458,404 @@ class Dispatcher(WalkManage):
def truck_schedule(self, truck_id): def truck_schedule(self, truck_id):
rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first().disabled rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first().disabled
rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first().disabled rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first().disabled
# cost_to_excavator, cost_to_dump, cost_park_to_excavator = self.path.walk_cost() # cost_to_excavator, cost_to_dump, cost_park_to_excavator = self.path.walk_cost()
# try:
excavator_priority_coefficient = excavator.excavator_priority_coefficient
excavator_priority_coefficient = excavator.excavator_priority_coefficient excavator_material_priority = excavator.excavator_material_priority
excavator_material_priority = excavator.excavator_material_priority
# 矿卡对应序号
truck_index = truck.truck_uuid_to_index_dict[truck_id]
# 矿卡行程
trip = truck.get_truck_current_trip()[truck_index]
# 矿卡当前任务
task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[truck_index]]
# 挖机装载时间
loading_time = excavator.get_loading_time()
# 路网信息
walk_time_park_to_excavator = walk_manage.get_walk_time_park_to_excavator() \
* (empty_speed / float(truck.empty_speed[truck_id]))
if truck_id not in self.group.dispatch_truck_group:
logger.error("无该矿卡")
return -1
# 矿卡调度分组
group_id = self.group.dispatch_truck_group[truck_id]
dynamic_dump_num = dump.get_dump_num() # 矿卡对应序号
dynamic_excavator_num = excavator.get_excavator_num() truck_index = truck.truck_uuid_to_index_dict[truck_id]
# 矿卡行程
trip = truck.get_truck_current_trip()[truck_index]
# 矿卡当前任务
task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[truck_index]]
# 挖机装载时间
loading_time = excavator.get_loading_time()
# 路网信息
walk_time_park_to_excavator = walk_manage.get_walk_time_park_to_excavator() \
* (empty_speed / float(truck.empty_speed[truck_id]))
now = float( if truck_id not in self.group.dispatch_truck_group:
(datetime.now() - self.start_time) logger.error("无该矿卡")
/ timedelta(hours=0, minutes=1, seconds=0)) return -1
# 矿卡调度分组
group_id = self.group.dispatch_truck_group[truck_id]
logger.info("==========================================================") dynamic_dump_num = dump.get_dump_num()
logger.info(f"调度矿卡 {truck_id} {truck_index} {truck_uuid_to_name_dict[truck_id]}") dynamic_excavator_num = excavator.get_excavator_num()
target = 0 now = float(
(datetime.now() - self.start_time)
/ timedelta(hours=0, minutes=1, seconds=0))
if task == -2: logger.info("==========================================================")
try: logger.info(f"调度矿卡 {truck_id} {truck_index} {truck_uuid_to_name_dict[truck_id]}")
logger.info("矿卡状态:矿卡启动或故障恢复")
logger.info("矿卡行程:无")
logger.info(f"涉及挖机:{list(excavator.excavator_uuid_to_index_dict.keys())}")
logger.info(
f"行程时间:{(np.maximum(self.sim_excavator_ava_time, now + walk_time_park_to_excavator[0, :]) + loading_time - now)}")
logger.info(f"行驶时间:{walk_time_park_to_excavator[0, :] + loading_time}")
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("挖机物料优先级")
logger.info(excavator_material_priority)
logger.info("挖机设备优先级")
logger.info(excavator_priority_coefficient)
logger.info("分组车流")
logger.info(self.group.group_actual_goto_dump_traffic_flow[group_id])
logger.info(self.group.group_opt_goto_dump_traffic_flow[group_id])
except Exception as es: target = 0
logger.error(f"矿卡{truck_id}状态不匹配")
logger.error(es)
# 矿卡是否存在绑定挖机 if task == -2:
if truck_id in truck.truck_excavator_bind: try:
target = excavator.excavator_uuid_to_index_dict[truck.truck_excavator_bind[truck_id]] logger.info("矿卡状态:矿卡启动或故障恢复")
else: logger.info("矿卡行程:无")
logger.info(f"涉及挖机:{list(excavator.excavator_uuid_to_index_dict.keys())}")
logger.info(
f"行程时间:{(np.maximum(self.sim_excavator_ava_time, now + walk_time_park_to_excavator[0, :]) + loading_time - now)}")
logger.info(f"行驶时间:{walk_time_park_to_excavator[0, :] + loading_time}")
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("挖机物料优先级")
logger.info(excavator_material_priority)
logger.info("挖机设备优先级")
logger.info(excavator_priority_coefficient)
logger.info("分组车流")
logger.info(self.group.group_actual_goto_dump_traffic_flow[group_id])
logger.info(self.group.group_opt_goto_dump_traffic_flow[group_id])
transport_value = self.group.group_park_to_excavator[group_id] except Exception as es:
logger.error(f"矿卡{truck_id}状态不匹配")
logger.error(es)
excavator_exclude_modify = self.group.group_excavator_exclude_modify[truck_id] # 矿卡是否存在绑定挖机
excavator_material_bind_modify = self.group.group_excavator_material_bind_modify[truck_id] try:
if truck_id in truck.truck_excavator_bind:
target = excavator.excavator_uuid_to_index_dict[truck.truck_excavator_bind[truck_id]]
else:
logger.info("transport_value") transport_value = self.group.group_park_to_excavator[group_id]
# logger.info(transport_value)
# target = np.argmin(
# transport_value
# + truck.excavator_exclude_modify[truck_index]
# + truck.excavator_material_bind_modify[truck_index])
logger.info(transport_value)
target = np.argmin(
transport_value
+ excavator_exclude_modify)
# + excavator_material_bind_modify)
target = self.excavator_uuid_to_index_dict[self.group.group_excavator_index_to_uuid_dict[group_id][target]]
logger.info(f"目的地:{excavator.excavator_index_to_uuid_dict[target]}") excavator_exclude_modify = self.group.group_excavator_exclude_modify[truck_id]
excavator_material_bind_modify = self.group.group_excavator_material_bind_modify[truck_id]
if task in [0, 1, 2]: logger.info("transport_value")
try: # logger.info(transport_value)
logger.info("矿卡状态:矿卡空载") # target = np.argmin(
logger.info(f"涉及卸载设备:{list(dump.dump_uuid_to_index_dict.keys())}") # transport_value
except Exception as es: # + truck.excavator_exclude_modify[truck_index]
logger.error(f"矿卡{truck_id}状态不匹配") # + truck.excavator_material_bind_modify[truck_index])
logger.error(es) logger.info(transport_value)
target = np.argmin(
transport_value
+ excavator_exclude_modify)
# + excavator_material_bind_modify)
target = self.excavator_uuid_to_index_dict[self.group.group_excavator_index_to_uuid_dict[group_id][target]]
try: logger.info(f"目的地:{excavator.excavator_index_to_uuid_dict[target]}")
assert np.array(self.actual_goto_dump_traffic_flow).shape == ( except Exception as es:
dynamic_excavator_num, logger.error("error07")
dynamic_dump_num,) logger.error(es)
assert np.array(self.opt_goto_dump_traffic_flow).shape == ( if task in [0, 1, 2]:
dynamic_excavator_num, try:
dynamic_dump_num,) logger.info("矿卡状态:矿卡空载")
except Exception as es: logger.info(f"涉及卸载设备:{list(dump.dump_uuid_to_index_dict.keys())}")
logger.warning(es) except Exception as es:
self.actual_goto_dump_traffic_flow = np.array( logger.error(f"矿卡{truck_id}状态不匹配")
self.actual_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num)) logger.error(es)
self.opt_goto_dump_traffic_flow = np.array(
self.opt_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num))
self.actual_goto_dump_traffic_flow = np.array(self.actual_goto_dump_traffic_flow) try:
self.opt_goto_dump_traffic_flow = np.array(self.opt_goto_dump_traffic_flow) assert np.array(self.actual_goto_dump_traffic_flow).shape == (
dynamic_excavator_num,
dynamic_dump_num,)
assert np.array(self.opt_goto_dump_traffic_flow).shape == (
dynamic_excavator_num,
dynamic_dump_num,)
except Exception as es:
logger.warning(es)
self.actual_goto_dump_traffic_flow = np.array(
self.actual_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num))
self.opt_goto_dump_traffic_flow = np.array(
self.opt_goto_dump_traffic_flow).reshape((dynamic_excavator_num, dynamic_dump_num))
try: self.actual_goto_dump_traffic_flow = np.array(self.actual_goto_dump_traffic_flow)
logger.info("挖机id:") self.opt_goto_dump_traffic_flow = np.array(self.opt_goto_dump_traffic_flow)
logger.info(excavator.excavator_uuid_to_index_dict)
logger.info("卸点id:")
logger.info(dump.dump_uuid_to_index_dict)
logger.info(f"卸载点实际车流:")
logger.info(self.actual_goto_dump_traffic_flow)
logger.info(f"卸载点理想车流:")
logger.info(self.opt_goto_dump_traffic_flow)
logger.info("卸载点实际车流")
logger.info(self.actual_goto_dump_traffic_flow[int(trip[1]), :])
logger.info("卸载点理想车流")
logger.info(self.opt_goto_dump_traffic_flow[int(trip[1]), :])
logger.info("空载trip")
logger.info(trip)
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("驶往卸点的运输成本")
logger.info(self.cost_to_dump)
logger.info("卸点物料修正")
logger.info(truck.dump_material_bind_modify)
except Exception as es: try:
logger.info("车流及修正因子") logger.info("挖机id:")
logger.info(es) logger.info(excavator.excavator_uuid_to_index_dict)
logger.info("卸点id:")
if truck_id in truck.truck_dump_bind: logger.info(dump.dump_uuid_to_index_dict)
bind_unload_area_id = truck.truck_dump_bind[truck_id] logger.info(f"卸载点实际车流:")
for key, value in dump.dump_index_to_unload_area_index_dict.items(): logger.info(self.actual_goto_dump_traffic_flow)
if value == unload_area_uuid_to_index_dict[bind_unload_area_id]: logger.info(f"卸载点理想车流:")
target = key logger.info(self.opt_goto_dump_traffic_flow)
break
else: logger.info("卸载点实际车流")
excavator_index = int(trip[1]) logger.info(self.actual_goto_dump_traffic_flow[int(trip[1]), :])
excavator_id = self.excavator_index_to_uuid_dict[excavator_index] logger.info("卸载点理想车流")
logger.info(self.opt_goto_dump_traffic_flow[int(trip[1]), :])
logger.info("空载trip")
logger.info(trip)
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("驶往卸点的运输成本")
logger.info(self.cost_to_dump)
logger.info("卸点物料修正")
logger.info(truck.dump_material_bind_modify)
print(self.group.group_excavator_uuid_to_index_dict[group_id]) except Exception as es:
logger.info("车流及修正因子")
logger.info(es)
group_excavator_index = self.group.group_excavator_uuid_to_index_dict[group_id][excavator_id] if truck_id in truck.truck_dump_bind:
bind_unload_area_id = truck.truck_dump_bind[truck_id]
for key, value in dump.dump_index_to_unload_area_index_dict.items():
if value == unload_area_uuid_to_index_dict[bind_unload_area_id]:
target = key
break
if rule3 and rule4:
# transport_value = self.cost_to_dump[:, int(trip[1])]
transport_value = self.group.group_walk_to_dump_cost[group_excavator_index, :]
else: else:
try:
excavator_index = int(trip[1])
excavator_id = self.excavator_index_to_uuid_dict[excavator_index]
print(self.group.group_excavator_uuid_to_index_dict[group_id])
group_excavator_index = self.group.group_excavator_uuid_to_index_dict[group_id][excavator_id]
if rule3 and rule4:
try:
# ga changed
# transport_value = self.cost_to_dump[:, int(trip[1])]
# transport_value = self.group.group_walk_to_dump_cost[group_excavator_index]
transport_value = self.group.group_walk_to_dump_cost[group_id]
except Exception as es:
logger.error("error10")
logger.error(es)
logger.error("group_id")
logger.error(group_id)
logger.error('self.group.group_walk_to_dump_cost')
logger.error(self.group.group_walk_to_dump_cost)
logger.error('self.group.group_walk_to_excavator_cost')
logger.error(self.group.group_walk_to_excavator_cost)
logger.error('self.group.group_excavator_uuid_to_index_dict[group_id][excavator_id]')
logger.error(self.group.group_excavator_uuid_to_index_dict[group_id][excavator_id])
logger.error("self.group.group_excavator_uuid_to_index_dict[group_id]")
logger.error(self.group.group_excavator_uuid_to_index_dict[group_id])
else:
try:
# 提取group actual traffic flow
group_actual_goto_dump_traffic_flow = self.group.group_actual_goto_dump_traffic_flow[group_id]
# 提取group actual traffic flow
group_opt_goto_dump_traffic_flow = self.group.group_opt_goto_dump_traffic_flow[group_id]
logger.info("驶往卸点分组车流")
logger.info(group_actual_goto_dump_traffic_flow)
logger.info(group_opt_goto_dump_traffic_flow)
try:
transport_value = (group_actual_goto_dump_traffic_flow[group_excavator_index, :] + 0.001) \
/ (group_opt_goto_dump_traffic_flow[group_excavator_index, :] + 0.001)
except Exception as es:
logger.error("error09")
logger.error(es)
except Exception as es:
logger.error("error11")
logger.error(es)
# transport_value = (self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) \
# / (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001)
logger.info("transport_value")
logger.info(transport_value)
logger.info("dump_material_bind_modify")
logger.info(truck.dump_material_bind_modify[truck_index])
try:
dump_material_bind_modify = self.group.group_dump_material_bind_modify[truck_id]
except Exception as es:
logger.error("error13")
logger.error(es)
logger.error("self.group.group_dump_material_bind_modify")
logger.error(self.group.group_dump_material_bind_modify)
try:
target = np.argmin(transport_value.T + dump_material_bind_modify)
target = self.dump_uuid_to_index_dict[self.group.group_dump_index_to_uuid_dict[group_id][target]]
logger.info("target")
logger.info(target)
except Exception as es:
logger.error("error12")
logger.error(es)
logger.error("target")
logger.error(target)
logger.error("transport_value")
logger.error(transport_value)
logger.error(type(transport_value))
logger.error(transport_value.T)
logger.error("dump_material_bind_modify")
logger.error(dump_material_bind_modify)
logger.error("self.group.group_dump_index_to_uuid_dict")
logger.error(self.group.group_dump_index_to_uuid_dict)
logger.error("self.group.group_dump_index_to_uuid_dict[group_id]")
logger.error(self.group.group_dump_index_to_uuid_dict[group_id])
try:
logger.info("车流比:")
logger.info((self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) \
/ (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001))
except Exception as es:
logger.error("error08")
logger.error(es)
logger.info(f"目的地:{dump.dump_index_to_uuid_dict[target]}")
except Exception as es:
logger.error("error06")
logger.error(es)
# 提取group actual traffic flow
group_actual_goto_dump_traffic_flow = self.group.group_actual_goto_dump_traffic_flow[group_id]
# 提取group actual traffic flow
group_opt_goto_dump_traffic_flow = self.group.group_opt_goto_dump_traffic_flow[group_id]
logger.info("驶往卸点分组车流")
logger.info(group_actual_goto_dump_traffic_flow)
logger.info(group_opt_goto_dump_traffic_flow)
transport_value = (group_actual_goto_dump_traffic_flow[group_excavator_index, :] + 0.001) \
/ (group_opt_goto_dump_traffic_flow[group_excavator_index, :] + 0.001)
# transport_value = (self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) \
# / (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001)
logger.info("transport_value")
logger.info(transport_value)
logger.info("dump_material_bind_modify")
logger.info(truck.dump_material_bind_modify[truck_index])
dump_material_bind_modify = self.group.group_dump_material_bind_modify[truck_id]
target = np.argmin(
transport_value
+ dump_material_bind_modify)
target = self.dump_uuid_to_index_dict[self.group.group_dump_index_to_uuid_dict[group_id][target]]
logger.info("车流比:")
logger.info((self.actual_goto_dump_traffic_flow[int(trip[1]), :] + 0.001) \
/ (self.opt_goto_dump_traffic_flow[int(trip[1]), :] + 0.001))
logger.info(f"目的地:{dump.dump_index_to_uuid_dict[target]}")
elif task in [3, 4, 5]:
try:
logger.info("矿卡状态:矿卡重载")
logger.info(f"涉及挖机设备:{list(excavator.excavator_uuid_to_index_dict.keys())}")
except Exception as es:
logger.error(f"矿卡{truck_id}状态不匹配")
logger.error(es)
# 读取车流信息 elif task in [3, 4, 5]:
try:
assert np.array(self.actual_goto_excavator_traffic_flow).shape == (
dynamic_dump_num,
dynamic_excavator_num,)
assert np.array(self.opt_goto_excavator_traffic_flow).shape == (
dynamic_dump_num,
dynamic_excavator_num,)
except Exception as es: try:
logger.warning(es) logger.info("矿卡状态:矿卡重载")
self.actual_goto_excavator_traffic_flow = np.array( logger.info(f"涉及挖机设备:{list(excavator.excavator_uuid_to_index_dict.keys())}")
self.actual_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num)) except Exception as es:
self.opt_goto_excavator_traffic_flow = np.array( logger.error(f"矿卡{truck_id}状态不匹配")
self.opt_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num)) logger.error(es)
# 读取车流信息
try:
assert np.array(self.actual_goto_excavator_traffic_flow).shape == (
dynamic_dump_num,
dynamic_excavator_num,)
assert np.array(self.opt_goto_excavator_traffic_flow).shape == (
dynamic_dump_num,
dynamic_excavator_num,)
# 不知道为什么,偶尔变成了list except Exception as es:
self.actual_goto_excavator_traffic_flow = np.array(self.actual_goto_excavator_traffic_flow) logger.warning(es)
self.opt_goto_excavator_traffic_flow = np.array(self.opt_goto_excavator_traffic_flow) self.actual_goto_excavator_traffic_flow = np.array(
self.actual_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num))
self.opt_goto_excavator_traffic_flow = np.array(
self.opt_goto_excavator_traffic_flow).reshape((dynamic_dump_num, dynamic_excavator_num))
try:
logger.info("挖机id:")
logger.info(excavator.excavator_uuid_to_index_dict)
logger.info("卸点id:")
logger.info(dump.dump_uuid_to_index_dict)
logger.info(f"挖机实际车流:")
logger.info(self.actual_goto_excavator_traffic_flow)
logger.info(f"挖机理想车流:")
logger.info(self.opt_goto_excavator_traffic_flow)
logger.info("重载trip")
logger.info(trip)
# 不知道为什么,偶尔变成了list
self.actual_goto_excavator_traffic_flow = np.array(self.actual_goto_excavator_traffic_flow)
self.opt_goto_excavator_traffic_flow = np.array(self.opt_goto_excavator_traffic_flow)
try: try:
logger.info("挖机实际车流_行") logger.info("挖机id:")
logger.info(self.actual_goto_excavator_traffic_flow[trip[1], :]) logger.info(excavator.excavator_uuid_to_index_dict)
logger.info("挖机理想车流_行") logger.info("卸点id:")
logger.info(self.opt_goto_excavator_traffic_flow[trip[1], :]) logger.info(dump.dump_uuid_to_index_dict)
except Exception as es: logger.info(f"挖机实际车流:")
logger.info("trip出错") logger.info(self.actual_goto_excavator_traffic_flow)
logger.info(f"挖机理想车流:")
logger.info(self.opt_goto_excavator_traffic_flow)
logger.info("重载trip")
logger.info(trip) logger.info(trip)
logger.info(es)
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("驶往挖机的运输成本")
logger.info(self.cost_to_excavator)
logger.info("挖机物料修正")
logger.info(truck.excavator_material_bind_modify)
logger.info("挖机优先级修正")
logger.info(excavator.excavator_priority_coefficient)
except Exception as es:
logger.info("车流及修正因子")
logger.info(es)
# 计算目的地 try:
try: logger.info("挖机实际车流_行")
if truck_id in truck.truck_excavator_bind: logger.info(self.actual_goto_excavator_traffic_flow[trip[1], :])
target = excavator.excavator_uuid_to_index_dict[truck.truck_excavator_bind[truck_id]] logger.info("挖机理想车流_行")
logger.info("矿卡已绑定挖机") logger.info(self.opt_goto_excavator_traffic_flow[trip[1], :])
else: except Exception as es:
logger.info("cost_to_excavator") logger.info("trip出错")
logger.info(trip)
logger.info(es)
logger.info("物料类型")
if truck_id in truck.truck_material_bind:
logger.info(truck.truck_material_bind[truck_id])
logger.info("驶往挖机的运输成本")
logger.info(self.cost_to_excavator) logger.info(self.cost_to_excavator)
logger.info("挖机物料修正")
logger.info(truck.excavator_material_bind_modify)
logger.info("挖机优先级修正")
logger.info(excavator.excavator_priority_coefficient)
except Exception as es:
logger.info("车流及修正因子")
logger.info(es)
dump_index = int(trip[1]) # 计算目的地
dump_id = self.dump_uuid_to_index_dict[dump_index] try:
if truck_id in truck.truck_excavator_bind:
if rule3 and rule4: target = excavator.excavator_uuid_to_index_dict[truck.truck_excavator_bind[truck_id]]
# transport_value = self.cost_to_excavator[int(trip[1]), :] logger.info("矿卡已绑定挖机")
transport_value = self.group.group_walk_to_excavator_cost[dump_index, :]
else: else:
logger.info("cost_to_excavator")
logger.info(self.cost_to_excavator)
group_dump_index = self.group.group_dump_uuid_to_index_dict[group_id][dump_id] dump_index = int(trip[1])
dump_id = self.dump_uuid_to_index_dict[dump_index]
# 提取group actual traffic flow if rule3 and rule4:
group_actual_goto_excavator_traffic_flow = self.group.group_actual_goto_excavator_traffic_flow[ # transport_value = self.cost_to_excavator[int(trip[1]), :]
group_id] transport_value = self.group.group_walk_to_excavator_cost[group_id]
else:
# 提取group actual traffic flow group_dump_index = self.group.group_dump_uuid_to_index_dict[group_id][dump_id]
group_opt_goto_excavator_traffic_flow = self.group.group_opt_goto_excavator_traffic_flow[
group_id]
logger.info("驶往挖机分组车流") # 提取group actual traffic flow
logger.info(group_actual_goto_excavator_traffic_flow) group_actual_goto_excavator_traffic_flow = self.group.group_actual_goto_excavator_traffic_flow[
logger.info(group_opt_goto_excavator_traffic_flow) group_id]
transport_value = (group_actual_goto_excavator_traffic_flow[group_dump_index, :] + 0.001) \ # 提取group actual traffic flow
/ (group_opt_goto_excavator_traffic_flow[group_dump_index, :] + 0.001) group_opt_goto_excavator_traffic_flow = self.group.group_opt_goto_excavator_traffic_flow[
group_id]
logger.info("驶往挖机分组车流")
logger.info(group_actual_goto_excavator_traffic_flow)
logger.info(group_opt_goto_excavator_traffic_flow)
# transport_value = (self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001) \ transport_value = (group_actual_goto_excavator_traffic_flow[group_dump_index, :] + 0.001) \
# / (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001) / (group_opt_goto_excavator_traffic_flow[group_dump_index, :] + 0.001)
logger.info("transport_value")
logger.info(transport_value)
# target = np.argmin(transport_value
# + truck.excavator_exclude_modify[truck_index]
# + truck.excavator_material_bind_modify[truck_index])
excavator_exclude_modify = self.group.group_excavator_exclude_modify[truck_id] # transport_value = (self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001) \
excavator_material_bind_modify = self.group.group_excavator_material_bind_modify[truck_id] # / (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001)
logger.info("transport_value")
logger.info(transport_value)
logger.info(transport_value) # target = np.argmin(transport_value
target = np.argmin( # + truck.excavator_exclude_modify[truck_index]
transport_value # + truck.excavator_material_bind_modify[truck_index])
+ excavator_exclude_modify)
# + excavator_material_bind_modify)
target = self.excavator_uuid_to_index_dict[self.group.group_excavator_index_to_uuid_dict[target]] excavator_exclude_modify = self.group.group_excavator_exclude_modify[truck_id]
except Exception as es: excavator_material_bind_modify = self.group.group_excavator_material_bind_modify[truck_id]
logger.info("trip出错1")
logger.info(es)
logger.info(transport_value)
target = np.argmin(
transport_value.T
+ excavator_exclude_modify)
# + excavator_material_bind_modify)
try: target = self.excavator_uuid_to_index_dict[self.group.group_excavator_index_to_uuid_dict[target]]
logger.info("车流比:") except Exception as es:
logger.info( logger.info("trip出错1")
(self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001) logger.info(es)
/ (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001))
except Exception as es:
logger.info("trip出错2")
logger.info(es)
logger.info(f"目的地:{excavator.excavator_index_to_uuid_dict[target]}")
logger.info("==========================================================") try:
logger.info("车流比:")
logger.info(
(self.actual_goto_excavator_traffic_flow[trip[1], :] + 0.001)
/ (self.opt_goto_excavator_traffic_flow[trip[1], :] + 0.001))
except Exception as es:
logger.info("trip出错2")
logger.info(es)
logger.info(f"目的地:{excavator.excavator_index_to_uuid_dict[target]}")
return target logger.info("==========================================================")
print(target)
# except Exception as es:
# logger.error("truck_schedule,error")
# logger.error(es)
return target
def schedule_construct(self): def schedule_construct(self):
...@@ -848,25 +910,56 @@ class Dispatcher(WalkManage): ...@@ -848,25 +910,56 @@ class Dispatcher(WalkManage):
if len(Seq[truck_index]) > 0: if len(Seq[truck_index]) > 0:
# try: # try:
# 获取矿卡id # 获取矿卡id
truck_id = truck.truck_index_to_uuid_dict[truck_index] try:
truck_id = truck.truck_index_to_uuid_dict[truck_index]
except Exception as es:
logger.error('error01')
logger.error(es)
# 判断矿卡是否禁用 # 判断矿卡是否禁用
if truck_id in truck.update_truck_disable_list(): if truck_id in truck.update_truck_disable_list():
continue continue
try:
# 获取矿卡当前任务 # 获取矿卡当前任务
task = truck_current_task[truck.truck_index_to_uuid_dict[truck_index]] task = truck_current_task[truck.truck_index_to_uuid_dict[truck_index]]
except Exception as es:
logger.error('error02')
logger.error(es)
try:
# 矿卡结束当前派车计划后的目的地 # 矿卡结束当前派车计划后的目的地
end_eq_index = truck_current_trip[truck_index][1] end_eq_index = truck_current_trip[truck_index][1]
except Exception as es:
logger.error('error03')
logger.error(es)
try:
# 调用调度函数,得到最优目的地序号 # 调用调度函数,得到最优目的地序号
target_eq_index = self.truck_schedule(truck.truck_index_to_uuid_dict[truck_index]) target_eq_index = self.truck_schedule(truck.truck_index_to_uuid_dict[truck_index])
# 写入Seq序列 except Exception as es:
Seq[truck_index][1] = target_eq_index logger.error('error04')
logger.error(es)
logger.error("truck_index,uuid")
logger.error(truck_index)
logger.error(truck.truck_index_to_uuid_dict[truck_index])
# logger.("target_eq_index")
# logger.error(target_eq_index)
try:
# 写入Seq序列
Seq[truck_index][1] = target_eq_index
except Exception as es:
logger.error('error05')
logger.error(es)
logger.error("target_eq_index")
logger.error(target_eq_index)
logger.error("target_eq_index,type")
logger.error(type(target_eq_index))
# except Exception as es:
# logger.error("truck,task,end_eq_index,error")
# logger.error(es)
try: try:
group_id = self.group.dispatch_truck_group[truck_id] group_id = self.group.dispatch_truck_group[truck_id]
except Exception as es: except Exception as es:
...@@ -913,12 +1006,16 @@ class Dispatcher(WalkManage): ...@@ -913,12 +1006,16 @@ class Dispatcher(WalkManage):
for i in range(len(Seq)): for i in range(len(Seq)):
try: try:
try:
truck_id = truck.truck_index_to_uuid_dict[i]
group_id = self.group.dispatch_truck_group[truck_id]
truck_id = truck.truck_index_to_uuid_dict[i] record = {"truckId": truck.truck_index_to_uuid_dict[i]}
group_id = self.group.dispatch_truck_group[truck_id] task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[i]]
except Exception as es:
logger.error("truck_id,group_id,record,task出错")
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: if task in empty_task_set:
item = ( item = (
session_mysql.query(Dispatch) session_mysql.query(Dispatch)
...@@ -954,23 +1051,47 @@ class Dispatcher(WalkManage): ...@@ -954,23 +1051,47 @@ class Dispatcher(WalkManage):
record["createtime"] = item.createtime.strftime( record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p") "%b %d, %Y %I:%M:%S %p")
elif task == -2: elif task == -2:
item = ( try:
session_mysql.query(Dispatch) try:
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]], group_id=group_id, item = (
isauto=1, isdeleted=0,).first()) session_mysql.query(Dispatch)
record["exactorId"] = item.exactor_id .filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]],
record["dumpId"] = item.dump_id # truck_id=truck_id,
record["loadAreaId"] = item.load_area_id group_id=group_id,
record["unloadAreaId"] = item.unload_area_id isauto=1, isdeleted=0, ).first())
record["dispatchId"] = item.id except Exception as es:
record["isdeleted"] = False logger.error("task-2,error01")
record["creator"] = item.creator logger.error(es)
record["createtime"] = item.createtime.strftime( logger.error('excavator.excavator_index_to_uuid_dict[Seq[i][1]]')
"%b %d, %Y %I:%M:%S %p") logger.error(excavator.excavator_index_to_uuid_dict)
logger.error("seq[i]")
logger.error(Seq[i])
logger.error("group_id")
logger.error(group_id)
try:
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")
except Exception as es:
logger.error("task-2,error02")
logger.error(es)
except Exception as es :
logger.error("task为-2时error")
logger.error(es)
else: else:
pass pass
redis5.set(truck.truck_index_to_uuid_dict[i], str(json.dumps(record))) redis5.set(truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
except Exception as es: except Exception as es:
logger.error("调度结果写入异常-redis写入异常") logger.error("调度结果写入异常-redis写入异常")
logger.error(f"调度结果:{Seq}") logger.error(f"调度结果:{Seq}")
...@@ -1316,46 +1437,46 @@ class Group(WalkManage): ...@@ -1316,46 +1437,46 @@ class Group(WalkManage):
# 下面三个函数保证程序定期执行,不用管他 # 下面三个函数保证程序定期执行,不用管他
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:
raise Exception("无动态派车计划可用")
return
if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡")
return
# para_process(dispatcher)
#
# state_process(dispatcher)
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
# 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
#
# # 周期更新
# dispatcher.para_period_update()
# 周期更新
dispatcher.dispatcher_period_update()
# 参数重置
dispatcher.sim_para_reset()
# try: period_para_update()
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0:
raise Exception("无动态派车计划可用")
return
if get_value("dynamic_truck_num") == 0:
raise Exception("无动态派车可用矿卡")
return
# para_process(dispatcher)
#
# state_process(dispatcher)
# 清空数据库缓存
session_mysql.commit()
session_mysql.flush()
# 清空数据库缓存
session_postgre.commit()
session_postgre.flush()
#
# # 周期更新
# dispatcher.para_period_update()
# 周期更新
dispatcher.dispatcher_period_update()
# 调度计算 # 参数重置
dispatcher.schedule_construct() dispatcher.sim_para_reset()
except Exception as es: # try:
logger.error("更新不及时")
logger.error(es) # 调度计算
dispatcher.schedule_construct()
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger.info("#####################################周期更新结束#####################################") logger.info("#####################################周期更新结束#####################################")
......
...@@ -9,12 +9,22 @@ ...@@ -9,12 +9,22 @@
# 存储数据库表结构 # 存储数据库表结构
from settings import *
from sqlalchemy import Column, create_engine from sqlalchemy import Column, create_engine
from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN
from sqlalchemy.orm import sessionmaker, scoped_session from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
from urllib.parse import quote from urllib.parse import quote
import json
json_file = "config.json"
with open(json_file) as f:
mysql_config = json.load(f)["mysql"]
with open(json_file) as f:
postgre_config = json.load(f)["postgresql"]
# 创建对象的基类: # 创建对象的基类:
...@@ -30,33 +40,6 @@ engine_postgre = create_engine( ...@@ -30,33 +40,6 @@ engine_postgre = create_engine(
% quote("Huituo@123") % quote("Huituo@123")
) )
# 创建DBsession_mysql类型:
DBsession_mysql = sessionmaker(bind=engine_mysql)
DBsession_mysql = scoped_session(DBsession_mysql)
DBsession_postgre = sessionmaker(bind=engine_postgre)
DBsession_postgre = scoped_session(DBsession_postgre)
# 创建session_mysql对象:
session_mysql = DBsession_mysql()
session_mysql.expire_on_commit = False
session_postgre = DBsession_postgre()
session_postgre.expire_on_commit = False
# # 创建对象的基类:
# Base = declarative_base()
#
# # 初始化数据库连接:
# engine_mysql = create_engine('mysql+mysqlconnector://root:Huituo@123@192.168.28.111:3306/waytous')
#
# engine_postgre = create_engine('postgresql://postgres:Huituo@123@192.168.28.111:5432/shenbao_2021520')
#
# # 创建DBsession_mysql类型: # # 创建DBsession_mysql类型:
# DBsession_mysql = sessionmaker(bind=engine_mysql) # DBsession_mysql = sessionmaker(bind=engine_mysql)
# #
...@@ -69,7 +52,63 @@ session_postgre.expire_on_commit = False ...@@ -69,7 +52,63 @@ session_postgre.expire_on_commit = False
# # 创建session_mysql对象: # # 创建session_mysql对象:
# session_mysql = DBsession_mysql() # session_mysql = DBsession_mysql()
# #
# session_mysql.expire_on_commit = False
#
# session_postgre = DBsession_postgre() # session_postgre = DBsession_postgre()
#
# session_postgre.expire_on_commit = False
# 创建对象的基类:
Base = declarative_base()
sql_str = str("mysql+mysqlconnector://" + mysql_config["user"] + ":%s@" + mysql_config["host"] + \
":" + mysql_config["port"] + "/" + mysql_config["database"])
postgre_str = str("postgresql://" + postgre_config["user"] + ":%s@" + postgre_config["host"] + \
":" + postgre_config["port"] + "/" + postgre_config["database"])
try:
engine_mysql = create_engine(
# "mysql+mysqlconnector://root:%s@192.168.28.111:3306/waytous"
# % quote("Huituo@123")
# "mysql+mysqlconnector://" + mysql_config["user"] + ":" + mysql_config["password"] + "@" + mysql_config[
# "host"] + ":" + mysql_config["port"] + "/" + mysql_config["database"]
sql_str % quote(mysql_config["password"])
)
engine_postgre = create_engine(
# "postgresql://postgres:%s@192.168.28.111:5432/shenbao_2021520"
# % quote("Huituo@123")
# "postgresql://" + postgre_config["user"] + ":" + postgre_config["password"] + "@" + postgre_config[
# "host"] + ":" + postgre_config["port"] + "/" + postgre_config["database"]
postgre_str % quote(postgre_config["password"])
)
# 创建DBsession_mysql类型:
DBsession_mysql = sessionmaker(bind=engine_mysql)
DBsession_mysql = scoped_session(DBsession_mysql)
DBsession_postgre = sessionmaker(bind=engine_postgre)
DBsession_postgre = scoped_session(DBsession_postgre)
# 创建session_mysql对象:
session_mysql = DBsession_mysql()
session_mysql.expire_on_commit = False
session_postgre = DBsession_postgre()
session_postgre.expire_on_commit = False
except Exception as es:
logger.error("数据库连接失败")
logger.error(es)
# 定义对象: # 定义对象:
......
...@@ -13,6 +13,7 @@ from equipment.excavator import ExcavatorInfo ...@@ -13,6 +13,7 @@ from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo from equipment.dump import DumpInfo
from equipment.truck import TruckInfo from equipment.truck import TruckInfo
# 车流规划类 # 车流规划类
class Traffic_para(WalkManage): class Traffic_para(WalkManage):
def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck): def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck):
...@@ -160,22 +161,36 @@ class Traffic_para(WalkManage): ...@@ -160,22 +161,36 @@ class Traffic_para(WalkManage):
cost_to_dump = self.path_planner.cost_to_dump cost_to_dump = self.path_planner.cost_to_dump
cost_to_excavator = self.path_planner.cost_to_excavator cost_to_excavator = self.path_planner.cost_to_excavator
logger.info("cost_to_dump")
logger.info(cost_to_dump)
logger.info("cost_to_excavator")
logger.info(cost_to_excavator)
logger.info("self.goto_excavator_factor")
logger.info(self.goto_excavator_factor)
logger.info("self.goto_dump_factor")
logger.info(self.goto_dump_factor)
logger.info("dynamic_dump_num")
logger.info(get_value("dynamic_dump_num"))
logger.info("dynamic_excavator_num")
logger.info(get_value("dynamic_excavator_num"))
# ga
# 路网信息读取 # 路网信息读取
for dump_index in range(get_value("dynamic_dump_num")): for dump_index in range(get_value("dynamic_dump_num")-1):
for excavator_index in range(get_value("dynamic_excavator_num")): for excavator_index in range(get_value("dynamic_excavator_num")-1):
self.goto_excavator_factor[dump_index][excavator_index] = \ self.goto_excavator_factor[dump_index][excavator_index] = \
(cost_to_excavator[dump_index][excavator_index] / (empty_speed * 1000)) / self.payload (cost_to_excavator[dump_index][excavator_index] / (empty_speed * 1000)) / self.payload
self.goto_dump_factor[excavator_index][dump_index] = \ self.goto_dump_factor[excavator_index][dump_index] = \
(cost_to_dump[excavator_index][dump_index] / (heavy_speed * 1000)) / self.payload (cost_to_dump[excavator_index][dump_index] / (heavy_speed * 1000)) / self.payload
logger.info("self.goto_dump_factor") # logger.info("self.goto_dump_factor")
logger.info(self.goto_dump_factor) # logger.info(self.goto_dump_factor)
logger.info("self.goto_dump_factor") # logger.info("self.goto_dump_factor")
logger.info(self.goto_dump_factor) # logger.info(self.goto_dump_factor)
except Exception as es: except Exception as es:
logger.error(es)
logger.error("车流规划信息计算异常") logger.error("车流规划信息计算异常")
logger.error(es)
# 初始化车流规划类 # 初始化车流规划类
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment