Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
I
integrated-scheduling-v3
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
1
Merge Requests
1
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-v3
Commits
c6e1edd1
Commit
c6e1edd1
authored
Oct 11, 2023
by
Allvey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码优化&二次调度触发方式优化
parent
8fbf84be
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
61 additions
and
46 deletions
+61
-46
algorithm.py
alg/algorithm.py
+22
-10
group.py
core/group.py
+13
-11
submit.py
core/submit.py
+13
-22
para_config.py
data/para_config.py
+8
-0
truck.py
equipment/truck.py
+5
-3
No files found.
alg/algorithm.py
View file @
c6e1edd1
...
...
@@ -197,12 +197,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls
=
60
*
self
.
group
.
park_to_excavator_distance
[
0
,
:]
/
1000
/
\
empty_speed
+
truck_avl_time
self
.
logger
.
info
(
'truck travel time'
)
self
.
logger
.
info
(
60
*
self
.
group
.
park_to_excavator_distance
[
0
,
:]
/
1000
/
\
empty_speed
)
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time_ls
,
group_excavator_avl_time_ls
)
# 计算行程时间
transport_value
=
truck_service_time
-
truck_avl_time
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time_ls
)
...
...
@@ -212,9 +219,6 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
info
(
"expected_travelling_schedule-truck_service_time"
)
self
.
logger
.
info
(
truck_service_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-transport_value"
)
self
.
logger
.
info
(
transport_value
)
...
...
@@ -260,7 +264,11 @@ class ExpectedTime(AlgorithmBase):
# get travelling time (List) to each group_dumps
truck_reach_time_ls
=
60
*
self
.
group
.
to_unload_area_distance
[
excavator_group_index
,
:]
\
/
1000
/
self
.
truck
.
heavy_speed
[
truck_id
]
+
truck_avl_time
/
1000
/
heavy_speed
+
truck_avl_time
self
.
logger
.
info
(
'truck travel time'
)
self
.
logger
.
info
(
60
*
self
.
group
.
to_unload_area_distance
[
excavator_group_index
,
:]
\
/
1000
/
heavy_speed
)
# get truck servicing time (List)
if
len
(
truck_reach_time_ls
)
!=
len
(
group_dump_val_time_ls
):
...
...
@@ -270,6 +278,9 @@ class ExpectedTime(AlgorithmBase):
# get trip time
transport_value
=
truck_service_time
-
truck_avl_time
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time_ls
)
...
...
@@ -279,9 +290,6 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
info
(
"expected_travelling_schedule-truck_service_time"
)
self
.
logger
.
info
(
truck_service_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-transport_value"
)
self
.
logger
.
info
(
transport_value
)
...
...
@@ -331,12 +339,19 @@ class ExpectedTime(AlgorithmBase):
truck_reach_time_ls
=
60
*
self
.
group
.
to_excavator_distance
[
unload_area_group_index
,
:]
\
/
1000
/
empty_speed
+
truck_avl_time
self
.
logger
.
info
(
'truck travel time'
)
self
.
logger
.
info
(
60
*
self
.
group
.
to_excavator_distance
[
unload_area_group_index
,
:]
\
/
1000
/
empty_speed
)
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time_ls
,
group_excavator_avl_time_ls
)
# 计算行程时间
transport_value
=
truck_service_time
-
truck_avl_time
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time_ls
)
...
...
@@ -346,9 +361,6 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
info
(
"expected_travelling_schedule-truck_service_time"
)
self
.
logger
.
info
(
truck_service_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_avl_time"
)
self
.
logger
.
info
(
truck_avl_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-transport_value"
)
self
.
logger
.
info
(
transport_value
)
...
...
core/group.py
View file @
c6e1edd1
...
...
@@ -308,8 +308,8 @@ class Group:
self
.
logger
.
info
(
"group_walk_available"
)
self
.
logger
.
info
(
self
.
group_walk_available
)
except
Exception
as
es
:
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
.
__traceback__
.
tb_lineno
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
"设备物料读取异常"
)
def
update_device_bind
(
self
):
...
...
@@ -679,9 +679,9 @@ class GroupDispatcher:
f
'{next_excavator_id} next_unload_area_id: {next_unload_area_id}'
)
except
Exception
as
es
:
self
.
logger
.
error
(
"重载车辆全智能模式-计算异常"
)
self
.
logger
.
error
(
es
.
__traceback__
.
tb_lineno
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
"重载车辆全智能模式计算异常, 执行默认调度计划"
)
def
empty_period_dispatch
(
self
,
s
:
AlgorithmBase
,
truck_dispatch
:
Mapping
[
str
,
List
[
str
]],
truck_id
:
str
,
truck_info
:
CurrentTruck
,
truck_trip
:
List
[
int
]):
...
...
@@ -715,9 +715,9 @@ class GroupDispatcher:
f
'{next_excavator_id} next_unload_area_id: {next_unload_area_id}'
)
except
Exception
as
es
:
self
.
logger
.
error
(
"空载车辆全智能模式-计算异常"
)
self
.
logger
.
error
(
es
.
__traceback__
.
tb_lineno
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
"空载车辆全智能模式计算异常, 执行默认调度计划"
)
def
truck_construct
(
self
,
truck_id
):
"""
...
...
@@ -993,9 +993,9 @@ class ReDispatcher:
else
:
continue
except
Exception
as
es
:
self
.
logger
.
error
(
"寻找最佳卸载区异常"
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
"寻找最佳卸载区异常"
)
return
best_dump_id
...
...
@@ -1018,9 +1018,11 @@ class ReDispatcher:
else
:
continue
if
excavator_id
in
self
.
group
.
group_excavators
:
self
.
logger
.
info
(
"value"
)
self
.
logger
.
info
(
value
)
if
value
[
-
1
]
==
1
and
excavator_id
in
self
.
group
.
group_excavators
:
traveling_time
=
60
*
(
value
[
0
]
/
1000
)
/
empty_speed
self
.
logger
.
info
(
f
'load_area {load_area}'
)
...
...
@@ -1045,9 +1047,9 @@ class ReDispatcher:
continue
except
Exception
as
es
:
self
.
logger
.
error
(
"寻找最佳装载区异常"
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
"寻找最佳装载区异常"
)
return
best_excavator_id
def
get_congestion_lanes
(
self
):
...
...
core/submit.py
View file @
c6e1edd1
...
...
@@ -89,12 +89,12 @@ class DispatchSubmission:
:param redispatch:
:return:
"""
if
(
task
in
[
1
,
2
])
or
(
task
==
3
and
state
==
2
)
:
# 车辆位于装载区,或车辆重载等待
if
task
in
[
1
,
2
,
3
]
:
# 车辆位于装载区,或车辆重载等待
#
if task in [1, 2]:
#
self.logger.info(f'车辆 {truck_id} 装载区调度')
#
else:
#
self.logger.info(f'车辆 {truck_id} 重载二次调度')
if
task
in
[
1
,
2
]:
self
.
logger
.
info
(
f
'车辆 {truck_id} 装载区调度'
)
else
:
self
.
logger
.
info
(
f
'车辆 {truck_id} 重载二次调度'
)
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if
dispatch_seq
[
1
]
is
None
or
(
dispatch_seq
[
1
]
not
in
DispatchInfo
.
unload_area_dump_dict
):
...
...
@@ -141,14 +141,14 @@ class DispatchSubmission:
# self.logger.error("调度结果写入异常-矿卡空载")
elif
(
task
in
[
-
2
,
4
,
5
])
or
(
task
==
0
and
state
==
2
)
:
# 车辆位于备停区或位于卸载区,或车辆空载等待
elif
task
in
[
-
2
,
4
,
5
,
0
]
:
# 车辆位于备停区或位于卸载区,或车辆空载等待
#
if task == -2:
#
self.logger.info(f'车辆 {truck_id} 备停区调度')
#
elif task in [4, 5]:
#
self.logger.info(f'车辆 {truck_id} 卸载区调度')
#
else:
#
self.logger.info(f'车辆 {truck_id} 空载二次调度')
if
task
==
-
2
:
self
.
logger
.
info
(
f
'车辆 {truck_id} 备停区调度'
)
elif
task
in
[
4
,
5
]:
self
.
logger
.
info
(
f
'车辆 {truck_id} 卸载区调度'
)
else
:
self
.
logger
.
info
(
f
'车辆 {truck_id} 空载二次调度'
)
# 查询车辆相关派车计划 dispatch_seq[next_excavator_id, next_unload_area_id]
if
dispatch_seq
[
0
]
is
None
:
...
...
@@ -173,8 +173,6 @@ class DispatchSubmission:
# try:
record
=
redis_format
(
truck_id
,
group_id
,
str
(
uuid
.
uuid1
()),
item
)
if
self
.
topo
is
not
None
:
# 车辆重载等待,且前方道路阻塞
if
self
.
topo
is
not
None
and
redispatch
:
# 车辆停车等待
...
...
@@ -193,13 +191,6 @@ class DispatchSubmission:
record
[
"isTemp"
]
=
False
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
else
:
self
.
logger
.
info
(
"正常调度前往装载区"
)
record
[
"isTemp"
]
=
False
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
else
:
pass
...
...
@@ -246,7 +237,7 @@ class DispatchSubmission:
self
.
logger
.
info
(
"======================================== 计划完成写入 ======================================="
)
else
:
raise
Exception
(
f
'车辆 {truck_id} 未正常生成派车计划'
)
raise
Exception
(
f
'车辆 {truck_id} 未正常生成派车计划
, 执行默认派车计划
'
)
except
Exception
as
es
:
# self.logger.error("group_dispatch_to_redis_error")
self
.
logger
.
error
(
es
)
...
...
data/para_config.py
View file @
c6e1edd1
...
...
@@ -319,9 +319,17 @@ def global_period_para_update():
dynamic_excavator_set
=
set
(
update_autodisp_excavator
())
dynamic_excavator_num
=
len
(
dynamic_excavator_set
)
logger
.
info
(
"可用于派车的挖机:"
)
logger
.
info
(
dynamic_excavator_num
)
logger
.
info
(
dynamic_excavator_set
)
dynamic_dump_set
=
set
(
update_autodisp_dump
())
dynamic_dump_num
=
len
(
dynamic_dump_set
)
logger
.
info
(
"可用于派车的卸点:"
)
logger
.
info
(
dynamic_dump_num
)
logger
.
info
(
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
...
...
equipment/truck.py
View file @
c6e1edd1
...
...
@@ -239,7 +239,8 @@ class TruckInfo(WalkManage):
last_load_time_tmp
=
eval
(
byte_to_str
(
key_value_dict
[
str_to_byte
(
"lastLoadTime"
)]))
tmp_time
=
datetime
.
strptime
(
last_load_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
tmp_time
>
datetime
.
strptime
(
"2020-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
# 若最后装载时间异常
self
.
last_load_time
[
item
]
=
tmp_time
# self.last_load_time[item] = tmp_time
self
.
last_load_time
[
item
]
=
datetime
.
now
()
else
:
self
.
last_load_time
[
item
]
=
datetime
.
now
()
...
...
@@ -260,7 +261,8 @@ class TruckInfo(WalkManage):
last_unload_time_tmp
=
eval
(
key_value_dict
[
str_to_byte
(
"lastUnloadTime"
)])
tmp_time
=
datetime
.
strptime
(
last_unload_time_tmp
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
)
if
tmp_time
>
datetime
.
strptime
(
"2020-01-01 01:01:01"
,
"
%
Y-
%
m-
%
d
%
H:
%
M:
%
S"
):
self
.
last_unload_time
[
item
]
=
tmp_time
# self.last_unload_time[item] = tmp_time
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
else
:
self
.
last_unload_time
[
item
]
=
datetime
.
now
()
...
...
@@ -417,7 +419,7 @@ class TruckInfo(WalkManage):
self
.
logger
.
info
(
f
'车辆预期抵达挖机时间信息'
)
self
.
logger
.
info
(
self
.
cur_truck_reach_excavator
)
self
.
logger
.
info
(
f
'车辆预期抵达
电铲
时间信息'
)
self
.
logger
.
info
(
f
'车辆预期抵达
卸点
时间信息'
)
self
.
logger
.
info
(
self
.
cur_truck_reach_dump
)
self
.
truck_current_trip
.
flatten
()
self
.
logger
.
info
(
"矿卡行程信息"
)
...
...
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