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

修复索引溢出异常

parent 2f1f9dca
......@@ -132,11 +132,12 @@ class TruckInfo(WalkManage):
self.truck_current_task = {}
device_name_set = redis2.keys()
print("tast_truck_set")
print(get_value("dynamic_truck_set")) ## 两个
# print("tast_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:
try:
......@@ -156,6 +157,11 @@ class TruckInfo(WalkManage):
logger.info("矿卡当前任务:")
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 = {}
#
# dynamic_truck_set = get_value("dynamic_truck_set")
......
......@@ -462,7 +462,7 @@ class Dispatcher(WalkManage):
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()
# try:
excavator_priority_coefficient = excavator.excavator_priority_coefficient
excavator_material_priority = excavator.excavator_material_priority
......@@ -522,6 +522,7 @@ class Dispatcher(WalkManage):
logger.error(es)
# 矿卡是否存在绑定挖机
try:
if truck_id in truck.truck_excavator_bind:
target = excavator.excavator_uuid_to_index_dict[truck.truck_excavator_bind[truck_id]]
else:
......@@ -545,7 +546,9 @@ class Dispatcher(WalkManage):
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]}")
except Exception as es:
logger.error("error07")
logger.error(es)
if task in [0, 1, 2]:
try:
logger.info("矿卡状态:矿卡空载")
......@@ -607,7 +610,9 @@ class Dispatcher(WalkManage):
if value == unload_area_uuid_to_index_dict[bind_unload_area_id]:
target = key
break
else:
try:
excavator_index = int(trip[1])
excavator_id = self.excavator_index_to_uuid_dict[excavator_index]
......@@ -616,9 +621,26 @@ class Dispatcher(WalkManage):
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_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]
......@@ -630,30 +652,66 @@ class Dispatcher(WalkManage):
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)
target = np.argmin(
transport_value
+ 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)
elif task in [3, 4, 5]:
......@@ -735,7 +793,7 @@ class Dispatcher(WalkManage):
if rule3 and rule4:
# transport_value = self.cost_to_excavator[int(trip[1]), :]
transport_value = self.group.group_walk_to_excavator_cost[dump_index, :]
transport_value = self.group.group_walk_to_excavator_cost[group_id]
else:
group_dump_index = self.group.group_dump_uuid_to_index_dict[group_id][dump_id]
......@@ -770,7 +828,7 @@ class Dispatcher(WalkManage):
logger.info(transport_value)
target = np.argmin(
transport_value
transport_value.T
+ excavator_exclude_modify)
# + excavator_material_bind_modify)
......@@ -793,6 +851,10 @@ class Dispatcher(WalkManage):
logger.info("==========================================================")
print(target)
# except Exception as es:
# logger.error("truck_schedule,error")
# logger.error(es)
return target
def schedule_construct(self):
......@@ -849,24 +911,55 @@ class Dispatcher(WalkManage):
# try:
# 获取矿卡id
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():
continue
try:
# 获取矿卡当前任务
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]
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])
except Exception as es:
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:
group_id = self.group.dispatch_truck_group[truck_id]
except Exception as es:
......@@ -913,12 +1006,16 @@ class Dispatcher(WalkManage):
for i in range(len(Seq)):
try:
try:
truck_id = truck.truck_index_to_uuid_dict[i]
group_id = self.group.dispatch_truck_group[truck_id]
record = {"truckId": truck.truck_index_to_uuid_dict[i]}
task = truck.get_truck_current_task()[truck.truck_index_to_uuid_dict[i]]
except Exception as es:
logger.error("truck_id,group_id,record,task出错")
logger.error(es)
if task in empty_task_set:
item = (
session_mysql.query(Dispatch)
......@@ -954,10 +1051,25 @@ class Dispatcher(WalkManage):
record["createtime"] = item.createtime.strftime(
"%b %d, %Y %I:%M:%S %p")
elif task == -2:
try:
try:
item = (
session_mysql.query(Dispatch)
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]], group_id=group_id,
isauto=1, isdeleted=0,).first())
.filter_by(exactor_id=excavator.excavator_index_to_uuid_dict[Seq[i][1]],
# truck_id=truck_id,
group_id=group_id,
isauto=1, isdeleted=0, ).first())
except Exception as es:
logger.error("task-2,error01")
logger.error(es)
logger.error('excavator.excavator_index_to_uuid_dict[Seq[i][1]]')
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
......@@ -967,10 +1079,19 @@ class Dispatcher(WalkManage):
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:
pass
redis5.set(truck.truck_index_to_uuid_dict[i], str(json.dumps(record)))
except Exception as es:
logger.error("调度结果写入异常-redis写入异常")
logger.error(f"调度结果:{Seq}")
......@@ -1316,7 +1437,7 @@ class Group(WalkManage):
# 下面三个函数保证程序定期执行,不用管他
def process(dispatcher):
try:
# try:
# 更新周期参数
logger.info("#####################################周期更新开始#####################################")
......@@ -1353,9 +1474,9 @@ def process(dispatcher):
# 调度计算
dispatcher.schedule_construct()
except Exception as es:
logger.error("更新不及时")
logger.error(es)
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger.info("#####################################周期更新结束#####################################")
......
......@@ -9,12 +9,22 @@
# 存储数据库表结构
from settings import *
from sqlalchemy import Column, create_engine
from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN
from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
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(
% 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 = sessionmaker(bind=engine_mysql)
#
......@@ -69,7 +52,63 @@ session_postgre.expire_on_commit = False
# # 创建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()
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
from equipment.dump import DumpInfo
from equipment.truck import TruckInfo
# 车流规划类
class Traffic_para(WalkManage):
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):
cost_to_dump = self.path_planner.cost_to_dump
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 excavator_index in range(get_value("dynamic_excavator_num")):
for dump_index in range(get_value("dynamic_dump_num")-1):
for excavator_index in range(get_value("dynamic_excavator_num")-1):
self.goto_excavator_factor[dump_index][excavator_index] = \
(cost_to_excavator[dump_index][excavator_index] / (empty_speed * 1000)) / self.payload
self.goto_dump_factor[excavator_index][dump_index] = \
(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:
logger.error(es)
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