Commit 72b40647 authored by 张晓彤's avatar 张晓彤

实时调度优化

parent 93d0a611
...@@ -5,8 +5,17 @@ from equipment.truck import TruckInfo ...@@ -5,8 +5,17 @@ from equipment.truck import TruckInfo
from equipment.excavator import ExcavatorInfo from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo from equipment.dump import DumpInfo
from dispatcher import Dispatcher, PreSchedule, DispatchSubmission from dispatcher import Dispatcher, PreSchedule, DispatchSubmission
from flask_caching import Cache
config = {
"DEBUG": True, # some Flask specific configs
"CACHE_TYPE": "SimpleCache", # Flask-Caching related configs
"CACHE_DEFAULT_TIMEOUT": 300
}
app = Flask(__name__) app = Flask(__name__)
app.config.from_mapping(config)
cache = Cache(app)
@app.route("/dispatch", methods=["POST"]) @app.route("/dispatch", methods=["POST"])
...@@ -26,6 +35,8 @@ def dispatch_request(): ...@@ -26,6 +35,8 @@ def dispatch_request():
# 获取日志器 # 获取日志器
logger = get_logger("zxt.request") logger = get_logger("zxt.request")
try:
# 清空数据库缓存 # 清空数据库缓存
session_mysql.commit() session_mysql.commit()
session_mysql.flush() session_mysql.flush()
...@@ -33,9 +44,16 @@ def dispatch_request(): ...@@ -33,9 +44,16 @@ def dispatch_request():
# 清空数据库缓存 # 清空数据库缓存
session_postgre.commit() session_postgre.commit()
session_postgre.flush() session_postgre.flush()
except Exception as es:
logger.error("数据库访问异常")
logger.error(es)
return jsonify(msg="未知异常, 请联系管理员", code=506)
try:
# 全局参数更新 # 全局参数更新
global_period_para_update() global_period_para_update()
# get_global_para_from_cache(cache)
# 实例化设备对象 # 实例化设备对象
dump = DumpInfo() dump = DumpInfo()
...@@ -50,14 +68,19 @@ def dispatch_request(): ...@@ -50,14 +68,19 @@ def dispatch_request():
# 周期更新 # 周期更新
dispatcher.dispatcher_period_update() dispatcher.dispatcher_period_update()
except Exception as es:
logger.error("参数更新异常")
logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
return jsonify(msg="未知异常, 请联系管理员", code=505)
request_trucks = [] request_trucks = []
try: try:
request_trucks = dispatcher.group.group_dispatch_truck[group_id] request_trucks = dispatcher.group.group_dispatch_truck[group_id]
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
return jsonify(msg="派车计划生成失败", detail="调度分组异常", code=1005) return jsonify(msg="未知异常, 请联系管理员", code=504)
try: try:
# 更新周期参数 # 更新周期参数
...@@ -65,10 +88,10 @@ def dispatch_request(): ...@@ -65,10 +88,10 @@ def dispatch_request():
if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0: if get_value("dynamic_dump_num") * get_value("dynamic_excavator_num") == 0:
# raise Exception("无动态派车计划可用") # raise Exception("无动态派车计划可用")
return jsonify(msg="派车计划生成失败", detail="无动态派车计划可用", code=1003) return jsonify(msg="未知异常, 请联系管理员", code=503)
if get_value("dynamic_truck_num") == 0: if get_value("dynamic_truck_num") == 0:
# raise Exception("无动态派车可用矿卡") # raise Exception("无动态派车可用矿卡")
return jsonify(msg="派车计划生成失败", detail="无动态派车可用矿卡", code=1004) return jsonify(msg="未知异常, 请联系管理员", code=502)
# 更新请调矿卡派车计划 # 更新请调矿卡派车计划
for truck_id in request_trucks: for truck_id in request_trucks:
...@@ -80,11 +103,17 @@ def dispatch_request(): ...@@ -80,11 +103,17 @@ def dispatch_request():
except Exception as es: except Exception as es:
logger.error("最外层异常捕获") logger.error("最外层异常捕获")
logger.error(es) logger.error(es)
return jsonify(msg="派车计划生成失败", detail="未知异常", code=1002) return jsonify(msg="未知异常, 请联系管理员", code=501)
# DBsession_postgre.close_all()
# DBsession_mysql.close_all()
session_mysql.close()
session_postgre.close()
# 调度结束时间 # 调度结束时间
rtd_end_time = datetime.now() rtd_end_time = datetime.now()
print(f'调度时耗 {rtd_end_time - rtd_start_time}') print(f'调度时耗 {rtd_end_time - rtd_start_time}')
return jsonify(msg="派车计划生成成功", code=1001) return jsonify(msg="success", code=0)
\ No newline at end of file \ No newline at end of file
...@@ -131,10 +131,18 @@ class Dispatcher(WalkManage): ...@@ -131,10 +131,18 @@ class Dispatcher(WalkManage):
""" """
# 规则读取 # 规则读取
try:
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
except Exception as es:
self.logger.error(es)
self.logger.error("调度规则读取异常")
session_postgre.rollback()
session_postgre.rollback()
try: try:
# 读取优先级设置 # 读取优先级设置
...@@ -673,7 +681,7 @@ class DispatchSubmission: ...@@ -673,7 +681,7 @@ class DispatchSubmission:
self.logger.error(f"调度结果:{Seq}") self.logger.error(f"调度结果:{Seq}")
self.logger.error(es) self.logger.error(es)
for i in range(dynamic_truck_num): for i in range(get_value("dynamic_truck_num")):
print("dispatch_setting:") print("dispatch_setting:")
print(redis5.get(self.truck.truck_index_to_uuid_dict[i])) print(redis5.get(self.truck.truck_index_to_uuid_dict[i]))
# except Exception as es: # except Exception as es:
......
...@@ -124,8 +124,11 @@ class DumpInfo(WalkManage): ...@@ -124,8 +124,11 @@ class DumpInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("卸点物料更新异常") self.logger.error("卸点物料更新异常")
self.logger.error(es) self.logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
def update_dump_priority(self): def update_dump_priority(self):
unload_area_index_to_uuid_dict = get_value("unload_area_index_to_uuid_dict")
self.dump_priority_coefficient = np.ones(self.dynamic_dump_num) self.dump_priority_coefficient = np.ones(self.dynamic_dump_num)
for dump_id in self.dynamic_dump_set: for dump_id in self.dynamic_dump_set:
try: try:
...@@ -140,15 +143,27 @@ class DumpInfo(WalkManage): ...@@ -140,15 +143,27 @@ class DumpInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("卸点优先级更新异常") self.logger.error("卸点优先级更新异常")
self.logger.error(es) self.logger.error(es)
session_postgre.rollback()
def update_unload_ability(self): def update_unload_ability(self):
unload_area_index_to_uuid_dict = get_value("unload_area_index_to_uuid_dict")
try:
try: try:
rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first() rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first()
except Exception as es:
self.logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
if not rule3.disabled: if not rule3.disabled:
for dump_index in range(self.dynamic_dump_num): for dump_index in range(self.dynamic_dump_num):
unload_area_id = unload_area_index_to_uuid_dict[self.dump_index_to_unload_area_index_dict[dump_index]] unload_area_id = unload_area_index_to_uuid_dict[self.dump_index_to_unload_area_index_dict[dump_index]]
try:
unload_ability = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().UnloadAbililty unload_ability = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().UnloadAbililty
except Exception as es:
self.logger.error(es)
session_mysql.rollback()
session_postgre.rollback()
self.dump_strength[dump_index] = unload_ability # 卸载设备最大卸载能力,单位吨/小时 self.dump_strength[dump_index] = unload_ability # 卸载设备最大卸载能力,单位吨/小时
if unload_ability < 200: if unload_ability < 200:
......
...@@ -136,6 +136,8 @@ class ExcavatorInfo(WalkManage): ...@@ -136,6 +136,8 @@ class ExcavatorInfo(WalkManage):
self.excavator_material[excavator_id] = excavator_material_id self.excavator_material[excavator_id] = excavator_material_id
except Exception as es: except Exception as es:
self.logger.warning(es) self.logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
def update_excavator_priority(self): def update_excavator_priority(self):
...@@ -143,6 +145,7 @@ class ExcavatorInfo(WalkManage): ...@@ -143,6 +145,7 @@ class ExcavatorInfo(WalkManage):
self.logger.info(self.dynamic_excavator_set) self.logger.info(self.dynamic_excavator_set)
for excavator_id in get_value("dynamic_excavator_set"): for excavator_id in get_value("dynamic_excavator_set"):
try:
item = session_mysql.query(Equipment).filter_by(id=excavator_id).first() item = session_mysql.query(Equipment).filter_by(id=excavator_id).first()
self.logger.info("excavator_priority_coefficient") self.logger.info("excavator_priority_coefficient")
self.logger.info(self.excavator_priority_coefficient) self.logger.info(self.excavator_priority_coefficient)
...@@ -162,12 +165,21 @@ class ExcavatorInfo(WalkManage): ...@@ -162,12 +165,21 @@ class ExcavatorInfo(WalkManage):
elif rule == 1: elif rule == 1:
if self.excavator_material[excavator_id] == '81bb175d-50fe-4be3-937e-6791ac4d6fec': if self.excavator_material[excavator_id] == '81bb175d-50fe-4be3-937e-6791ac4d6fec':
self.excavator_material_priority[self.excavator_uuid_to_index_dict[excavator_id]] = 5 self.excavator_material_priority[self.excavator_uuid_to_index_dict[excavator_id]] = 5
except Exception as es:
self.logger.error("物料更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_mining_ability(self): def update_mining_ability(self):
try: try:
try:
rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first() rule4 = session_mysql.query(DispatchRule).filter_by(id=4).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if not rule4.disabled: if not rule4.disabled:
for excavator_index in range(len(self.excavator_index_to_uuid_dict)): for excavator_index in range(len(self.excavator_index_to_uuid_dict)):
try:
load_ability = session_mysql.query(EquipmentSpec.mining_abililty).\ load_ability = session_mysql.query(EquipmentSpec.mining_abililty).\
join(Equipment, Equipment.equipment_spec == EquipmentSpec.id).\ join(Equipment, Equipment.equipment_spec == EquipmentSpec.id).\
filter(Equipment.id == self.excavator_index_to_uuid_dict[excavator_index]).first() filter(Equipment.id == self.excavator_index_to_uuid_dict[excavator_index]).first()
...@@ -175,6 +187,9 @@ class ExcavatorInfo(WalkManage): ...@@ -175,6 +187,9 @@ class ExcavatorInfo(WalkManage):
# if load_ability.mining_abililty < 200: # if load_ability.mining_abililty < 200:
# raise Exception("挖机装载能力异常") # raise Exception("挖机装载能力异常")
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
else: else:
self.excavator_strength = np.full(self.dynamic_excavator_num, 5000) self.excavator_strength = np.full(self.dynamic_excavator_num, 5000)
...@@ -209,7 +224,11 @@ class ExcavatorInfo(WalkManage): ...@@ -209,7 +224,11 @@ class ExcavatorInfo(WalkManage):
self.logger.info("Excavator update!") self.logger.info("Excavator update!")
try:
rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first().disabled rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first().disabled
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
self.logger.info("物料优先级规则") self.logger.info("物料优先级规则")
self.logger.info(rule7) self.logger.info(rule7)
......
...@@ -127,6 +127,8 @@ class TruckInfo(WalkManage): ...@@ -127,6 +127,8 @@ class TruckInfo(WalkManage):
self.truck_current_task = {} self.truck_current_task = {}
device_name_set = redis2.keys() device_name_set = redis2.keys()
truck_name_to_uuid_dict = get_value("truck_name_to_uuid_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")
...@@ -176,7 +178,7 @@ class TruckInfo(WalkManage): ...@@ -176,7 +178,7 @@ class TruckInfo(WalkManage):
self.relative_last_unload_time = {} self.relative_last_unload_time = {}
try: try:
truck_uuid_to_name_dict = get_value("truck_uuid_to_name_dict")
for item in self.dynamic_truck_set: for item in self.dynamic_truck_set:
key_value_dict = redis2.hgetall(truck_uuid_to_name_dict[item]) key_value_dict = redis2.hgetall(truck_uuid_to_name_dict[item])
device_type = int(key_value_dict[str_to_byte("type")]) device_type = int(key_value_dict[str_to_byte("type")])
...@@ -273,9 +275,14 @@ class TruckInfo(WalkManage): ...@@ -273,9 +275,14 @@ class TruckInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("配对关系异常") self.logger.error("配对关系异常")
self.logger.error(es) self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
continue continue
try: try:
load_area_uuid_to_index_dict = get_value("load_area_uuid_to_index_dict")
unload_area_uuid_to_index_dict = get_value("unload_area_uuid_to_index_dict")
# 若矿卡状态为空运 # 若矿卡状态为空运
if task in [0, 1, 2]: # 矿卡空载或仍未出装载区 if task in [0, 1, 2]: # 矿卡空载或仍未出装载区
last_unload_time = self.relative_last_unload_time[ last_unload_time = self.relative_last_unload_time[
...@@ -388,6 +395,8 @@ class TruckInfo(WalkManage): ...@@ -388,6 +395,8 @@ class TruckInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("配对关系异常") self.logger.error("配对关系异常")
self.logger.error(es) self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
continue continue
try: try:
...@@ -448,11 +457,20 @@ class TruckInfo(WalkManage): ...@@ -448,11 +457,20 @@ class TruckInfo(WalkManage):
def update_truck_priority(self): def update_truck_priority(self):
self.truck_priority = np.full(self.dynamic_truck_num, 0) self.truck_priority = np.full(self.dynamic_truck_num, 0)
try:
rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first() rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
try:
if rule6.disabled == 0: if rule6.disabled == 0:
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
try:
item = session_mysql.query(Equipment).filter_by(id=truck_id).first() item = session_mysql.query(Equipment).filter_by(id=truck_id).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
truck_index = self.truck_uuid_to_index_dict[truck_id] truck_index = self.truck_uuid_to_index_dict[truck_id]
if item.priority == 0: if item.priority == 0:
self.truck_priority[truck_index] = 0 self.truck_priority[truck_index] = 0
...@@ -462,8 +480,14 @@ class TruckInfo(WalkManage): ...@@ -462,8 +480,14 @@ class TruckInfo(WalkManage):
self.truck_priority[truck_index] = 5 self.truck_priority[truck_index] = 5
elif item.priority == 3: elif item.priority == 3:
self.truck_priority[truck_index] = 10 self.truck_priority[truck_index] = 10
except Exception as es:
self.logger.error("车辆优先级更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_dump_area_bind(self): def update_truck_dump_area_bind(self):
truck_name_to_uuid_dict = get_value("truck_name_to_uuid_dict")
try: try:
rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first() rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first()
if rule5.disabled == 0: if rule5.disabled == 0:
...@@ -477,8 +501,11 @@ class TruckInfo(WalkManage): ...@@ -477,8 +501,11 @@ class TruckInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("矿卡-卸载区域绑定关系读取异常") self.logger.error("矿卡-卸载区域绑定关系读取异常")
self.logger.error(es) self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_excavator_bind(self): def update_truck_excavator_bind(self):
truck_name_to_uuid_dict = get_value("truck_name_to_uuid_dict")
try: try:
rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first() rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first()
if rule5.disabled == 0: if rule5.disabled == 0:
...@@ -493,24 +520,36 @@ class TruckInfo(WalkManage): ...@@ -493,24 +520,36 @@ class TruckInfo(WalkManage):
except Exception as es: except Exception as es:
self.logger.error("矿卡-挖机绑定关系读取异常") self.logger.error("矿卡-挖机绑定关系读取异常")
self.logger.error(es) self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_excavator_exclude(self): def update_truck_excavator_exclude(self):
self.truck_excavator_exclude = {} self.truck_excavator_exclude = {}
truck_uuid_to_name_dict = get_value("truck_uuid_to_name_dict")
self.excavator_exclude_modify = np.full( self.excavator_exclude_modify = np.full(
(self.dynamic_truck_num, get_value("dynamic_excavator_num")), 0 (self.dynamic_truck_num, get_value("dynamic_excavator_num")), 0
) )
try: try:
try:
rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first() rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if rule5.disabled == 0: if rule5.disabled == 0:
for excavator_id in get_value("dynamic_excavator_set"): for excavator_id in get_value("dynamic_excavator_set"):
try:
item = ( item = (
session_mysql.query(Equipment) session_mysql.query(Equipment)
.filter_by(id=excavator_id, only_allowed=1) .filter_by(id=excavator_id, only_allowed=1)
.first() .first()
) )
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if item is not None: if item is not None:
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
if truck_uuid_to_name_dict[truck_id] not in item.bind_list: if truck_uuid_to_name_dict[truck_id] not in item.bind_list:
...@@ -544,7 +583,11 @@ class TruckInfo(WalkManage): ...@@ -544,7 +583,11 @@ class TruckInfo(WalkManage):
if truck_id in self.truck_dump_bind: if truck_id in self.truck_dump_bind:
unload_area_id = self.truck_dump_bind[truck_id] unload_area_id = self.truck_dump_bind[truck_id]
try:
dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Material dump_material_id = session_postgre.query(DumpArea).filter_by(Id=unload_area_id).first().Material
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
self.truck_material_bind[truck_id] = dump_material_id self.truck_material_bind[truck_id] = dump_material_id
if truck_id in self.truck_excavator_bind: if truck_id in self.truck_excavator_bind:
...@@ -579,27 +622,51 @@ class TruckInfo(WalkManage): ...@@ -579,27 +622,51 @@ class TruckInfo(WalkManage):
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:
try:
self.size[truck_id] = session_mysql.query(Equipment).filter_by(id=truck_id).first().equipment_spec self.size[truck_id] = session_mysql.query(Equipment).filter_by(id=truck_id).first().equipment_spec
except Exception as es:
self.logger.error("车辆型号更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_size(self): def update_truck_size(self):
self.update_truck_spec() self.update_truck_spec()
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
truck_spec_id = self.size[truck_id] truck_spec_id = self.size[truck_id]
try:
self.geo_length[truck_id] = session_mysql.query(EquipmentSpec).filter_by(id=truck_spec_id).first().length self.geo_length[truck_id] = session_mysql.query(EquipmentSpec).filter_by(id=truck_spec_id).first().length
self.geo_width[truck_spec_id] = session_mysql.query(EquipmentSpec).filter_by(id=truck_spec_id).first().width self.geo_width[truck_spec_id] = session_mysql.query(EquipmentSpec).filter_by(id=truck_spec_id).first().width
except Exception as es:
self.logger.error("车辆几何尺寸更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_speed(self): def update_truck_speed(self):
for truck_id in self.dynamic_truck_set: for truck_id in self.dynamic_truck_set:
try:
self.empty_speed[truck_id] = session_mysql.query(EquipmentSpec). \ self.empty_speed[truck_id] = session_mysql.query(EquipmentSpec). \
join(Equipment, EquipmentSpec.id == Equipment.equipment_spec). \ join(Equipment, EquipmentSpec.id == Equipment.equipment_spec). \
filter(Equipment.id == truck_id).first().max_speed filter(Equipment.id == truck_id).first().max_speed
self.heavy_speed[truck_id] = session_mysql.query(EquipmentSpec). \ self.heavy_speed[truck_id] = session_mysql.query(EquipmentSpec). \
join(Equipment, EquipmentSpec.id == Equipment.equipment_spec). \ join(Equipment, EquipmentSpec.id == Equipment.equipment_spec). \
filter(Equipment.id == truck_id).first().max_speed filter(Equipment.id == truck_id).first().max_speed
except Exception as es:
self.logger.error("车辆速度更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
def update_truck_disable_list(self) -> List: def update_truck_disable_list(self) -> List:
try:
for item in session_mysql.query(Equipment).filter_by(device_type=1, disabled=1).all(): for item in session_mysql.query(Equipment).filter_by(device_type=1, disabled=1).all():
self.truck_disable_list.append(item.equipment_id) self.truck_disable_list.append(item.equipment_id)
except Exception as es:
self.logger.error("车辆禁止列表更新异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
return self.truck_disable_list return self.truck_disable_list
def truck_reset(self, dump, excavator): def truck_reset(self, dump, excavator):
...@@ -640,6 +707,8 @@ class TruckInfo(WalkManage): ...@@ -640,6 +707,8 @@ class TruckInfo(WalkManage):
# 初始化参数 # 初始化参数
self.truck_reset(dump, excavator) self.truck_reset(dump, excavator)
try:
# 距离成本启动 # 距离成本启动
rule1 = session_mysql.query(DispatchRule).filter_by(id=1).first().disabled rule1 = session_mysql.query(DispatchRule).filter_by(id=1).first().disabled
...@@ -657,54 +726,15 @@ class TruckInfo(WalkManage): ...@@ -657,54 +726,15 @@ 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
# self.logger.info("Para truck update!")
#
# # 装载周期参数
# self.period_map_para_load()
#
# self.period_walk_para_load()
#
# # 更新有效载重
# self.update_truck_payload()
#
# self.logger.info("距离成本规则")
# self.logger.info(rule1)
#
# self.logger.info("拥堵成本规则")
# self.logger.info(rule2)
#
# self.logger.info("车流规划规则")
# self.logger.info(rule3 or rule4)
#
# self.logger.info("生产组织规则")
# self.logger.info(rule5)
#
# self.logger.info("设备优先级规则")
# self.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 rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first().disabled
except Exception as es:
self.logger.error("规则读取异常")
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
self.logger.info("Para truck update!") self.logger.info("Para truck update!")
# 更新有效载重 # 更新有效载重
......
...@@ -70,7 +70,12 @@ class Group(WalkManage): ...@@ -70,7 +70,12 @@ class Group(WalkManage):
# 动态派车数量没变,但是此时某条派车计划被删除,dispatch_truck_group 就会缺失矿卡 # 动态派车数量没变,但是此时某条派车计划被删除,dispatch_truck_group 就会缺失矿卡
for truck_id in dynamic_truck_set: for truck_id in dynamic_truck_set:
try:
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()
except Exception as es:
self.logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
if item is None: if item is None:
print(truck_id) print(truck_id)
continue continue
...@@ -90,9 +95,13 @@ class Group(WalkManage): ...@@ -90,9 +95,13 @@ class Group(WalkManage):
""" """
# 更新调度组 # 更新调度组
self.group_set = set() self.group_set = set()
try:
for item in session_mysql.query(Dispatch).filter_by(isauto=1, isdeleted=0).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)
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
self.group_num = len(self.group_set) self.group_num = len(self.group_set)
def update_device_group(self): def update_device_group(self):
...@@ -106,9 +115,13 @@ class Group(WalkManage): ...@@ -106,9 +115,13 @@ class Group(WalkManage):
self.device_group[group_id] = [set(), set()] self.device_group[group_id] = [set(), set()]
else: else:
continue continue
try:
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)
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
def update_actual_traffic_flow(self): def update_actual_traffic_flow(self):
""" """
...@@ -232,6 +245,7 @@ class Group(WalkManage): ...@@ -232,6 +245,7 @@ class Group(WalkManage):
""" """
walk_to_excavator_cost, walk_to_dump_cost, park_to_excavator_cost = self.path.walk_cost_cal() walk_to_excavator_cost, walk_to_dump_cost, park_to_excavator_cost = self.path.walk_cost_cal()
park_num = get_value("park_num")
try: try:
......
...@@ -26,60 +26,60 @@ M = 100000000 ...@@ -26,60 +26,60 @@ M = 100000000
logger = get_logger("zxt.para") logger = get_logger("zxt.para")
# 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量 # # 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡) # # (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
( # (
load_area_uuid_to_index_dict, # load_area_uuid_to_index_dict,
unload_area_uuid_to_index_dict, # unload_area_uuid_to_index_dict,
load_area_index_to_uuid_dict, # load_area_index_to_uuid_dict,
unload_area_index_to_uuid_dict, # unload_area_index_to_uuid_dict,
) = build_work_area_uuid_index_map() # ) = build_work_area_uuid_index_map()
#
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len( # load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(
unload_area_uuid_to_index_dict # unload_area_uuid_to_index_dict
) # )
#
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map() # park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
#
park_num = len(park_uuid_to_index_dict) # park_num = len(park_uuid_to_index_dict)
#
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map() # truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
#
excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map() # excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map()
#
# 矿卡集合 # # 矿卡集合
truck_set = set(update_total_truck()) # truck_set = set(update_total_truck())
#
# 固定派车矿卡集合 # # 固定派车矿卡集合
fixed_truck_set = set(update_fixdisp_truck()) # fixed_truck_set = set(update_fixdisp_truck())
#
# 动态派车矿卡集合 # # 动态派车矿卡集合
# dynamic_truck_set = truck_set.difference(fixed_truck_set) # # dynamic_truck_set = truck_set.difference(fixed_truck_set)
dynamic_truck_set = update_dynamic_truck() # dynamic_truck_set = update_dynamic_truck()
#
dynamic_truck_num = len(dynamic_truck_set) # dynamic_truck_num = len(dynamic_truck_set)
#
logger.info("可用于动态派车的矿卡:") # logger.info("可用于动态派车的矿卡:")
logger.info(dynamic_truck_set) # logger.info(dynamic_truck_set)
#
# 用于动态调度的挖机及卸载设备 # # 用于动态调度的挖机及卸载设备
dynamic_excavator_set = set(update_autodisp_excavator()) # dynamic_excavator_set = set(update_autodisp_excavator())
dynamic_excavator_num = len(dynamic_excavator_set) # dynamic_excavator_num = len(dynamic_excavator_set)
#
dynamic_dump_set = set(update_autodisp_dump()) # dynamic_dump_set = set(update_autodisp_dump())
dynamic_dump_num = len(dynamic_dump_set) # dynamic_dump_num = len(dynamic_dump_set)
#
global global_dict # global global_dict
global_dict = {} global_dict = {}
global_dict["dynamic_truck_set"] = dynamic_truck_set # global_dict["dynamic_truck_set"] = dynamic_truck_set
global_dict["dynamic_truck_num"] = dynamic_truck_num # global_dict["dynamic_truck_num"] = dynamic_truck_num
global_dict["dynamic_excavator_set"] = dynamic_excavator_set # global_dict["dynamic_excavator_set"] = dynamic_excavator_set
global_dict["dynamic_excavator_num"] = dynamic_excavator_num # global_dict["dynamic_excavator_num"] = dynamic_excavator_num
global_dict["dynamic_dump_set"] = dynamic_dump_set # global_dict["dynamic_dump_set"] = dynamic_dump_set
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
def get_value(name): def get_value(name):
...@@ -246,20 +246,20 @@ class WalkManage(DeviceMap): ...@@ -246,20 +246,20 @@ class WalkManage(DeviceMap):
# # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备 # # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
# 路网真实距离 # 路网真实距离
walk_time_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float) walk_time_to_excavator = None
walk_time_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float) walk_time_to_dump = None
walk_time_park_to_excavator = np.full((park_num, dynamic_excavator_num), M, dtype=float) walk_time_park_to_excavator = None
walk_time_park_to_load_area = np.full((park_num, load_area_num), M, dtype=float) walk_time_park_to_load_area = None
walk_time_to_load_area = np.full((unload_area_num, load_area_num), M, dtype=float) walk_time_to_load_area = None
walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M, dtype=float) walk_time_to_unload_area = None
# 路网行驶时间 # 路网行驶时间
distance_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float) distance_to_excavator = None
distance_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float) distance_to_dump = None
distance_park_to_excavator = np.full((park_num, dynamic_excavator_num), M, dtype=float) distance_park_to_excavator = None
distance_park_to_load_area = np.full((park_num, load_area_num), M, dtype=float) distance_park_to_load_area = None
distance_to_load_area = np.full((unload_area_num, load_area_num), M, dtype=float) distance_to_load_area = None
distance_to_unload_area = np.full((unload_area_num, load_area_num), M, dtype=float) distance_to_unload_area = None
# def get_walk_time_to_load_area(cls): # def get_walk_time_to_load_area(cls):
# return cls.walk_time_to_load_area # return cls.walk_time_to_load_area
...@@ -352,6 +352,8 @@ class WalkManage(DeviceMap): ...@@ -352,6 +352,8 @@ class WalkManage(DeviceMap):
except Exception as es: except Exception as es:
logger.error("路网信息异常") logger.error("路网信息异常")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
# 计算设备路网距离及行走时间 # 计算设备路网距离及行走时间
try: try:
...@@ -388,6 +390,8 @@ class WalkManage(DeviceMap): ...@@ -388,6 +390,8 @@ class WalkManage(DeviceMap):
except Exception as es: except Exception as es:
logger.error("备停区路网信息异常") logger.error("备停区路网信息异常")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
try: try:
for i in range(park_num): for i in range(park_num):
for j in range(dynamic_excavator_num): for j in range(dynamic_excavator_num):
...@@ -407,6 +411,21 @@ class WalkManage(DeviceMap): ...@@ -407,6 +411,21 @@ class WalkManage(DeviceMap):
logger.info(cls.distance_park_to_excavator) logger.info(cls.distance_park_to_excavator)
def get_global_para_from_cache(cache):
""" 优先从cache缓存读取global数据
:param cache: 缓存器
:return: None
"""
global global_dict
global_dict = cache.get("global_dict")
if global_dict is None:
print("here2")
global_period_para_update()
cache.set("global_dict", global_dict, timeout=5 * 60)
def global_period_para_update(): def global_period_para_update():
global load_area_uuid_to_index_dict, load_area_index_to_uuid_dict global load_area_uuid_to_index_dict, load_area_index_to_uuid_dict
global unload_area_uuid_to_index_dict, unload_area_index_to_uuid_dict global unload_area_uuid_to_index_dict, unload_area_index_to_uuid_dict
...@@ -415,6 +434,7 @@ def global_period_para_update(): ...@@ -415,6 +434,7 @@ def global_period_para_update():
global truck_uuid_to_name_dict, truck_name_to_uuid_dict global truck_uuid_to_name_dict, truck_name_to_uuid_dict
global dynamic_truck_num, dynamic_excavator_num, dynamic_dump_num global dynamic_truck_num, dynamic_excavator_num, dynamic_dump_num
global excavator_uuid_to_name_dict, dump_uuid_to_name_dict global excavator_uuid_to_name_dict, dump_uuid_to_name_dict
global global_dict
# 清空数据库缓存 # 清空数据库缓存
session_mysql.commit() session_mysql.commit()
...@@ -441,6 +461,17 @@ def global_period_para_update(): ...@@ -441,6 +461,17 @@ def global_period_para_update():
excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map() excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map()
global_dict = {"park_num": park_num, "load_area_num": load_area_num, "unload_area_num": unload_area_num,
"truck_uuid_to_name_dict": truck_uuid_to_name_dict,
"truck_name_to_uuid_dict": truck_name_to_uuid_dict,
"excavator_uuid_to_name_dict": excavator_uuid_to_name_dict,
"dump_uuid_to_name_dict": dump_uuid_to_name_dict,
"unload_area_uuid_to_index_dict": unload_area_uuid_to_index_dict,
"load_area_uuid_to_index_dict": load_area_uuid_to_index_dict,
"unload_area_index_to_uuid_dict": unload_area_index_to_uuid_dict,
"park_uuid_to_index_dict": park_uuid_to_index_dict,
"park_index_to_uuid_dict": park_index_to_uuid_dict}
# 矿卡集合 # 矿卡集合
truck_set = set(update_total_truck()) truck_set = set(update_total_truck())
...@@ -456,9 +487,11 @@ def global_period_para_update(): ...@@ -456,9 +487,11 @@ def global_period_para_update():
# 动态派车矿卡集合 # 动态派车矿卡集合
# dynamic_truck_set = truck_set.difference(fixed_truck_set) # dynamic_truck_set = truck_set.difference(fixed_truck_set)
dynamic_truck_set = update_dynamic_truck() dynamic_truck_set = update_dynamic_truck()
dynamic_truck_num = len(dynamic_truck_set) dynamic_truck_num = len(dynamic_truck_set)
global_dict["dynamic_truck_set"] = dynamic_truck_set
global_dict["dynamic_truck_num"] = dynamic_truck_num
logger.info("可用于动态派车的矿卡:") logger.info("可用于动态派车的矿卡:")
logger.info(dynamic_truck_num) logger.info(dynamic_truck_num)
logger.info(dynamic_truck_set) logger.info(dynamic_truck_set)
...@@ -470,6 +503,11 @@ def global_period_para_update(): ...@@ -470,6 +503,11 @@ def global_period_para_update():
dynamic_dump_set = set(update_autodisp_dump()) dynamic_dump_set = set(update_autodisp_dump())
dynamic_dump_num = len(dynamic_dump_set) dynamic_dump_num = len(dynamic_dump_set)
global_dict["dynamic_excavator_set"] = dynamic_excavator_set
global_dict["dynamic_excavator_num"] = dynamic_excavator_num
global_dict["dynamic_dump_set"] = dynamic_dump_set
global_dict["dynamic_dump_num"] = dynamic_dump_num
DeviceMap.reset() DeviceMap.reset()
DeviceMap.period_map_para_update() DeviceMap.period_map_para_update()
...@@ -478,24 +516,6 @@ def global_period_para_update(): ...@@ -478,24 +516,6 @@ def global_period_para_update():
WalkManage.period_walk_para_update() WalkManage.period_walk_para_update()
global_dict["dynamic_truck_set"] = dynamic_truck_set
global_dict["dynamic_truck_num"] = dynamic_truck_num
global_dict["dynamic_excavator_set"] = dynamic_excavator_set
global_dict["dynamic_excavator_num"] = dynamic_excavator_num
global_dict["dynamic_dump_set"] = dynamic_dump_set
global_dict["dynamic_dump_num"] = dynamic_dump_num
global_dict["park_num"] = park_num
global_dict["load_area_num"] = load_area_num
global_dict["unload_area_num"] = unload_area_num
global_dict["truck_uuid_to_name_dict"] = truck_uuid_to_name_dict
global_dict["excavator_uuid_to_name_dict"] = excavator_uuid_to_name_dict
global_dict["dump_uuid_to_name_dict"] = dump_uuid_to_name_dict
global_dict["unload_area_uuid_to_index_dict"] = unload_area_uuid_to_index_dict
global_dict["unload_area_index_to_uuid_dict"] = unload_area_index_to_uuid_dict
global_dict["park_uuid_to_index_dict"] = park_uuid_to_index_dict
global_dict["park_index_to_uuid_dict"] = park_index_to_uuid_dict
global_dict["distance_to_excavator"] = WalkManage.distance_to_excavator global_dict["distance_to_excavator"] = WalkManage.distance_to_excavator
global_dict["distance_park_to_excavator"] = WalkManage.distance_park_to_excavator global_dict["distance_park_to_excavator"] = WalkManage.distance_park_to_excavator
global_dict["distance_to_dump"] = WalkManage.distance_to_dump global_dict["distance_to_dump"] = WalkManage.distance_to_dump
......
...@@ -200,6 +200,9 @@ class PathPlanner(WalkManage): ...@@ -200,6 +200,9 @@ class PathPlanner(WalkManage):
self.lane.lane_speed_generate() self.lane.lane_speed_generate()
try: try:
unload_area_uuid_to_index_dict = get_value("unload_area_uuid_to_index_dict")
load_area_uuid_to_index_dict = get_value("load_area_uuid_to_index_dict")
park_uuid_to_index_dict = get_value(" park_uuid_to_index_dict")
# 读取路网成本 # 读取路网成本
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
load_area_id, unload_area_id = str(walk_time.load_area_id), str(walk_time.unload_area_id) load_area_id, unload_area_id = str(walk_time.load_area_id), str(walk_time.unload_area_id)
......
...@@ -32,7 +32,7 @@ class PathPlanner(WalkManage): ...@@ -32,7 +32,7 @@ class PathPlanner(WalkManage):
self.controller = PriorityController(self.dump, self.excavator, self.truck) self.controller = PriorityController(self.dump, self.excavator, self.truck)
# 路线行驶成本 # 路线行驶成本
self.rout_cost = np.array((unload_area_num, load_area_num)) self.rout_cost = np.array((get_value("unload_area_num"), get_value("load_area_num")))
# 路段集合 # 路段集合
self.lane_set = {} self.lane_set = {}
# 车辆长度(暂) # 车辆长度(暂)
...@@ -87,9 +87,12 @@ class PathPlanner(WalkManage): ...@@ -87,9 +87,12 @@ class PathPlanner(WalkManage):
# 备停区处理 # 备停区处理
if is_park: if is_park:
# 提取指定道路记录 # 提取指定道路记录
try:
path = session_postgre.query(WalkTimePark).filter_by(park_area_id=unload_area_id, path = session_postgre.query(WalkTimePark).filter_by(park_area_id=unload_area_id,
load_area_id=load_area_id).first() load_area_id=load_area_id).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
# 读取道路路段信息 # 读取道路路段信息
for lane_id in path.park_load_lanes: for lane_id in path.park_load_lanes:
if lane_id in self.lane.used_lane_set: if lane_id in self.lane.used_lane_set:
...@@ -104,9 +107,12 @@ class PathPlanner(WalkManage): ...@@ -104,9 +107,12 @@ class PathPlanner(WalkManage):
to_load_cost = alpha * cost_to_load_blockage + beta * path.park_load_distance to_load_cost = alpha * cost_to_load_blockage + beta * path.park_load_distance
else: else:
try:
path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id, path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id,
unload_area_id=unload_area_id).first() unload_area_id=unload_area_id).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
for lane_id in path.to_unload_lanes: for lane_id in path.to_unload_lanes:
if lane_id in self.lane.used_lane_set: if lane_id in self.lane.used_lane_set:
if lane_id in lane_cost_memory: if lane_id in lane_cost_memory:
...@@ -146,7 +152,11 @@ class PathPlanner(WalkManage): ...@@ -146,7 +152,11 @@ class PathPlanner(WalkManage):
lane_blockage = 0 # 路段拥堵度默认为0 lane_blockage = 0 # 路段拥堵度默认为0
try: try:
try:
lane_rec = session_postgre.query(Lane).filter_by(Id=lane_id).first() # 读取路段记录 lane_rec = session_postgre.query(Lane).filter_by(Id=lane_id).first() # 读取路段记录
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
lane_length = lane_rec.Length # 道路长度 lane_length = lane_rec.Length # 道路长度
...@@ -180,17 +190,29 @@ class PathPlanner(WalkManage): ...@@ -180,17 +190,29 @@ class PathPlanner(WalkManage):
lane_cost_memory = {} # 路段拥堵度列表, 记忆化搜索 lane_cost_memory = {} # 路段拥堵度列表, 记忆化搜索
# 距离成本启用 # 距离成本启用
try:
rule1 = session_mysql.query(DispatchRule).filter_by(id=1).first() rule1 = session_mysql.query(DispatchRule).filter_by(id=1).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if rule1.disabled == 0: if rule1.disabled == 0:
beta = rule1.rule_weight beta = rule1.rule_weight
# 拥堵成本启用 # 拥堵成本启用
try:
rule2 = session_mysql.query(DispatchRule).filter_by(id=2).first() rule2 = session_mysql.query(DispatchRule).filter_by(id=2).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if rule2.disabled == 0: if rule2.disabled == 0:
alpha = rule2.rule_weight alpha = rule2.rule_weight
try: try:
unload_area_uuid_to_index_dict = get_value("unload_area_uuid_to_index_dict")
load_area_uuid_to_index_dict = get_value("load_area_uuid_to_index_dict")
park_uuid_to_index_dict = get_value("park_uuid_to_index_dict")
# 读取路网成本 # 读取路网成本
try:
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
load_area_id, unload_area_id = str(walk_time.load_area_id), str(walk_time.unload_area_id) load_area_id, unload_area_id = str(walk_time.load_area_id), str(walk_time.unload_area_id)
unload_area_index = unload_area_uuid_to_index_dict[unload_area_id] unload_area_index = unload_area_uuid_to_index_dict[unload_area_id]
...@@ -202,8 +224,12 @@ class PathPlanner(WalkManage): ...@@ -202,8 +224,12 @@ class PathPlanner(WalkManage):
# WalkManage.distance_to_load_area[unload_area_index][load_area_index] # WalkManage.distance_to_load_area[unload_area_index][load_area_index]
# self.cost_to_unload_area[unload_area_index][load_area_index] = \ # self.cost_to_unload_area[unload_area_index][load_area_index] = \
# WalkManage.distance_to_unload_area[unload_area_index][load_area_index] # WalkManage.distance_to_unload_area[unload_area_index][load_area_index]
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
# 读取备停区路网成本 # 读取备停区路网成本
try:
for walk_time_park in session_postgre.query(WalkTimePark).all(): for walk_time_park in session_postgre.query(WalkTimePark).all():
park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)] park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)]
load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)]
...@@ -211,6 +237,9 @@ class PathPlanner(WalkManage): ...@@ -211,6 +237,9 @@ class PathPlanner(WalkManage):
self.path_cost_generate(str(walk_time_park.load_area_id), str(walk_time_park.park_area_id), True, lane_cost_memory, alpha, beta) self.path_cost_generate(str(walk_time_park.load_area_id), str(walk_time_park.park_area_id), True, lane_cost_memory, alpha, beta)
# self.cost_park_to_load_area[park_area_index][load_area_index] = \ # self.cost_park_to_load_area[park_area_index][load_area_index] = \
# WalkManage.distance_park_to_load_area[park_area_index][load_area_index] # WalkManage.distance_park_to_load_area[park_area_index][load_area_index]
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
logger.info(self.cost_park_to_load_area) logger.info(self.cost_park_to_load_area)
logger.info(self.distance_park_to_excavator) logger.info(self.distance_park_to_excavator)
...@@ -297,6 +326,7 @@ class LaneInfo: ...@@ -297,6 +326,7 @@ class LaneInfo:
truck_speed_dict = {} truck_speed_dict = {}
try: try:
truck_name_to_uuid_dict = get_value("truck_name_to_uuid_dict")
device_name_set = redis2.keys() device_name_set = redis2.keys()
for item in device_name_set: for item in device_name_set:
item = item.decode(encoding='utf-8') item = item.decode(encoding='utf-8')
...@@ -317,6 +347,8 @@ class LaneInfo: ...@@ -317,6 +347,8 @@ class LaneInfo:
:return: :return:
truck_locate_dict: (Dict{key:truck_id, value:lane_id}) 矿卡所在路段表 truck_locate_dict: (Dict{key:truck_id, value:lane_id}) 矿卡所在路段表
""" """
truck_name_to_uuid_dict = get_value("truck_name_to_uuid_dict")
self.used_lane_set = [] self.used_lane_set = []
# try: # try:
truck_locate_dict = {} truck_locate_dict = {}
......
...@@ -31,6 +31,7 @@ class PriorityController: ...@@ -31,6 +31,7 @@ class PriorityController:
walk_weight: 卸载-装载区 路网权重 walk_weight: 卸载-装载区 路网权重
park_walk_weight: 备停区-装载区 路网权重 park_walk_weight: 备停区-装载区 路网权重
""" """
park_num = get_value("park_num")
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")
dynamic_dump_set = get_value("dynamic_dump_set") dynamic_dump_set = get_value("dynamic_dump_set")
...@@ -43,7 +44,11 @@ class PriorityController: ...@@ -43,7 +44,11 @@ class PriorityController:
dump_material_priority = np.ones(dynamic_dump_num) dump_material_priority = np.ones(dynamic_dump_num)
park_walk_weight = np.ones((park_num, dynamic_excavator_num)) park_walk_weight = np.ones((park_num, dynamic_excavator_num))
try:
rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first() rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if not rule6.disabled: if not rule6.disabled:
for dump_id in dynamic_dump_set: for dump_id in dynamic_dump_set:
...@@ -54,7 +59,11 @@ class PriorityController: ...@@ -54,7 +59,11 @@ class PriorityController:
walk_to_dump_weight[excavator_inedx][dump_index] += dump_priority[dump_index] walk_to_dump_weight[excavator_inedx][dump_index] += dump_priority[dump_index]
park_walk_weight = park_walk_weight * self.excavator.excavator_priority_coefficient park_walk_weight = park_walk_weight * self.excavator.excavator_priority_coefficient
try:
rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first() rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if not rule7.disabled: if not rule7.disabled:
for dump_id in dynamic_dump_set: for dump_id in dynamic_dump_set:
...@@ -102,8 +111,12 @@ class PriorityController: ...@@ -102,8 +111,12 @@ class PriorityController:
for dump_id in get_value("dynamic_dump_set"): for dump_id in get_value("dynamic_dump_set"):
for excavator_id in get_value("dynamic_excavator_set"): for excavator_id in get_value("dynamic_excavator_set"):
try:
item = session_mysql.query(Dispatch).filter_by(dump_id=dump_id, exactor_id=excavator_id, isauto=1, item = session_mysql.query(Dispatch).filter_by(dump_id=dump_id, exactor_id=excavator_id, isauto=1,
isdeleted=0).first() isdeleted=0).first()
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
if item is not None: if item is not None:
dump_index = self.dump.dump_uuid_to_index_dict[dump_id] dump_index = self.dump.dump_uuid_to_index_dict[dump_id]
excavator_index = self.excavator.excavator_uuid_to_index_dict[excavator_id] excavator_index = self.excavator.excavator_uuid_to_index_dict[excavator_id]
......
...@@ -67,8 +67,8 @@ def set_log(): ...@@ -67,8 +67,8 @@ def set_log():
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60) # timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10) filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10, encoding="utf-8")
# filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10) # filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8")
# 设置后缀名称,跟strftime的格式一样 # 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log" filehandler.suffix = "%Y-%m-%d_%H-%M.log"
......
...@@ -43,6 +43,8 @@ def build_work_area_uuid_index_map(): ...@@ -43,6 +43,8 @@ def build_work_area_uuid_index_map():
except Exception as es: except Exception as es:
logger.error("路网读取") logger.error("路网读取")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
return ( return (
load_area_uuid_to_index_dict, load_area_uuid_to_index_dict,
unload_area_uuid_to_index_dict, unload_area_uuid_to_index_dict,
...@@ -70,6 +72,8 @@ def build_park_uuid_index_map(): ...@@ -70,6 +72,8 @@ def build_park_uuid_index_map():
except Exception as es: except Exception as es:
logger.info("备停区路网读取") logger.info("备停区路网读取")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
return park_uuid_to_index_dict, park_index_to_uuid_dict return park_uuid_to_index_dict, park_index_to_uuid_dict
...@@ -90,6 +94,8 @@ def build_truck_uuid_name_map(): ...@@ -90,6 +94,8 @@ def build_truck_uuid_name_map():
raise Exception("无矿卡设备可用-矿卡设备映射异常") raise Exception("无矿卡设备可用-矿卡设备映射异常")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
return truck_uuid_to_name_dict, truck_name_to_uuid_dict return truck_uuid_to_name_dict, truck_name_to_uuid_dict
...@@ -109,6 +115,8 @@ def build_equipment_uuid_name_map(): ...@@ -109,6 +115,8 @@ def build_equipment_uuid_name_map():
raise Exception("无挖机设备可用") raise Exception("无挖机设备可用")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
try: try:
...@@ -121,6 +129,8 @@ def build_equipment_uuid_name_map(): ...@@ -121,6 +129,8 @@ def build_equipment_uuid_name_map():
raise Exception("无卸载设备可用") raise Exception("无卸载设备可用")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
return excavator_uuid_to_name_dict, dump_uuid_to_name_dict return excavator_uuid_to_name_dict, dump_uuid_to_name_dict
...@@ -175,6 +185,8 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_ ...@@ -175,6 +185,8 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
except Exception as es: except Exception as es:
logger.error("卸载区信息异常") logger.error("卸载区信息异常")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
logger.info("excavator_index_to_load_area_index_dict") logger.info("excavator_index_to_load_area_index_dict")
logger.info(excavator_index_to_load_area_index_dict) logger.info(excavator_index_to_load_area_index_dict)
...@@ -241,6 +253,8 @@ def update_total_truck(): ...@@ -241,6 +253,8 @@ def update_total_truck():
except Exception as es: except Exception as es:
logger.info("矿卡读取") logger.info("矿卡读取")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
return truck_list return truck_list
...@@ -260,6 +274,8 @@ def update_dynamic_truck(): ...@@ -260,6 +274,8 @@ def update_dynamic_truck():
except Exception as es: except Exception as es:
logger.error(es) logger.error(es)
logger.error("动态调度矿卡读取异常") logger.error("动态调度矿卡读取异常")
session_postgre.rollback()
session_postgre.rollback()
return set(dynamic_truck_list) return set(dynamic_truck_list)
...@@ -279,11 +295,15 @@ def update_fixdisp_truck(): ...@@ -279,11 +295,15 @@ def update_fixdisp_truck():
rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first().disabled rule5 = session_mysql.query(DispatchRule).filter_by(id=5).first().disabled
if not rule5: if not rule5:
try:
query = np.array( query = np.array(
session_mysql.query(Equipment) session_mysql.query(Equipment)
.filter_by(device_type=1, isdeleted=0, disabled=1) .filter_by(device_type=1, isdeleted=0, disabled=1)
.all() .all()
) )
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
for item in query: for item in query:
fixed_truck_list.append(item.id) fixed_truck_list.append(item.id)
...@@ -293,6 +313,8 @@ def update_fixdisp_truck(): ...@@ -293,6 +313,8 @@ def update_fixdisp_truck():
except Exception as es: except Exception as es:
logger.info("派车计划读取") logger.info("派车计划读取")
logger.error(es) logger.error(es)
session_postgre.rollback()
session_postgre.rollback()
return set(fixed_truck_list) return set(fixed_truck_list)
...@@ -308,6 +330,8 @@ def update_autodisp_excavator(): ...@@ -308,6 +330,8 @@ def update_autodisp_excavator():
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常") raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
return set(dynamic_excavator_list) return set(dynamic_excavator_list)
...@@ -324,29 +348,43 @@ def update_autodisp_dump(): ...@@ -324,29 +348,43 @@ def update_autodisp_dump():
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常") raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
except Exception as es: except Exception as es:
logger.warning(es) logger.warning(es)
session_postgre.rollback()
session_postgre.rollback()
return set(dynamic_dump_list) return set(dynamic_dump_list)
def update_load_area(): def update_load_area():
load_area_list = [] load_area_list = []
try:
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
load_area_list.append(walk_time.load_area_id) load_area_list.append(walk_time.load_area_id)
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
return load_area_list return load_area_list
def update_unload_area(): def update_unload_area():
unload_area_list = [] unload_area_list = []
try:
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
unload_area_list.append(walk_time.unload_area_id) unload_area_list.append(walk_time.unload_area_id)
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
return unload_area_list return unload_area_list
def update_park_area(): def update_park_area():
park_area_list = [] park_area_list = []
try:
for walk_time_park in session_postgre.query(WalkTimePark).all(): for walk_time_park in session_postgre.query(WalkTimePark).all():
park_area_list.append(walk_time_park.park_area_id) park_area_list.append(walk_time_park.park_area_id)
except Exception as es:
session_postgre.rollback()
session_postgre.rollback()
return park_area_list return park_area_list
# def build_work_area_uuid_index_map(): # def build_work_area_uuid_index_map():
......
...@@ -192,6 +192,9 @@ class Traffic_para(WalkManage): ...@@ -192,6 +192,9 @@ class Traffic_para(WalkManage):
# 设置卸载点信息 # 设置卸载点信息
def extract_dump_info(self): def extract_dump_info(self):
unload_area_index_to_uuid_dict = get_value("unload_area_index_to_uuid_dict")
dynamic_dump_num = get_value("dynamic_dump_num") dynamic_dump_num = get_value("dynamic_dump_num")
try: try:
rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first() rule3 = session_mysql.query(DispatchRule).filter_by(id=3).first()
......
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