Commit 13a2e9cf authored by Allvey's avatar Allvey

Merge branch 'master' of github.com:Allvey/integrated-scheduling

# 绑定关系/禁止关系/重构
parent fe375db4
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2021/8/24 11:31
# @Author : Opfer
# @Site :
# @File : __init__.py
# @Software: PyCharm
\ No newline at end of file
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2021/8/24 11:28
# @Author : Opfer
# @Site :
# @File : dump.py
# @Software: PyCharm
from traffic_flow.traffic_flow_planner import *
from static_data_process import *
from para_config import *
from settings import *
# 卸载设备类
class DumpInfo(WalkManage):
def __init__(self):
# 卸载设备数量
self.dynamic_dump_num = len(dynamic_dump_set)
# 目标产量
self.dump_target_mass = np.zeros(self.dynamic_dump_num)
# 实际真实产量
self.cur_dump_real_mass = np.zeros(self.dynamic_dump_num)
# # 预计产量(包含正在驶往目的地的矿卡载重)
# self.pre_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass)
# # 模拟实际产量(防止调度修改真实产量)
# self.sim_dump_real_mass = np.zeros(self.dynamic_dump_num)
# # 真实设备可用时间
# self.cur_dump_ava_time = np.zeros(self.dynamic_dump_num)
# # 模拟各设备可用时间(防止调度修改真实产量)
# self.sim_dump_ava_time = np.zeros(self.dynamic_dump_num)
# 用于动态调度的卸载设备集合
self.dynamic_dump_set = []
# 开始时间
self.start_time = datetime.now()
# 卸载时间
self.unloading_time = np.zeros(self.dynamic_dump_num)
# 入场时间
self.entrance_time = np.zeros(self.dynamic_dump_num)
# 出场时间
self.exit_time = np.zeros(self.dynamic_dump_num)
def get_unloading_time(self):
return self.unloading_time
def get_dump_num(self):
return self.dynamic_dump_num
def get_dump_target_mass(self):
return self.dump_target_mass
def get_dump_actual_mass(self):
return self.cur_dump_real_mass
def get_dynamic_dump_set(self):
return self.dynamic_dump_set
# 更新卸载设备卸载时间
def update_dump_unloadtime(self):
self.unloading_time = np.zeros(self.dynamic_dump_num)
for dump_id in self.dump_uuid_to_index_dict.keys():
ave_unload_time = 0
unload_count = 0
try:
for query in (
session_mysql.query(JobRecord.start_time, JobRecord.end_time)
.join(Equipment, JobRecord.equipment_id == Equipment.equipment_id)
.filter(Equipment.id == dump_id, JobRecord.end_time != None)
.order_by(JobRecord.start_time.desc())
.limit(10)
):
ave_unload_time = ave_unload_time + float(
(query.end_time - query.start_time)
/ timedelta(hours=0, minutes=1, seconds=0)
)
unload_count = unload_count + 1
self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = (
ave_unload_time / unload_count
)
except Exception as es:
logger.error(f"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)")
logger.error(es)
self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = 5.00
# print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]])
# 更新卸载设备出入时间
def update_dump_entrance_exit_time(self):
self.entrance_time = np.zeros(self.dynamic_dump_num)
self.exit_time = np.zeros(self.dynamic_dump_num)
now = datetime.now().strftime("%Y-%m-%d")
for dump_id in self.dump_uuid_to_index_dict.keys():
try:
for query in (
session_mysql.query(WorkRecord)
.filter(
WorkRecord.equipment_id == dump_id, WorkRecord.work_day > now
)
.first()
):
self.entrance_time[self.dump_uuid_to_index_dict[dump_id]] = float(
query.load_entrance_time / query.load_entrance_count
)
self.exit_time[self.dump_uuid_to_index_dict[dump_id]] = float(
query.exit_entrance_time / query.exit_entrance_count
)
except Exception as es:
logger.error(f"卸载设备 {dump_id} 出入场时间信息缺失, 已设为默认值(1min)")
logger.error(es)
self.entrance_time[self.dump_uuid_to_index_dict[dump_id]] = 0.50
self.exit_time[self.dump_uuid_to_index_dict[dump_id]] = 0.50
# 读取出入场时间
def get_unloading_task_time(self):
unloading_time = self.unloading_time
dump_entrance_time = self.entrance_time
dump_exit_time = self.exit_time
unloading_task_time = unloading_time + dump_entrance_time + dump_exit_time
return unloading_task_time
# 更新卸载设备实际卸载量
def update_actual_unload_thoughout(self):
self.cur_dump_real_mass = np.zeros(self.dynamic_dump_num)
now = datetime.now().strftime("%Y-%m-%d")
for dump_id in self.dump_uuid_to_index_dict.keys():
for query in (
session_mysql.query(LoadInfo)
.join(Equipment, LoadInfo.dump_id == Equipment.equipment_id)
.filter(Equipment.id == dump_id, LoadInfo.time > now)
.order_by(LoadInfo.time.desc())
.all()
):
# print("time:", query.time)
# print("load_weight:", )
self.cur_dump_real_mass[self.dump_uuid_to_index_dict[dump_id]] = (
self.cur_dump_real_mass[self.dump_uuid_to_index_dict[dump_id]]
+ query.load_weight
)
def period_update(self):
print("Dump update!")
# 装载周期参数
self.period_map_para_load()
self.period_walk_para_load()
# # 初始化卸载设备可用时间
# self.cur_dump_ava_time = np.full(self.dynamic_dump_num,
# (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
# seconds=0))
# 用于动态调度的卸载设备
self.dynamic_dump_set = set(update_autodisp_dump())
self.dynamic_dump_num = len(self.dynamic_dump_set)
# 计算平均卸载时间
self.update_dump_unloadtime()
# 计算实时卸载量
self.update_actual_unload_thoughout()
# 卸载目标产量
self.dump_target_mass = np.full(self.dynamic_dump_num, dump_target_mass)
# # 同步虚拟卸载量
# self.sim_dump_real_mass = copy.deepcopy(self.cur_dump_real_mass)
# # 计算卸载设备预估产量
# self.update_pre_unload_throughout()
\ No newline at end of file
#!E:\Pycharm Projects\Waytous
# -*- coding: utf-8 -*-
# @Time : 2021/8/24 11:28
# @Author : Opfer
# @Site :
# @File : excavator.py
# @Software: PyCharm
from traffic_flow.traffic_flow_planner import *
from static_data_process import *
from para_config import *
from settings import *
# 挖机设备类
class ExcavatorInfo(WalkManage):
def __init__(self):
# 装载设备数量
self.dynamic_excavator_num = len(dynamic_excavator_set)
# 目标产量
self.excavator_target_mass = np.zeros(self.dynamic_excavator_num)
# 真实实际产量
self.cur_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
# # 预计产量(包含正在驶往目的地的矿卡载重)
# self.pre_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass)
# # 模拟实际产量(防止调度修改真实产量)
# self.sim_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
# # 真实设备可用时间
# self.cur_excavator_ava_time = np.zeros(self.dynamic_excavator_num)
# # 模拟各设备可用时间(防止调度修改真实产量)
# self.sim_excavator_ava_time = np.zeros(self.dynamic_excavator_num)
# 用于动态调度的卸载设备集合
self.dynamic_excavator_set = []
# 开始时间
self.start_time = datetime.now()
# 装载时间
self.loading_time = np.zeros(self.dynamic_excavator_num)
# 入场时间
self.entrance_time = np.zeros(self.dynamic_excavator_num)
# 出场时间
self.exit_time = np.zeros(self.dynamic_excavator_num)
# def period_map_para_load(self):
# # 关系映射
# self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
# self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
# self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
# self.dump_uuid_to_unload_area_uuid_dict = device_map.dump_uuid_to_unload_area_uuid_dict
# self.excavator_uuid_to_load_area_uuid_dict = device_map.excavator_uuid_to_load_area_uuid_dict
# self.excavator_index_to_load_area_index_dict = device_map.excavator_index_to_load_area_index_dict
# self.dump_index_to_unload_area_index_dict = device_map.dump_index_to_unload_area_index_dict
#
# def period_walk_para_load(self):
# self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
# self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
def get_loading_time(self):
return self.loading_time
def get_excavator_num(self):
return self.dynamic_excavator_num
def get_excavator_target_mass(self):
return self.excavator_target_mass
def get_excavator_actual_mass(self):
return self.cur_excavator_real_mass
def get_dynamic_excavator_set(self):
return self.dynamic_excavator_set
# 更新挖机装载时间
def update_excavator_loadtime(self):
self.loading_time = np.zeros(self.dynamic_excavator_num)
for excavator_id in self.excavator_uuid_to_index_dict.keys():
ave_load_time = 0
load_count = 0
try:
for query in (
session_mysql.query(JobRecord.start_time, JobRecord.end_time)
.join(Equipment, JobRecord.equipment_id == Equipment.equipment_id)
.filter(Equipment.id == excavator_id, JobRecord.end_time != None)
.order_by(JobRecord.start_time.desc())
.limit(10)
):
ave_load_time = ave_load_time + float(
(query.end_time - query.start_time)
/ timedelta(hours=0, minutes=1, seconds=0)
)
load_count = load_count + 1
self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = (
ave_load_time / load_count
)
except Exception as es:
logger.error(f"挖机 {excavator_id} 装载时间信息缺失, 已设为默认值(1min)")
logger.error(es)
self.loading_time[
self.excavator_uuid_to_index_dict[excavator_id]
] = 5.00
# 更新挖机设备出入时间
def update_excavator_entrance_exit_time(self):
self.entrance_time = np.zeros(self.dynamic_excavator_num)
self.exit_time = np.zeros(self.dynamic_excavator_num)
now = datetime.now().strftime("%Y-%m-%d")
for excavator_id in self.excavator_uuid_to_index_dict.keys():
try:
for query in (
session_mysql.query(WorkRecord)
.filter(
WorkRecord.equipment_id == excavator_id,
WorkRecord.work_day > now,
)
.first()
):
self.entrance_time[
self.excavator_uuid_to_index_dict[excavator_id]
] = float(query.load_entrance_time / query.load_entrance_count)
self.exit_time[
self.excavator_uuid_to_index_dict[excavator_id]
] = float(query.exit_entrance_time / query.exit_entrance_count)
except Exception as es:
logger.error(f"挖机设备 {excavator_id} 出入场时间信息缺失, 已设为默认值(1min)")
logger.error(es)
self.entrance_time[
self.excavator_uuid_to_index_dict[excavator_id]
] = 0.50
self.exit_time[self.excavator_uuid_to_index_dict[excavator_id]] = 0.50
# 读取出入场时间
def get_loading_task_time(self):
loading_time = self.loading_time
excavator_entrance_time = self.entrance_time
excavator_exit_time = self.exit_time
loading_task_time = loading_time + excavator_entrance_time + excavator_exit_time
return loading_task_time
# 更新挖机实际装载量
def update_actual_load_throughout(self):
self.cur_excavator_real_mass = np.zeros(self.dynamic_excavator_num)
now = datetime.now().strftime("%Y-%m-%d")
for excavator_id in self.excavator_uuid_to_index_dict.keys():
# print(excavator_id)
for query in (
session_mysql.query(LoadInfo)
.join(Equipment, LoadInfo.dump_id == Equipment.equipment_id)
.filter(Equipment.id == excavator_id, LoadInfo.time > now)
.order_by(LoadInfo.time.desc())
.all()
):
# print("time:", query.time)
# print("load_weight:", )
self.cur_excavator_real_mass[
self.excavator_uuid_to_index_dict[excavator_id]
] = (
self.cur_excavator_real_mass[
self.excavator_uuid_to_index_dict[excavator_id]
]
+ query.load_weight
)
def period_update(self):
print("Excavator update!")
# 装载周期参数
self.period_map_para_load()
self.period_walk_para_load()
# # 初始化挖机可用时间
# self.cur_excavator_ava_time = np.full(self.dynamic_excavator_num,
# (datetime.now() - self.start_time) / timedelta(hours=0, minutes=1,
# seconds=0))
# 用于动态调度的挖机设备
self.dynamic_excavator_set = set(update_autodisp_excavator())
self.dynamic_excavator_num = len(self.dynamic_excavator_set)
# 计算平均装载时间
self.update_excavator_loadtime()
# 计算实时装载量
self.update_actual_load_throughout()
# 挖机目标产量
self.excavator_target_mass = np.full(
self.dynamic_excavator_num, excavator_target_mass
)
# # 同步挖机虚拟装载量
# self.sim_excavator_real_mass = copy.deepcopy(self.cur_excavator_real_mass)
# # 计算卸载设备预估产量
# self.update_pre_load_throughout()
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -24,7 +24,7 @@ import time
# 创建日志
########################################################################################################################
# 日志存储地址
log_path = '/usr/local/fleet-log/dispatch'
log_path = "/usr/local/fleet-log/dispatch"
# # 创建日志目录
# if not os.path.exists(log_path):
......@@ -39,11 +39,13 @@ logger.setLevel(logging.INFO)
# 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("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10)
filehandler = logging.handlers.RotatingFileHandler(
"./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10
)
# 设置后缀名称,跟strftime的格式一样
filehandler.suffix = "%Y-%m-%d_%H-%M.log"
formatter = logging.Formatter('%(asctime)s - %(name)s: %(levelname)s %(message)s')
formatter = logging.Formatter("%(asctime)s - %(name)s: %(levelname)s %(message)s")
filehandler.setFormatter(formatter)
logger.addHandler(filehandler)
......@@ -51,12 +53,12 @@ logger.addHandler(filehandler)
# 连接reids
########################################################################################################################
# redis 5 存储设备状态
pool5 = ConnectionPool(host='192.168.28.111', db=5, port=6379, password='Huituo@123')
pool5 = ConnectionPool(host="192.168.28.111", db=5, port=6379, password="Huituo@123")
redis5 = StrictRedis(connection_pool=pool5)
# redis 2 存储派车计划
pool2 = ConnectionPool(host='192.168.28.111', db=2, port=6379, password='Huituo@123')
pool2 = ConnectionPool(host="192.168.28.111", db=2, port=6379, password="Huituo@123")
redis2 = StrictRedis(connection_pool=pool2)
......@@ -66,9 +68,15 @@ redis2 = StrictRedis(connection_pool=pool2)
Base = declarative_base()
try:
engine_mysql = create_engine('mysql+mysqlconnector://root:%s@192.168.28.111:3306/waytous' % quote('Huituo@123'))
engine_postgre = create_engine('postgresql://postgres:%s@192.168.28.111:5432/shenbao_2021520' % quote('Huituo@123'))
engine_mysql = create_engine(
"mysql+mysqlconnector://root:%s@192.168.28.111:3306/waytous"
% quote("Huituo@123")
)
engine_postgre = create_engine(
"postgresql://postgres:%s@192.168.28.111:5432/shenbao_2021520"
% quote("Huituo@123")
)
# 创建DBsession_mysql类型:
DBsession_mysql = sessionmaker(bind=engine_mysql)
......
......@@ -39,8 +39,12 @@ def build_work_area_uuid_index_map():
raise Exception("无路网信息")
except Exception as es:
logger.error(es)
return load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict
return (
load_area_uuid_to_index_dict,
unload_area_uuid_to_index_dict,
load_area_index_to_uuid_dict,
unload_area_index_to_uuid_dict,
)
def build_park_uuid_index_map():
......@@ -98,7 +102,9 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
try:
excavator_num = 0
dump_num = 0
for item in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all():
for item in (
session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all()
):
# excavator_id <-> excavator_index
# dump_id <-> dump_index
# excavator_id <-> load_area_id
......@@ -113,29 +119,33 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
dump_uuid_to_index_dict[dump_id] = dump_num
dump_index_to_uuid_dict[dump_num] = dump_id
dump_uuid_to_unload_area_uuid_dict[dump_id] = unload_area_id
dump_index_to_unload_area_index_dict[dump_uuid_to_index_dict[dump_id]] = \
unload_area_uuid_to_index_dict[unload_area_id]
dump_index_to_unload_area_index_dict[
dump_uuid_to_index_dict[dump_id]
] = unload_area_uuid_to_index_dict[unload_area_id]
dump_num = dump_num + 1
if excavator_id not in excavator_uuid_to_index_dict:
excavator_uuid_to_index_dict[excavator_id] = excavator_num
excavator_index_to_uuid_dict[excavator_num] = excavator_id
excavator_uuid_to_load_area_uuid_dict[excavator_id] = load_area_id
excavator_index_to_load_area_index_dict[excavator_uuid_to_index_dict[excavator_id]] = \
load_area_uuid_to_index_dict[load_area_id]
excavator_index_to_load_area_index_dict[
excavator_uuid_to_index_dict[excavator_id]
] = load_area_uuid_to_index_dict[load_area_id]
excavator_num = excavator_num + 1
if excavator_num < 1 or dump_num < 1:
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备映射失败")
except Exception as es:
logger.warning(es)
return {'excavator_uuid_to_index_dict': excavator_uuid_to_index_dict,
'dump_uuid_to_index_dict': dump_uuid_to_index_dict,
'excavator_index_to_uuid_dict': excavator_index_to_uuid_dict,
'dump_index_to_uuid_dict': dump_index_to_uuid_dict,
'dump_uuid_to_unload_area_uuid_dict': dump_uuid_to_unload_area_uuid_dict,
'excavator_uuid_to_load_area_uuid_dict': excavator_uuid_to_load_area_uuid_dict,
'excavator_index_to_load_area_index_dict': excavator_index_to_load_area_index_dict,
'dump_index_to_unload_area_index_dict': dump_index_to_unload_area_index_dict}
return {
"excavator_uuid_to_index_dict": excavator_uuid_to_index_dict,
"dump_uuid_to_index_dict": dump_uuid_to_index_dict,
"excavator_index_to_uuid_dict": excavator_index_to_uuid_dict,
"dump_index_to_uuid_dict": dump_index_to_uuid_dict,
"dump_uuid_to_unload_area_uuid_dict": dump_uuid_to_unload_area_uuid_dict,
"excavator_uuid_to_load_area_uuid_dict": excavator_uuid_to_load_area_uuid_dict,
"excavator_index_to_load_area_index_dict": excavator_index_to_load_area_index_dict,
"dump_index_to_unload_area_index_dict": dump_index_to_unload_area_index_dict,
}
def update_truck_uuid_index_map(dynamic_truck_set):
......@@ -149,8 +159,10 @@ def update_truck_uuid_index_map(dynamic_truck_set):
truck_index_to_uuid_dict[truck_num] = truck_id
truck_num = truck_num + 1
return {'truck_uuid_to_index_dict': truck_uuid_to_index_dict,
'truck_index_to_uuid_dict': truck_index_to_uuid_dict}
return {
"truck_uuid_to_index_dict": truck_uuid_to_index_dict,
"truck_index_to_uuid_dict": truck_index_to_uuid_dict,
}
def update_total_truck():
......@@ -158,7 +170,11 @@ def update_total_truck():
truck_list = []
try:
query = np.array(session_mysql.query(Equipment).filter_by(device_type=1, isdeleted=0, disabled=0).all())
query = np.array(
session_mysql.query(Equipment)
.filter_by(device_type=1, isdeleted=0, disabled=0)
.all()
)
# for item in query:
# json_value = json.loads(redis2.get(item.equipment_id))
......@@ -182,7 +198,9 @@ def update_fixdisp_truck():
fixed_truck_list = []
try:
query = np.array(session_mysql.query(Dispatch).filter_by(isauto=0, isdeleted=0).all())
query = np.array(
session_mysql.query(Dispatch).filter_by(isauto=0, isdeleted=0).all()
)
for item in query:
fixed_truck_list.append(item.truck_id)
......@@ -197,7 +215,9 @@ def update_autodisp_excavator():
# 用于动态派车的挖机集合
dynamic_excavator_list = []
try:
for item in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all():
for item in (
session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all()
):
dynamic_excavator_list.append(item.exactor_id)
if len(dynamic_excavator_list) < 1:
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
......@@ -211,7 +231,9 @@ def update_autodisp_dump():
# 用于动态调度的卸载点集合
dynamic_dump_list = []
try:
for item in session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all():
for item in (
session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all()
):
dynamic_dump_list.append(item.dump_id)
if len(dynamic_dump_list) < 1:
raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
......
......@@ -296,8 +296,10 @@ class Equipment(Base):
equipment_state = Column(Integer)
isdeleted = Column(Integer)
disabled = Column(Integer)
bind_list = Column(VARCHAR(1000))
only_allowed = Column(Integer)
def __init__(self, id, equipment_id, device_name, device_type, equipment_spec, equipment_state, isdeleted, disabled):
def __init__(self, id, equipment_id, device_name, device_type, equipment_spec, equipment_state, isdeleted, disabled, bind_list, only_allowed):
self.id = id
self.equipment_id = equipment_id
self.device_name = device_name
......@@ -306,6 +308,8 @@ class Equipment(Base):
self.equipment_state = equipment_state
self.isdeleted = isdeleted
self.disabled = disabled
self.bind_list = bind_list
self.only_allowed = only_allowed
class EquipmentSpec(Base):
__tablename__ = 'sys_equipment_spec'
......@@ -317,7 +321,7 @@ class EquipmentSpec(Base):
def __init__(self, id, capacity, mining_abililty):
self.id = id
self.capacity = capacity
self.mining_abililty = self.mining_abililty
self.mining_abililty = mining_abililty
class LoadInfo(Base):
__tablename__ = 'sys_loadinfo'
......@@ -347,7 +351,7 @@ class JobRecord(Base):
self.end_time = end_time
self.work_type = work_type
class WrokRecord(Base):
class WorkRecord(Base):
__tablename__ = 'statistic_work_record'
equipment_id = Column(VARCHAR(50), primary_key=True)
......
......@@ -274,6 +274,3 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
logger.error(es)
logger.error("车流规划类比初始化异常")
return tra_para
Traffic_para_init(2, 2, 2, 2)
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