Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
integrated-scheduling
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
张晓彤
integrated-scheduling
Commits
7852b5be
Commit
7852b5be
authored
Oct 12, 2021
by
Allvey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修复未知BUG
parent
2ae19283
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
255 additions
and
241 deletions
+255
-241
dump.py
equipment/dump.py
+38
-38
excavator.py
equipment/excavator.py
+54
-50
truck.py
equipment/truck.py
+61
-61
para_config.py
para_config.py
+13
-12
path_plannner.py
path_plan/path_plannner.py
+8
-5
realtime_dispatch.py
realtime_dispatch.py
+70
-68
static_data_process.py
static_data_process.py
+4
-0
traffic_flow_info.py
traffic_flow/traffic_flow_info.py
+5
-5
traffic_flow_planner.py
traffic_flow/traffic_flow_planner.py
+2
-2
No files found.
equipment/dump.py
View file @
7852b5be
...
@@ -64,26 +64,26 @@ class DumpInfo(WalkManage):
...
@@ -64,26 +64,26 @@ class DumpInfo(WalkManage):
for
dump_id
in
self
.
dump_uuid_to_index_dict
.
keys
():
for
dump_id
in
self
.
dump_uuid_to_index_dict
.
keys
():
ave_unload_time
=
0
ave_unload_time
=
0
unload_count
=
0
unload_count
=
0
try
:
#
try:
for
query
in
(
#
for query in (
session_mysql
.
query
(
JobRecord
.
start_time
,
JobRecord
.
end_time
)
#
session_mysql.query(JobRecord.start_time, JobRecord.end_time)
.
join
(
Equipment
,
JobRecord
.
equipment_id
==
Equipment
.
equipment_id
)
#
.join(Equipment, JobRecord.equipment_id == Equipment.equipment_id)
.
filter
(
Equipment
.
id
==
dump_id
,
JobRecord
.
end_time
!=
None
)
#
.filter(Equipment.id == dump_id, JobRecord.end_time != None)
.
order_by
(
JobRecord
.
start_time
.
desc
())
#
.order_by(JobRecord.start_time.desc())
.
limit
(
10
)
#
.limit(10)
):
#
):
ave_unload_time
=
ave_unload_time
+
float
(
#
ave_unload_time = ave_unload_time + float(
(
query
.
end_time
-
query
.
start_time
)
#
(query.end_time - query.start_time)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
#
/ timedelta(hours=0, minutes=1, seconds=0)
)
#
)
unload_count
=
unload_count
+
1
#
unload_count = unload_count + 1
self
.
unloading_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
(
#
self.unloading_time[self.dump_uuid_to_index_dict[dump_id]] = (
ave_unload_time
/
unload_count
#
ave_unload_time / unload_count
)
#
)
except
Exception
as
es
:
#
except Exception as es:
logger
.
error
(
f
"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)"
)
#
logger.error(f"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)")
logger
.
error
(
es
)
#
logger.error(es)
self
.
unloading_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
5.00
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]])
# print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]])
# 更新卸载设备出入时间
# 更新卸载设备出入时间
...
@@ -93,24 +93,24 @@ class DumpInfo(WalkManage):
...
@@ -93,24 +93,24 @@ class DumpInfo(WalkManage):
now
=
datetime
.
now
()
.
strftime
(
"
%
Y-
%
m-
%
d"
)
now
=
datetime
.
now
()
.
strftime
(
"
%
Y-
%
m-
%
d"
)
for
dump_id
in
self
.
dump_uuid_to_index_dict
.
keys
():
for
dump_id
in
self
.
dump_uuid_to_index_dict
.
keys
():
try
:
#
try:
for
query
in
(
#
for query in (
session_mysql
.
query
(
WorkRecord
)
#
session_mysql.query(WorkRecord)
.
filter
(
#
.filter(
WorkRecord
.
equipment_id
==
dump_id
,
WorkRecord
.
work_day
>=
now
#
WorkRecord.equipment_id == dump_id, WorkRecord.work_day >= now
)
#
)
.
first
()
#
.first()
):
#
):
self
.
entrance_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
float
(
#
self.entrance_time[self.dump_uuid_to_index_dict[dump_id]] = float(
query
.
load_entrance_time
/
query
.
load_entrance_count
#
query.load_entrance_time / query.load_entrance_count
)
#
)
self
.
exit_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
float
(
#
self.exit_time[self.dump_uuid_to_index_dict[dump_id]] = float(
query
.
exit_entrance_time
/
query
.
exit_entrance_count
#
query.exit_entrance_time / query.exit_entrance_count
)
#
)
except
Exception
as
es
:
#
except Exception as es:
logger
.
error
(
f
"卸载设备 {dump_id} 出入场时间信息缺失, 已设为默认值(1min)"
)
#
logger.error(f"卸载设备 {dump_id} 出入场时间信息缺失, 已设为默认值(1min)")
logger
.
error
(
es
)
#
logger.error(es)
self
.
entrance_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
0.50
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
self
.
exit_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
0.50
def
update_dump_material
(
self
):
def
update_dump_material
(
self
):
...
...
equipment/excavator.py
View file @
7852b5be
...
@@ -30,9 +30,9 @@ class ExcavatorInfo(WalkManage):
...
@@ -30,9 +30,9 @@ class ExcavatorInfo(WalkManage):
# 挖机对应物料类型
# 挖机对应物料类型
self
.
excavator_material
=
{}
self
.
excavator_material
=
{}
# 挖机设备优先级
# 挖机设备优先级
self
.
excavator_priority_coefficient
=
np
.
ones
(
dynamic_excavator_num
)
self
.
excavator_priority_coefficient
=
np
.
ones
(
self
.
dynamic_excavator_num
)
# 挖机物料优先级
# 挖机物料优先级
self
.
excavator_material_priority
=
np
.
ones
(
dynamic_excavator_num
)
self
.
excavator_material_priority
=
np
.
ones
(
self
.
dynamic_excavator_num
)
# 初始化读取映射及路网
# 初始化读取映射及路网
self
.
period_map_para_load
()
self
.
period_map_para_load
()
...
@@ -58,28 +58,30 @@ class ExcavatorInfo(WalkManage):
...
@@ -58,28 +58,30 @@ class ExcavatorInfo(WalkManage):
for
excavator_id
in
self
.
excavator_uuid_to_index_dict
.
keys
():
for
excavator_id
in
self
.
excavator_uuid_to_index_dict
.
keys
():
ave_load_time
=
0
ave_load_time
=
0
load_count
=
0
load_count
=
0
try
:
# try:
for
query
in
(
# for query in (
session_mysql
.
query
(
JobRecord
.
start_time
,
JobRecord
.
end_time
)
# session_mysql.query(JobRecord.start_time, JobRecord.end_time)
.
join
(
Equipment
,
JobRecord
.
equipment_id
==
Equipment
.
equipment_id
)
# .join(Equipment, JobRecord.equipment_id == Equipment.equipment_id)
.
filter
(
Equipment
.
id
==
excavator_id
,
JobRecord
.
end_time
!=
None
)
# .filter(Equipment.id == excavator_id, JobRecord.end_time != None)
.
order_by
(
JobRecord
.
start_time
.
desc
())
# .order_by(JobRecord.start_time.desc())
.
limit
(
10
)
# .limit(10)
):
# ):
ave_load_time
=
ave_load_time
+
float
(
# ave_load_time = ave_load_time + float(
(
query
.
end_time
-
query
.
start_time
)
# (query.end_time - query.start_time)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)
# / timedelta(hours=0, minutes=1, seconds=0)
)
# )
load_count
=
load_count
+
1
# load_count = load_count + 1
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
(
# self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = (
ave_load_time
/
load_count
# ave_load_time / load_count
)
# )
except
Exception
as
es
:
# except Exception as es:
logger
.
error
(
f
"挖机 {excavator_id} 装载时间信息缺失, 已设为默认值(1min)"
)
# logger.error(f"挖机 {excavator_id} 装载时间信息缺失, 已设为默认值(1min)")
logger
.
error
(
es
)
# logger.error(es)
print
(
"loading_time"
,
self
.
loading_time
)
logger
.
info
(
"loading_time"
)
print
(
"excavator_uuid_to_index_dict"
,
self
.
excavator_uuid_to_index_dict
)
logger
.
info
(
self
.
loading_time
)
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
5.00
logger
.
info
(
"excavator_uuid_to_index_dict"
)
logger
.
info
(
self
.
excavator_uuid_to_index_dict
)
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
5.00
# 更新挖机设备出入时间
# 更新挖机设备出入时间
def
update_excavator_entrance_exit_time
(
self
):
def
update_excavator_entrance_exit_time
(
self
):
...
@@ -88,28 +90,28 @@ class ExcavatorInfo(WalkManage):
...
@@ -88,28 +90,28 @@ class ExcavatorInfo(WalkManage):
now
=
datetime
.
now
()
.
strftime
(
"
%
Y-
%
m-
%
d"
)
now
=
datetime
.
now
()
.
strftime
(
"
%
Y-
%
m-
%
d"
)
for
excavator_id
in
self
.
excavator_uuid_to_index_dict
.
keys
():
for
excavator_id
in
self
.
excavator_uuid_to_index_dict
.
keys
():
try
:
#
try:
for
query
in
(
#
for query in (
session_mysql
.
query
(
WorkRecord
)
#
session_mysql.query(WorkRecord)
.
filter
(
#
.filter(
WorkRecord
.
equipment_id
==
excavator_id
,
#
WorkRecord.equipment_id == excavator_id,
WorkRecord
.
work_day
>=
now
,
#
WorkRecord.work_day >= now,
)
#
)
.
first
()
#
.first()
):
#
):
self
.
entrance_time
[
#
self.entrance_time[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
#
self.excavator_uuid_to_index_dict[excavator_id]
]
=
float
(
query
.
load_entrance_time
/
query
.
load_entrance_count
)
#
] = float(query.load_entrance_time / query.load_entrance_count)
self
.
exit_time
[
#
self.exit_time[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
#
self.excavator_uuid_to_index_dict[excavator_id]
]
=
float
(
query
.
exit_entrance_time
/
query
.
exit_entrance_count
)
#
] = float(query.exit_entrance_time / query.exit_entrance_count)
except
Exception
as
es
:
#
except Exception as es:
logger
.
error
(
f
"挖机设备 {excavator_id} 出入场时间信息缺失, 已设为默认值(1min)"
)
#
logger.error(f"挖机设备 {excavator_id} 出入场时间信息缺失, 已设为默认值(1min)")
logger
.
error
(
es
)
#
logger.error(es)
self
.
entrance_time
[
self
.
entrance_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
]
=
0.50
]
=
0.50
self
.
exit_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
):
def
get_loading_task_time
(
self
):
...
@@ -124,7 +126,8 @@ class ExcavatorInfo(WalkManage):
...
@@ -124,7 +126,8 @@ class ExcavatorInfo(WalkManage):
return
loading_task_time
return
loading_task_time
def
update_excavator_material
(
self
):
def
update_excavator_material
(
self
):
print
(
"here"
,
self
.
dynamic_excavator_set
)
logger
.
info
(
"self.dynamic_excavator_set"
)
logger
.
info
(
self
.
dynamic_excavator_set
)
for
excavator_id
in
self
.
dynamic_excavator_set
:
for
excavator_id
in
self
.
dynamic_excavator_set
:
try
:
try
:
load_area_id
=
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator_id
,
isdeleted
=
0
,
isauto
=
1
)
.
first
()
.
load_area_id
load_area_id
=
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator_id
,
isdeleted
=
0
,
isauto
=
1
)
.
first
()
.
load_area_id
...
@@ -135,12 +138,13 @@ class ExcavatorInfo(WalkManage):
...
@@ -135,12 +138,13 @@ class ExcavatorInfo(WalkManage):
def
update_excavator_priority
(
self
):
def
update_excavator_priority
(
self
):
print
(
"dynamic_excavator_set"
,
self
.
dynamic_excavator_set
)
logger
.
info
(
"dynamic_excavator_set"
)
logger
.
info
(
self
.
dynamic_excavator_set
)
for
excavator_id
in
self
.
dynamic_excavator_set
:
for
excavator_id
in
self
.
dynamic_excavator_set
:
item
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
)
.
first
()
item
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
)
.
first
()
print
(
"excavator_priority_coefficient"
,
self
.
excavator_priority_coefficient
)
logger
.
info
(
"excavator_priority_coefficient"
)
print
(
self
.
excavator_uuid_to_index_dic
t
)
logger
.
info
(
self
.
excavator_priority_coefficien
t
)
self
.
excavator_priority_coefficient
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
item
.
priority
+
1
self
.
excavator_priority_coefficient
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
item
.
priority
+
1
# 物料优先级控制
# 物料优先级控制
...
...
equipment/truck.py
View file @
7852b5be
...
@@ -65,9 +65,9 @@ class TruckInfo(WalkManage):
...
@@ -65,9 +65,9 @@ class TruckInfo(WalkManage):
# 矿卡绑定物料
# 矿卡绑定物料
self
.
truck_material_bind
=
{}
self
.
truck_material_bind
=
{}
# 矿卡绑定物料modify
# 矿卡绑定物料modify
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
dynamic_dump_num
),
0
)
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_dump_num"
)
),
0
)
# self.excavator_material_bind_modify =np.zeros(self.dynamic_truck_num)
# self.excavator_material_bind_modify =np.zeros(self.dynamic_truck_num)
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
dynamic_excavator_num
),
0
)
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)
),
0
)
# 初始化读取映射及路网
# 初始化读取映射及路网
self
.
period_map_para_load
()
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
self
.
period_walk_para_load
()
...
@@ -226,61 +226,61 @@ class TruckInfo(WalkManage):
...
@@ -226,61 +226,61 @@ class TruckInfo(WalkManage):
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
warning
(
es
)
logger
.
warning
(
es
)
try
:
#
try:
# 若矿卡状态为空运
# 若矿卡状态为空运
if
task
in
empty_task_set
:
if
task
in
empty_task_set
:
last_unload_time
=
self
.
relative_last_unload_time
[
last_unload_time
=
self
.
relative_last_unload_time
[
self
.
truck_index_to_uuid_dict
[
i
]
self
.
truck_index_to_uuid_dict
[
i
]
]
]
# 开始区域id
# 开始区域id
start_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
start_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
item
.
dump_id
item
.
dump_id
]
]
# 开始区域序号
# 开始区域序号
start_area_index
=
unload_area_uuid_to_index_dict
[
start_area_id
]
start_area_index
=
unload_area_uuid_to_index_dict
[
start_area_id
]
end_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
end_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
item
.
exactor_id
]
]
end_area_index
=
load_area_uuid_to_index_dict
[
end_area_id
]
end_area_index
=
load_area_uuid_to_index_dict
[
end_area_id
]
self
.
truck_current_trip
[
i
]
=
[
self
.
truck_current_trip
[
i
]
=
[
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
]
]
self
.
cur_truck_reach_excavator
[
i
]
=
(
self
.
cur_truck_reach_excavator
[
i
]
=
(
last_unload_time
last_unload_time
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
)
)
# 若矿卡状态为重载
# 若矿卡状态为重载
elif
task
in
heavy_task_set
:
elif
task
in
heavy_task_set
:
# print("读取重载行程")
# print("读取重载行程")
# print(item.exactor_id, item.dump_id)
# print(item.exactor_id, item.dump_id)
last_load_time
=
self
.
relative_last_load_time
[
last_load_time
=
self
.
relative_last_load_time
[
self
.
truck_index_to_uuid_dict
[
i
]
self
.
truck_index_to_uuid_dict
[
i
]
]
]
# 开始区域id
# 开始区域id
start_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
start_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
item
.
exactor_id
]
]
# 开始区域序号
# 开始区域序号
start_area_index
=
load_area_uuid_to_index_dict
[
start_area_id
]
start_area_index
=
load_area_uuid_to_index_dict
[
start_area_id
]
# 结束区域id
# 结束区域id
end_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
item
.
dump_id
]
end_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
item
.
dump_id
]
# 结束区域序号
# 结束区域序号
end_area_index
=
unload_area_uuid_to_index_dict
[
end_area_id
]
end_area_index
=
unload_area_uuid_to_index_dict
[
end_area_id
]
self
.
truck_current_trip
[
i
]
=
[
self
.
truck_current_trip
[
i
]
=
[
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
]
]
self
.
cur_truck_reach_dump
[
i
]
=
(
self
.
cur_truck_reach_dump
[
i
]
=
(
last_load_time
last_load_time
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
)
)
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
else
:
else
:
pass
pass
except
Exception
as
es
:
#
except Exception as es:
logger
.
error
(
"矿卡行程读取异常"
)
#
logger.error("矿卡行程读取异常")
logger
.
error
(
es
)
#
logger.error(es)
self
.
truck_current_trip
.
flatten
()
self
.
truck_current_trip
.
flatten
()
# print("当前矿卡行程:")
# print("当前矿卡行程:")
...
@@ -365,7 +365,7 @@ class TruckInfo(WalkManage):
...
@@ -365,7 +365,7 @@ class TruckInfo(WalkManage):
self
.
truck_excavator_exclude
=
{}
self
.
truck_excavator_exclude
=
{}
self
.
excavator_exclude_modify
=
np
.
full
(
self
.
excavator_exclude_modify
=
np
.
full
(
(
self
.
dynamic_truck_num
,
dynamic_excavator_num
),
0
(
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)
),
0
)
)
try
:
try
:
...
@@ -421,7 +421,7 @@ class TruckInfo(WalkManage):
...
@@ -421,7 +421,7 @@ class TruckInfo(WalkManage):
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
print
(
"excavator_material_bind_modify"
,
self
.
excavator_material_bind_modify
)
#
print("excavator_material_bind_modify", self.excavator_material_bind_modify)
if
truck_id
in
self
.
truck_material_bind
:
if
truck_id
in
self
.
truck_material_bind
:
...
@@ -480,9 +480,9 @@ class TruckInfo(WalkManage):
...
@@ -480,9 +480,9 @@ class TruckInfo(WalkManage):
# 矿卡绑定物料
# 矿卡绑定物料
self
.
truck_material_bind
=
{}
self
.
truck_material_bind
=
{}
# 矿卡绑定物料modify
# 矿卡绑定物料modify
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
dynamic_excavator_num
),
0
)
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)
),
0
)
# self.excavator_material_bind_modify =np.zeros(self.dynamic_truck_num)
# self.excavator_material_bind_modify =np.zeros(self.dynamic_truck_num)
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
dynamic_excavator_num
),
0
)
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)
),
0
)
def
para_period_update
(
self
):
def
para_period_update
(
self
):
...
...
para_config.py
View file @
7852b5be
...
@@ -477,18 +477,19 @@ def period_para_update():
...
@@ -477,18 +477,19 @@ def period_para_update():
global_dict
[
"distance_park_to_excavator"
]
=
walk_manage
.
distance_park_to_excavator
global_dict
[
"distance_park_to_excavator"
]
=
walk_manage
.
distance_park_to_excavator
global_dict
[
"distance_to_dump"
]
=
walk_manage
.
distance_to_dump
global_dict
[
"distance_to_dump"
]
=
walk_manage
.
distance_to_dump
print
(
"walk_manage_para"
)
logger
.
info
(
"walk_manage_para"
)
print
(
"distance_to_excavator"
,
walk_manage
.
distance_to_excavator
)
logger
.
info
(
"distance_to_excavator"
)
print
(
"distance_park_to_excavator"
,
walk_manage
.
distance_park_to_excavator
)
logger
.
info
(
walk_manage
.
distance_to_excavator
)
print
(
"distance_to_dump"
,
walk_manage
.
distance_to_dump
)
logger
.
info
(
"distance_park_to_excavator"
)
logger
.
info
(
walk_manage
.
distance_park_to_excavator
)
print
(
"excavator_uuid_to_index_dict"
,
walk_manage
.
excavator_uuid_to_index_dict
)
logger
.
info
(
"distance_to_dump"
)
print
(
"dump_uuid_to_index_dict"
,
walk_manage
.
dump_uuid_to_index_dict
)
logger
.
info
(
walk_manage
.
distance_to_dump
)
logger
.
info
(
"excavator_uuid_to_index_dict"
)
print
(
"here5"
,
walk_manage
.
distance_park_to_excavator
)
logger
.
info
(
walk_manage
.
excavator_uuid_to_index_dict
)
logger
.
info
(
"dump_uuid_to_index_dict"
)
logger
.
info
(
walk_manage
.
dump_uuid_to_index_dict
)
logger
.
info
(
"walk_manage.distance_park_to_excavator"
)
logger
.
info
(
walk_manage
.
distance_park_to_excavator
)
def
get_value
(
name
):
def
get_value
(
name
):
return
global_dict
[
name
]
return
global_dict
[
name
]
path_plan/path_plannner.py
View file @
7852b5be
...
@@ -170,7 +170,8 @@ class PathPlanner(WalkManage):
...
@@ -170,7 +170,8 @@ class PathPlanner(WalkManage):
cost_to_dump
=
np
.
zeros_like
(
get_value
(
"distance_to_dump"
))
cost_to_dump
=
np
.
zeros_like
(
get_value
(
"distance_to_dump"
))
cost_park_to_excavator
=
np
.
zeros_like
(
get_value
(
"distance_park_to_excavator"
))
cost_park_to_excavator
=
np
.
zeros_like
(
get_value
(
"distance_park_to_excavator"
))
print
(
"here4"
,
self
.
distance_park_to_excavator
)
logger
.
info
(
"distance_park_to_excavator"
)
logger
.
info
(
self
.
distance_park_to_excavator
)
# try:
# try:
# 路网权重
# 路网权重
...
@@ -179,9 +180,11 @@ class PathPlanner(WalkManage):
...
@@ -179,9 +180,11 @@ class PathPlanner(WalkManage):
# 路网禁用关系
# 路网禁用关系
walk_available
=
available_walk
()
walk_available
=
available_walk
()
print
(
"path_weight"
,
walk_weight
)
logger
.
info
(
"path_weight"
)
logger
.
info
(
walk_weight
)
print
(
"walk_avail"
,
walk_available
)
logger
.
info
(
"walk_avail"
)
logger
.
info
(
walk_available
)
# except Exception as es:
# except Exception as es:
# logger.error("无派车计划可用")
# logger.error("无派车计划可用")
...
@@ -190,8 +193,8 @@ class PathPlanner(WalkManage):
...
@@ -190,8 +193,8 @@ class PathPlanner(WalkManage):
for
j
in
range
(
get_value
(
"dynamic_excavator_num"
)):
for
j
in
range
(
get_value
(
"dynamic_excavator_num"
)):
load_area_index
=
self
.
excavator_index_to_load_area_index_dict
[
j
]
load_area_index
=
self
.
excavator_index_to_load_area_index_dict
[
j
]
unload_area_index
=
self
.
dump_index_to_unload_area_index_dict
[
i
]
unload_area_index
=
self
.
dump_index_to_unload_area_index_dict
[
i
]
print
(
"here6"
,
cost_to_excavator
)
logger
.
info
(
"cost_to_excavator"
)
print
(
"here7"
,
self
.
cost_to_load_area
)
logger
.
info
(
cost_to_excavator
)
cost_to_excavator
[
i
][
j
]
=
self
.
cost_to_load_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
cost_to_excavator
[
i
][
j
]
=
self
.
cost_to_load_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
cost_to_dump
[
i
][
j
]
=
self
.
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
*
walk_available
[
i
][
j
]
cost_to_dump
[
i
][
j
]
=
self
.
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
*
walk_available
[
i
][
j
]
...
...
realtime_dispatch.py
View file @
7852b5be
...
@@ -126,7 +126,7 @@ class Dispatcher(WalkManage):
...
@@ -126,7 +126,7 @@ class Dispatcher(WalkManage):
# 初始化挖机可用时间
# 初始化挖机可用时间
self
.
cur_excavator_ava_time
=
np
.
full
(
self
.
cur_excavator_ava_time
=
np
.
full
(
dynamic_excavator_num
,
get_value
(
"dynamic_excavator_num"
)
,
(
datetime
.
now
()
-
self
.
start_time
)
(
datetime
.
now
()
-
self
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
),
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
),
)
)
...
@@ -236,61 +236,60 @@ class Dispatcher(WalkManage):
...
@@ -236,61 +236,60 @@ class Dispatcher(WalkManage):
(
dynamic_dump_num
,
dynamic_excavator_num
)
(
dynamic_dump_num
,
dynamic_excavator_num
)
)
)
#
try:
try
:
for
i
in
range
(
dynamic_truck_num
):
for
i
in
range
(
dynamic_truck_num
):
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
i
]]
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
i
]]
end_area_index
=
truck_current_trip
[
i
][
1
]
end_area_index
=
truck_current_trip
[
i
][
1
]
start_area_index
=
truck_current_trip
[
i
][
0
]
start_area_index
=
truck_current_trip
[
i
][
0
]
if
task
in
heavy_task_set
:
if
task
in
heavy_task_set
:
self
.
goto_dump_truck_num
[
start_area_index
][
end_area_index
]
+=
1
self
.
goto_dump_truck_num
[
start_area_index
][
end_area_index
]
+=
1
self
.
actual_goto_dump_traffic_flow
[
start_area_index
][
end_area_index
]
+=
float
(
payload
[
i
])
self
.
actual_goto_dump_traffic_flow
[
start_area_index
][
end_area_index
]
+=
float
(
payload
[
i
])
# logger.info("debug2")
# logger.info("debug2")
if
task
in
empty_task_set
:
if
task
in
empty_task_set
:
self
.
goto_excavator_truck_num
[
start_area_index
][
end_area_index
]
+=
1
self
.
goto_excavator_truck_num
[
start_area_index
][
end_area_index
]
+=
1
self
.
actual_goto_excavator_traffic_flow
[
start_area_index
][
end_area_index
]
+=
float
(
payload
[
i
])
self
.
actual_goto_excavator_traffic_flow
[
start_area_index
][
end_area_index
]
+=
float
(
payload
[
i
])
self
.
actual_goto_dump_traffic_flow
=
self
.
actual_goto_dump_traffic_flow
/
(
self
.
actual_goto_dump_traffic_flow
=
self
.
actual_goto_dump_traffic_flow
/
(
self
.
distance_to_dump
.
reshape
(
dynamic_excavator_num
,
dynamic_dump_num
)
self
.
distance_to_dump
.
reshape
(
dynamic_excavator_num
,
dynamic_dump_num
)
/
(
1000
*
empty_speed
)
/
(
1000
*
empty_speed
)
+
np
.
expand_dims
(
unloading_task_time
,
axis
=
0
)
.
repeat
(
+
np
.
expand_dims
(
unloading_task_time
,
axis
=
0
)
.
repeat
(
dynamic_excavator_num
,
axis
=
0
dynamic_excavator_num
,
axis
=
0
)
)
)
)
self
.
actual_goto_excavator_traffic_flow
=
(
self
.
actual_goto_excavator_traffic_flow
=
(
self
.
actual_goto_excavator_traffic_flow
self
.
actual_goto_excavator_traffic_flow
/
(
/
(
self
.
distance_to_excavator
.
reshape
(
self
.
distance_to_excavator
.
reshape
(
dynamic_dump_num
,
dynamic_excavator_num
dynamic_dump_num
,
dynamic_excavator_num
)
)
/
(
1000
*
heavy_speed
)
/
(
1000
*
heavy_speed
)
+
np
.
expand_dims
(
loading_task_time
,
axis
=
0
)
.
repeat
(
+
np
.
expand_dims
(
loading_task_time
,
axis
=
0
)
.
repeat
(
dynamic_dump_num
,
axis
=
0
dynamic_dump_num
,
axis
=
0
)
)
)
)
)
)
logger
.
info
(
"self.goto_dump_truck_num"
)
logger
.
info
(
"self.goto_dump_truck_num"
)
logger
.
info
(
self
.
goto_dump_truck_num
)
logger
.
info
(
self
.
goto_dump_truck_num
)
logger
.
info
(
"self.actual_goto_dump_traffic_flow"
)
logger
.
info
(
"self.actual_goto_dump_traffic_flow"
)
logger
.
info
(
self
.
actual_goto_dump_traffic_flow
)
logger
.
info
(
self
.
actual_goto_dump_traffic_flow
)
logger
.
info
(
"self.goto_excavator_truck_num"
)
logger
.
info
(
self
.
goto_excavator_truck_num
)
logger
.
info
(
"self.actual_goto_excavator_traffic_flow
"
)
logger
.
info
(
"self.goto_excavator_truck_num
"
)
logger
.
info
(
self
.
actual_goto_excavator_traffic_flow
)
logger
.
info
(
self
.
goto_excavator_truck_num
)
logger
.
info
(
"self.actual_goto_excavator_traffic_flow"
)
logger
.
info
(
self
.
actual_goto_excavator_traffic_flow
)
#
except Exception as es:
except
Exception
as
es
:
# logger.error("更新不及时
1")
logger
.
error
(
"未知错误00
1"
)
#
logger.error(es)
logger
.
error
(
es
)
# print("驶往卸点实际载重")
# print("驶往卸点实际载重")
# print(self.actual_goto_dump_traffic_flow)
# print(self.actual_goto_dump_traffic_flow)
...
@@ -409,8 +408,6 @@ class Dispatcher(WalkManage):
...
@@ -409,8 +408,6 @@ class Dispatcher(WalkManage):
self
.
cur_excavator_ava_time
=
np
.
zeros
(
excavator
.
get_excavator_num
())
self
.
cur_excavator_ava_time
=
np
.
zeros
(
excavator
.
get_excavator_num
())
self
.
cur_dump_ava_time
=
np
.
zeros
(
dump
.
get_dump_num
())
self
.
cur_dump_ava_time
=
np
.
zeros
(
dump
.
get_dump_num
())
# 卡车完成装载及卸载时间(矿卡可用时间)
# 卡车完成装载及卸载时间(矿卡可用时间)
print
(
"here1"
)
print
(
truck
.
get_truck_num
())
self
.
cur_truck_ava_time
=
np
.
zeros
(
truck
.
get_truck_num
())
self
.
cur_truck_ava_time
=
np
.
zeros
(
truck
.
get_truck_num
())
# 模拟矿卡可用时间
# 模拟矿卡可用时间
self
.
sim_truck_ava_time
=
np
.
zeros
(
truck
.
get_truck_num
())
self
.
sim_truck_ava_time
=
np
.
zeros
(
truck
.
get_truck_num
())
...
@@ -512,7 +509,7 @@ class Dispatcher(WalkManage):
...
@@ -512,7 +509,7 @@ class Dispatcher(WalkManage):
else
:
else
:
transport_value
=
self
.
cost_park_to_excavator
transport_value
=
self
.
cost_park_to_excavator
print
(
"
here3
"
,
self
.
cost_park_to_excavator
)
print
(
"
self.cost_park_to_excavator
"
,
self
.
cost_park_to_excavator
)
logger
.
info
(
"transport_value"
)
logger
.
info
(
"transport_value"
)
logger
.
info
(
transport_value
)
logger
.
info
(
transport_value
)
...
@@ -714,7 +711,7 @@ class Dispatcher(WalkManage):
...
@@ -714,7 +711,7 @@ class Dispatcher(WalkManage):
self
.
reset
()
self
.
reset
()
print
(
"
here2
"
,
self
.
cur_truck_ava_time
)
print
(
"
self.cur_truck_ava_time
"
,
self
.
cur_truck_ava_time
)
# try:
# try:
...
@@ -758,22 +755,22 @@ class Dispatcher(WalkManage):
...
@@ -758,22 +755,22 @@ class Dispatcher(WalkManage):
for
truck_index
in
index
:
for
truck_index
in
index
:
if
len
(
Seq
[
truck_index
])
>
0
:
if
len
(
Seq
[
truck_index
])
>
0
:
#
try:
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
]]
# 矿卡结束当前派车计划后的目的地
# 矿卡结束当前派车计划后的目的地
end_eq_index
=
truck_current_trip
[
truck_index
][
1
]
end_eq_index
=
truck_current_trip
[
truck_index
][
1
]
# 调用调度函数,得到最优目的地序号
# 调用调度函数,得到最优目的地序号
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序列
# 写入Seq序列
Seq
[
truck_index
][
1
]
=
target_eq_index
Seq
[
truck_index
][
1
]
=
target_eq_index
#
except Exception as es:
except
Exception
as
es
:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[
truck_index_to_uuid_dict[truck]]} 派车计划计算异常')
logger
.
error
(
f
'矿卡 {truck_uuid_to_name_dict[self.
truck_index_to_uuid_dict[truck]]} 派车计划计算异常'
)
#
logger.error(es)
logger
.
error
(
es
)
try
:
try
:
...
@@ -896,6 +893,8 @@ def state_process(dispatcher):
...
@@ -896,6 +893,8 @@ def state_process(dispatcher):
print
(
"state_process!"
)
print
(
"state_process!"
)
logger
.
info
(
"state_process!"
)
# 清空数据库缓存
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
commit
()
session_mysql
.
flush
()
session_mysql
.
flush
()
...
@@ -924,18 +923,21 @@ def state_process(dispatcher):
...
@@ -924,18 +923,21 @@ def state_process(dispatcher):
# 下面三个函数保证程序定期执行,不用管他
# 下面三个函数保证程序定期执行,不用管他
def
process
(
dispatcher
):
def
process
(
dispatcher
):
# try:
try
:
# 更新周期参数
# 更新周期参数
period_para_update
()
period_para_update
()
# if dynamic_dump_num * dynamic_excavator_num == 0:
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
# raise Exception("无动态派车计划可用")
raise
Exception
(
"无动态派车计划可用"
)
para_process
(
dispatcher
)
return
if
get_value
(
"dynamic_truck_num"
)
==
0
:
state_process
(
dispatcher
)
raise
Exception
(
"无动态派车可用矿卡"
)
return
# except Exception as es:
para_process
(
dispatcher
)
# logger.warning(es)
# logger.warning("外层异常捕获")
state_process
(
dispatcher
)
except
Exception
as
es
:
logger
.
error
(
es
)
scheduler
=
sched
.
scheduler
(
time
.
time
,
time
.
sleep
)
scheduler
=
sched
.
scheduler
(
time
.
time
,
time
.
sleep
)
...
...
static_data_process.py
View file @
7852b5be
...
@@ -38,6 +38,7 @@ def build_work_area_uuid_index_map():
...
@@ -38,6 +38,7 @@ def build_work_area_uuid_index_map():
if
unload_area_num
<
1
or
load_area_num
<
1
:
if
unload_area_num
<
1
or
load_area_num
<
1
:
raise
Exception
(
"无路网信息"
)
raise
Exception
(
"无路网信息"
)
except
Exception
as
es
:
except
Exception
as
es
:
raise
Exception
(
"路网读取"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
return
(
return
(
load_area_uuid_to_index_dict
,
load_area_uuid_to_index_dict
,
...
@@ -64,6 +65,7 @@ def build_park_uuid_index_map():
...
@@ -64,6 +65,7 @@ def build_park_uuid_index_map():
if
park_num
<
1
:
if
park_num
<
1
:
raise
Exception
(
"无备停区路网信息"
)
raise
Exception
(
"无备停区路网信息"
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
info
(
"备停区路网读取"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
return
park_uuid_to_index_dict
,
park_index_to_uuid_dict
return
park_uuid_to_index_dict
,
park_index_to_uuid_dict
...
@@ -188,6 +190,7 @@ def update_total_truck():
...
@@ -188,6 +190,7 @@ def update_total_truck():
if
len
(
truck_list
)
<
1
:
if
len
(
truck_list
)
<
1
:
raise
Exception
(
"无矿卡设备可用-矿卡集合读取异常"
)
raise
Exception
(
"无矿卡设备可用-矿卡集合读取异常"
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
info
(
"矿卡读取"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
return
truck_list
return
truck_list
...
@@ -207,6 +210,7 @@ def update_fixdisp_truck():
...
@@ -207,6 +210,7 @@ def update_fixdisp_truck():
if
len
(
fixed_truck_list
)
<
1
:
if
len
(
fixed_truck_list
)
<
1
:
raise
Exception
(
"无固定派车计划可用-固定派车矿卡集合读取异常"
)
raise
Exception
(
"无固定派车计划可用-固定派车矿卡集合读取异常"
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
info
(
"派车计划读取"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
return
fixed_truck_list
return
fixed_truck_list
...
...
traffic_flow/traffic_flow_info.py
View file @
7852b5be
...
@@ -80,6 +80,7 @@ class Traffic_para(WalkManage):
...
@@ -80,6 +80,7 @@ class Traffic_para(WalkManage):
# 设置卸载点信息
# 设置卸载点信息
def
extract_dump_info
(
self
):
def
extract_dump_info
(
self
):
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
()
if
not
rule3
.
disabled
:
if
not
rule3
.
disabled
:
...
@@ -146,11 +147,10 @@ class Traffic_para(WalkManage):
...
@@ -146,11 +147,10 @@ class Traffic_para(WalkManage):
self
.
goto_unload_area_factor
[
load_area_index
][
unload_area_index
]
=
\
self
.
goto_unload_area_factor
[
load_area_index
][
unload_area_index
]
=
\
(
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
(
heavy_speed
*
1000
))
/
self
.
payload
(
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
(
heavy_speed
*
1000
))
/
self
.
payload
print
((
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
(
heavy_speed
*
1000
)))
logger
.
info
(
"goto_unload_area_factor"
)
print
(
self
.
payload
)
logger
.
info
(
self
.
goto_unload_area_factor
)
logger
.
info
(
"cost_to_unload_area"
)
print
(
"goto_unload_area_factor"
,
self
.
goto_unload_area_factor
)
logger
.
info
(
cost_to_unload_area
)
print
(
"cost_to_unload_area"
,
cost_to_unload_area
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
error
(
es
)
logger
.
error
(
es
)
logger
.
error
(
"车流规划信息计算异常"
)
logger
.
error
(
"车流规划信息计算异常"
)
...
...
traffic_flow/traffic_flow_planner.py
View file @
7852b5be
...
@@ -144,8 +144,8 @@ def traffic_flow_plan():
...
@@ -144,8 +144,8 @@ def traffic_flow_plan():
# try:
# try:
if
(
load_area_num
*
unload_area_num
*
excavator_num
*
dump_num
==
0
):
#
if (load_area_num * unload_area_num * excavator_num * dump_num == 0):
raise
Exception
(
"无派车计划可用"
)
#
raise Exception("无派车计划可用")
# 初始化参量
# 初始化参量
traffic_programme_para
=
Traffic_para_init
(
load_area_num
,
unload_area_num
,
excavator_num
,
dump_num
)
traffic_programme_para
=
Traffic_para_init
(
load_area_num
,
unload_area_num
,
excavator_num
,
dump_num
)
# traffic_programme_para = traffic_programme_para_init(load_area_num, unload_area_num, excavator_num, dump_num)
# traffic_programme_para = traffic_programme_para_init(load_area_num, unload_area_num, excavator_num, dump_num)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment