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
8edf3046
Commit
8edf3046
authored
Oct 18, 2022
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码优化v3
parent
c81d437a
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
142 additions
and
147 deletions
+142
-147
algorithm.py
alg/algorithm.py
+19
-19
group.py
core/group.py
+97
-102
schedule.py
core/schedule.py
+2
-2
submit.py
core/submit.py
+3
-3
dispatchInfo.py
data/dispatchInfo.py
+7
-7
para_config.py
data/para_config.py
+4
-4
dump.py
equipment/dump.py
+2
-2
excavator.py
equipment/excavator.py
+2
-2
truck.py
equipment/truck.py
+2
-2
gothrough_digging.py
gothrough/gothrough_digging.py
+1
-1
topo_graph.py
graph/topo_graph.py
+3
-3
No files found.
alg/algorithm.py
View file @
8edf3046
...
...
@@ -55,9 +55,9 @@ class Congestion(AlgorithmBase):
task
=
self
.
truck
.
get_truck_current_task
()[
truck_id
]
group_dynamic_excavator_num
=
len
(
self
.
group
.
dump
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
group_dumps
)
group_dynamic_dump_num
=
len
(
self
.
group
.
excavator
)
group_dynamic_dump_num
=
len
(
self
.
group
.
group_excavators
)
except
Exception
as
es
:
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
...
...
@@ -158,9 +158,9 @@ class ExpectedTime(AlgorithmBase):
truck_avl_time
=
self
.
pre_sch
.
get_truck_avl_time
(
truck_id
=
truck_id
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
excavator
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
group_excavators
)
group_dynamic_unload_area_num
=
len
(
self
.
group
.
unload_area
)
group_dynamic_unload_area_num
=
len
(
self
.
group
.
group_unload_areas
)
# except Exception as es:
# self.logger.error("车辆调度信息读取异常")
...
...
@@ -174,7 +174,7 @@ class ExpectedTime(AlgorithmBase):
# try:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡启动或故障恢复"
)
self
.
logger
.
info
(
f
"涉及挖机:{self.group.
excavator
}"
)
self
.
logger
.
info
(
f
"涉及挖机:{self.group.
group_excavators
}"
)
# self.logger.info(f"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
# except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配")
...
...
@@ -185,7 +185,7 @@ class ExpectedTime(AlgorithmBase):
excavator_val_time_dict
=
self
.
pre_sch
.
get_excavator_avl_time
()
# 局部挖机可用时间 list
group_excavator_avl_time_ls
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0.0
)
group_excavator_avl_time_ls
=
np
.
full
(
len
(
self
.
group
.
group_excavators
),
0.0
)
self
.
logger
.
info
(
"self.group.excavator_uuid_index_dict"
)
self
.
logger
.
info
(
self
.
group
.
excavator_uuid_index_dict
)
...
...
@@ -229,18 +229,18 @@ class ExpectedTime(AlgorithmBase):
# try:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡空载"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{self.group.
dump
}"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{self.group.
group_dumps
}"
)
# self.logger.info(f"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}")
# except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配")
# self.logger.error(es)
try
:
# get
dump
available time (List) for all
# get
group_dumps
available time (List) for all
dump_val_time_dict
=
self
.
pre_sch
.
get_dump_avl_time
()
# get
dump
available time (List) within the group
group_dump_val_time_ls
=
np
.
full
(
len
(
self
.
group
.
unload_area
),
0.0
)
# get
group_dumps
available time (List) within the group
group_dump_val_time_ls
=
np
.
full
(
len
(
self
.
group
.
group_unload_areas
),
0.0
)
self
.
logger
.
info
(
"self.group.dump_uuid_index_dict"
)
self
.
logger
.
info
(
self
.
group
.
dump_uuid_index_dict
)
...
...
@@ -248,17 +248,17 @@ class ExpectedTime(AlgorithmBase):
for
dump_id
,
dump_index
in
self
.
group
.
dump_uuid_index_dict
.
items
():
group_dump_val_time_ls
[
dump_index
]
=
dump_val_time_dict
[
dump_id
]
# get truck located
excavator
id (uuid) from truck trip
# get truck located
group_excavators
id (uuid) from truck trip
if
int
(
trip
[
1
])
<
0
or
int
(
trip
[
1
])
>=
len
(
DeviceMap
.
excavator_index_to_uuid_dict
):
raise
CoreException
(
105
,
f
'车辆 {truck_id} 行程驶往 {int(trip[1])} 号挖机越界'
)
excavator_id
=
DeviceMap
.
excavator_index_to_uuid_dict
[
int
(
trip
[
1
])]
# get
excavator
index (int) within group from group's excavator_group_index
# get
group_excavators
index (int) within group from group's excavator_group_index
if
excavator_id
not
in
self
.
group
.
excavator_uuid_index_dict
:
raise
CoreException
(
106
,
f
'挖机 {excavator_id} 不存在于分组 {self.group.name} excavator_uuid_index_dict'
)
excavator_group_index
=
self
.
group
.
excavator_uuid_index_dict
[
excavator_id
]
# get travelling time (List) to each
dump
# 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
...
...
@@ -296,18 +296,18 @@ class ExpectedTime(AlgorithmBase):
# try:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡重载"
)
self
.
logger
.
info
(
f
'涉及挖机设备:{self.group.
excavator
}'
)
self
.
logger
.
info
(
f
'涉及挖机设备:{self.group.
group_excavators
}'
)
# self.logger.info(f"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}")
# except Exception as es:
# self.logger.error(f"矿卡{truck_id}状态不匹配")
# self.logger.error(es)
try
:
# get
excavator
available time (List) for all
# get
group_excavators
available time (List) for all
excavator_val_time
=
self
.
pre_sch
.
get_excavator_avl_time
()
# get
excavator
available time (List) within the group
group_excavator_avl_time_ls
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0.0
)
# get
group_excavators
available time (List) within the group
group_excavator_avl_time_ls
=
np
.
full
(
len
(
self
.
group
.
group_excavators
),
0.0
)
self
.
logger
.
info
(
"self.group.excavator_uuid_index_dict"
)
self
.
logger
.
info
(
self
.
group
.
excavator_uuid_index_dict
)
...
...
@@ -315,10 +315,10 @@ class ExpectedTime(AlgorithmBase):
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
group_excavator_avl_time_ls
[
excavator_index
]
=
excavator_val_time
[
excavator_id
]
# get truck located
dump
id (uuid) from truck trip
# get truck located
group_dumps
id (uuid) from truck trip
dump_id
=
DeviceMap
.
dump_index_to_uuid_dict
[
int
(
trip
[
1
])]
# get unload area id (uuid) from DispatchInfo dump_id to
unload_area
mapping
# get unload area id (uuid) from DispatchInfo dump_id to
group_unload_areas
mapping
unload_area_id
=
DispatchInfo
.
dump_unload_area_dict
[
dump_id
]
# get unload area id (uuid) from DispatchInfo dump_id to unload
...
...
core/group.py
View file @
8edf3046
...
...
@@ -15,6 +15,9 @@ from data.para_config import get_value
from
core.util
import
*
from
typing
import
Mapping
,
List
from
util
import
CoreException
from
equipment
import
TruckInfo
,
ExcavatorInfo
,
DumpInfo
from
core.schedule
import
PreSchedule
from
graph.topo_graph
import
Topo
class
CurrentTruck
:
...
...
@@ -31,7 +34,7 @@ class CurrentTruck:
"""
def
__init__
(
self
,
truck_id
,
group_id
,
trip
,
task
,
state
):
def
__init__
(
self
,
truck_id
:
str
,
group_id
:
str
,
trip
:
List
[
int
],
task
:
int
,
state
:
int
):
self
.
_truck_id
=
truck_id
self
.
_group_id
=
group_id
self
.
_trip
=
trip
...
...
@@ -58,9 +61,16 @@ class Group:
"""
class for group instance.
"""
def
__init__
(
self
,
group_id
,
truck
,
pre_sch
,
excavator_info
,
dump_info
,
topo
):
""" Generate a group obj.
:param group_id: (uuid) group_id
def
__init__
(
self
,
group_id
,
truck
:
TruckInfo
,
pre_sch
:
PreSchedule
,
excavator_info
:
ExcavatorInfo
,
dump_info
:
DumpInfo
,
topo
:
Topo
):
"""
Generate a group obj.
:param group_id:
:param truck:
:param pre_sch:
:param excavator_info:
:param dump_info:
:param topo:
"""
self
.
logger
=
get_logger
(
"zxt.Group"
)
# basic info.
...
...
@@ -76,11 +86,10 @@ class Group:
self
.
topo
=
topo
# group devices
self
.
excavator
=
{}
# excavator_id -> unload_area_id
self
.
unload_area
=
{}
# unload_area_id -> load_area_id
self
.
dump
=
{}
self
.
truck_set
=
set
()
# truck_id
self
.
group_excavators
=
{}
self
.
group_unload_areas
=
{}
self
.
group_dumps
=
{}
self
.
group_trucks
=
set
()
# road network info.
self
.
to_excavator_distance
=
None
...
...
@@ -124,17 +133,14 @@ class Group:
"""
# update group devices
# DispatchInfo.update_device_group_structure()
self
.
excavator
=
{}
self
.
unload_area
=
{}
self
.
dump
=
{}
self
.
truck_set
=
set
()
self
.
excavator
=
DispatchInfo
.
get_excavator
(
self
.
group_id
)
self
.
unload_area
=
DispatchInfo
.
get_unload_area
(
self
.
group_id
)
self
.
dump
=
DispatchInfo
.
get_dump
(
self
.
group_id
)
self
.
truck_set
=
DispatchInfo
.
get_truck_set
(
self
.
group_id
)
# self.logger.info(f'group excavator {self.excavator}')
# self.logger.info(f'group dump {self.dump}')
self
.
group_excavators
=
{}
self
.
group_unload_areas
=
{}
self
.
group_dumps
=
{}
self
.
group_trucks
=
set
()
self
.
group_excavators
=
DispatchInfo
.
get_excavator
(
self
.
group_id
)
self
.
group_unload_areas
=
DispatchInfo
.
get_unload_area
(
self
.
group_id
)
self
.
group_dumps
=
DispatchInfo
.
get_dump
(
self
.
group_id
)
self
.
group_trucks
=
DispatchInfo
.
get_truck_set
(
self
.
group_id
)
def
update_group_road_network
(
self
):
"""
...
...
@@ -175,23 +181,10 @@ class Group:
# self.logger.info("物料兼容性")
# self.logger.info(DispatchInfo.group_name[self.group_id])
for
dump_id
in
self
.
dump
:
for
excavator_id
in
self
.
excavator
:
# load_area_id = DispatchInfo.excavator_load_dict[excavator_id]
# unload_area_id = DispatchInfo.dump_unload_area_dict[dump_id]
for
dump_id
in
self
.
group_dumps
:
for
excavator_id
in
self
.
group_excavators
:
excavator_index
=
self
.
excavator_uuid_index_dict
[
excavator_id
]
dump_index
=
self
.
dump_uuid_index_dict
[
dump_id
]
# load_area_index = get_value("load_area_uuid_to_index_dict")[load_area_id]
# unload_area_index = get_value("unload_area_uuid_to_index_dict")[unload_area_id]
# 两设备处理物料不同, 相关路网不可通行
# self.logger.info(excavator_id)
# self.logger.info(self.excavator_info.excavator_material)
# self.logger.info(self.excavator_info.excavator_material[excavator_id])
# self.logger.info(dump_id)
# self.logger.info(self.dump_info.dump_material)
# self.logger.info(self.dump_info.dump_material[dump_id])
if
self
.
excavator_info
.
excavator_material
[
excavator_id
]
not
in
self
.
dump_info
.
dump_material
[
dump_id
]:
self
.
group_walk_available
[
excavator_index
][
dump_index
]
=
10
...
...
@@ -263,7 +256,7 @@ class GroupDispatcher:
self
.
logger
.
info
(
f
'分组 {self.group.group_name} 调度计算-调度模式 {self.group.group_mode}'
)
for
truck_id
in
list
(
self
.
group
.
truck_set
):
for
truck_id
in
list
(
self
.
group
.
group_trucks
):
self
.
logger
.
info
(
f
'调度车辆 {truck_id}'
)
...
...
@@ -433,7 +426,7 @@ class GroupDispatcher:
if
i
in
self
.
group
.
truck
.
truck_excavator_bind
:
try
:
if
i
not
in
self
.
group
.
truck
.
truck_excavator_bind
:
raise
CoreException
(
102
,
f
'truck.
excavator
bind 中不存在 {i}'
)
raise
CoreException
(
102
,
f
'truck.
group_excavators
bind 中不存在 {i}'
)
except
CoreException
as
es
:
es
.
with_traceback_info
()
self
.
logger
.
error
(
es
)
...
...
@@ -495,11 +488,12 @@ class GroupDispatcher:
self
.
logger
.
error
(
es
)
truck_dispatch
[
i
]
=
[
None
,
None
]
elif
truck_task
==
0
:
try
:
if
i
in
self
.
group
.
truck
.
get_truck_locate_dict
()
:
truck_locate
=
self
.
group
.
truck
.
get_truck_locate_dict
()[
i
]
except
Exception
as
es
:
self
.
logger
.
error
(
"车辆位置信息丢失"
)
self
.
logger
.
error
(
es
)
else
:
self
.
logger
.
error
(
f
'车辆 {i} 位置信息丢失'
)
truck_dispatch
[
i
]
=
[
None
,
None
]
return
self
.
logger
.
info
(
self
.
group
.
truck
.
truck_is_temp
)
try
:
...
...
@@ -543,68 +537,69 @@ class GroupDispatcher:
if
(
truck_locate
in
self
.
group
.
topo
.
cross_bf_lanes
)
and
(
self
.
group
.
truck
.
truck_current_state
[
i
]
==
2
)
\
and
(
not
truck_is_temp
):
# 当前绑定装载区
if
truck_trip
[
0
]
==
-
1
:
next_excavator_id
=
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
truck_id
=
i
,
isdeleted
=
0
)
.
first
()
.
exactor_id
else
:
next_excavator_id
=
get_value
(
"excavator_index_to_uuid_dict"
)[
truck_trip
[
0
]]
# 当前绑定卸载区
if
truck_trip
[
-
1
]
==
-
1
:
item
=
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
truck_id
=
i
,
isdeleted
=
0
)
.
first
()
current_dump_id
=
item
.
dump_id
current_unload_area_id
=
item
.
unload_area_id
else
:
current_dump_id
=
get_value
(
"dump_index_to_uuid_dict"
)[
truck_trip
[
-
1
]]
current_unload_area_id
=
DispatchInfo
.
dump_unload_area_dict
[
current_dump_id
]
unload_area_dict
,
unload_area_lane_dict
=
self
.
group
.
topo
.
get_unload_target_node_real
(
truck_locate
,
current_unload_area_id
,
True
)
# 获取拥堵路段
congestion_lane_dict
=
self
.
get_congestion_lanes
()
# 获取当前交叉口下一路段集合
next_lane_list
=
get_cross_next_lanes
(
truck_locate
)
# 交叉口下一路段可达的装载区
next_lane_load_area_dict
=
get_lane_reach_load_areas
(
unload_area_lane_dict
,
next_lane_list
)
# 排除下一个路段阻塞的装载区
delete_congestion_load_area
(
congestion_lane_dict
,
unload_area_dict
,
next_lane_load_area_dict
)
min_trip_time
=
10000000
best_dump_id
=
current_dump_id
for
unload_area
,
value
in
unload_area_dict
.
items
():
# 车辆不需要掉头
if
value
[
-
1
]
==
1
and
unload_area
in
DispatchInfo
.
unload_area_dump_dict
:
dump_id
=
DispatchInfo
.
unload_area_dump_dict
[
unload_area
]
traveling_time
=
value
[
0
]
/
heavy_speed
now
=
float
(
(
datetime
.
now
()
-
self
.
group
.
pre_sch
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
))
reach_time
=
now
+
traveling_time
trip_time
=
max
(
reach_time
,
self
.
group
.
pre_sch
.
get_dump_avl_time
()[
dump_id
])
-
now
self
.
redispatch_to_dump
(
i
,
truck_dispatch
,
truck_locate
,
truck_trip
)
if
min_trip_time
>
trip_time
:
best_dump_id
=
dump_id
def
redispatch_to_dump
(
self
,
truck_id
,
truck_dispatch
,
truck_locate
,
truck_trip
):
"""
redispatch truck to dumps.
:param truck_id:
:param truck_dispatch:
:param truck_locate:
:param truck_trip:
:return:
"""
# 当前绑定装载区
if
truck_trip
[
0
]
==
-
1
:
next_excavator_id
=
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
.
first
()
.
exactor_id
else
:
next_excavator_id
=
get_value
(
"excavator_index_to_uuid_dict"
)[
truck_trip
[
0
]]
# 当前绑定卸载区
if
truck_trip
[
-
1
]
==
-
1
:
item
=
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
truck_id
=
truck_id
,
isdeleted
=
0
)
.
first
()
current_dump_id
=
item
.
dump_id
current_unload_area_id
=
item
.
unload_area_id
else
:
current_dump_id
=
get_value
(
"dump_index_to_uuid_dict"
)[
truck_trip
[
-
1
]]
current_unload_area_id
=
DispatchInfo
.
dump_unload_area_dict
[
current_dump_id
]
unload_area_dict
,
unload_area_lane_dict
=
self
.
group
.
topo
.
get_unload_target_node_real
(
truck_locate
,
current_unload_area_id
,
True
)
# 获取拥堵路段
congestion_lane_dict
=
self
.
get_congestion_lanes
()
# 获取当前交叉口下一路段集合
next_lane_list
=
get_cross_next_lanes
(
truck_locate
)
# 交叉口下一路段可达的装载区
next_lane_load_area_dict
=
get_lane_reach_load_areas
(
unload_area_lane_dict
,
next_lane_list
)
# 排除下一个路段阻塞的装载区
delete_congestion_load_area
(
congestion_lane_dict
,
unload_area_dict
,
next_lane_load_area_dict
)
min_trip_time
=
10000000
best_dump_id
=
current_dump_id
for
unload_area
,
value
in
unload_area_dict
.
items
():
# 车辆不需要掉头
if
value
[
-
1
]
==
1
and
unload_area
in
DispatchInfo
.
unload_area_dump_dict
:
dump_id
=
DispatchInfo
.
unload_area_dump_dict
[
unload_area
]
next_unload_area_id
=
DispatchInfo
.
dump_unload_area_dict
[
best_dump_id
]
traveling_time
=
value
[
0
]
/
heavy_speed
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_unload_area_id
]
now
=
float
(
(
datetime
.
now
()
-
self
.
group
.
pre_sch
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
))
reach_time
=
now
+
traveling_time
# res = redispatch_request(truck_id, next_excavator_id, next_unload_area_id)
trip_time
=
max
(
reach_time
,
self
.
group
.
pre_sch
.
get_dump_avl_time
()[
dump_id
])
-
now
# self.logger.info(res)
self
.
logger
.
info
(
f
'二次调度结果 {i}'
)
self
.
logger
.
info
(
truck_dispatch
[
i
])
if
min_trip_time
>
trip_time
:
best_dump_id
=
dump_id
next_unload_area_id
=
DispatchInfo
.
dump_unload_area_dict
[
best_dump_id
]
truck_dispatch
[
truck_id
]
=
[
next_excavator_id
,
next_unload_area_id
]
# res = redispatch_request(truck_id, next_excavator_id, next_unload_area_id)
# self.logger.info(res)
self
.
logger
.
info
(
f
'二次调度结果 {truck_id}'
)
self
.
logger
.
info
(
truck_dispatch
[
truck_id
])
def
redispatch_to_excavator
(
self
,
truck_id
,
truck_dispatch
,
truck_locate
):
"""
...
...
@@ -655,7 +650,7 @@ class GroupDispatcher:
def
get_best_excavator
(
self
,
current_excavator_id
,
truck_id
,
load_area_dict
):
"""
get best
excavator
get best
group_excavators
:param current_excavator_id: 当前车辆配对挖机
:param truck_id:
:param load_area_dict: 备选装载区
...
...
@@ -670,7 +665,7 @@ class GroupDispatcher:
excavator_id
=
DispatchInfo
.
load_excavator_dict
[
load_area
]
else
:
continue
if
value
[
-
1
]
==
1
and
excavator_id
in
self
.
group
.
excavator
:
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}'
)
...
...
@@ -768,7 +763,7 @@ class ReDispatcher:
def
get_best_excavator
(
self
,
current_excavator_id
,
truck_id
,
load_area_dict
):
"""
get best
excavator
get best
group_excavators
:param current_excavator_id: 当前车辆配对挖机
:param truck_id:
:param load_area_dict: 备选装载区
...
...
@@ -783,7 +778,7 @@ class ReDispatcher:
excavator_id
=
DispatchInfo
.
load_excavator_dict
[
load_area
]
else
:
continue
if
value
[
-
1
]
==
1
and
excavator_id
in
self
.
group
.
excavator
:
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}'
)
...
...
core/schedule.py
View file @
8edf3046
...
...
@@ -22,9 +22,9 @@ class PreSchedule:
根据矿卡请求队列及抵达信息,计算设备最早可用时间
Attribute:
equipment class: truck,
excavator, dump
equipment class: truck,
group_excavators, group_dumps
schedule start time
equipment available time: truck,
excavator, dump
equipment available time: truck,
group_excavators, group_dumps
"""
...
...
core/submit.py
View file @
8edf3046
...
...
@@ -231,9 +231,9 @@ class DispatchSubmission:
"""
self
.
logger
.
info
(
f
'调度分组: {group.group_id} {DispatchInfo.group_name[group.group_id]}'
)
self
.
logger
.
info
(
f
'组内车辆 {group.
truck_set
}'
)
self
.
logger
.
info
(
f
'组内挖机 {group.
excavator
}'
)
self
.
logger
.
info
(
f
'组内卸点 {group.
dump
}'
)
self
.
logger
.
info
(
f
'组内车辆 {group.
group_trucks
}'
)
self
.
logger
.
info
(
f
'组内挖机 {group.
group_excavators
}'
)
self
.
logger
.
info
(
f
'组内卸点 {group.
group_dumps
}'
)
self
.
logger
.
info
(
f
'调度模式 {group.group_mode}'
)
self
.
logger
.
info
(
"dispatch_plan_dict"
)
self
.
logger
.
info
(
dispatch_plan_dict
)
...
...
data/dispatchInfo.py
View file @
8edf3046
...
...
@@ -25,15 +25,15 @@ class DispatchInfo:
load_excavator_dict
=
{}
# 装载区id-->>电铲编号的映射
excavator_load_dict
=
{}
# 电铲编号->>装载区id的映射
#
excavator
<-> group id
#
group_excavators
<-> group id
group_excavator_dict
=
{}
# team_id -> dict {[excavator_id, excavator_id], ...}
excavator_group_dict
=
{}
# excavator_id -> team_id 问题:多个key值对应一个value值
#
unload_area
<-> group id
#
group_unload_areas
<-> group id
group_unload_area_dict
=
{}
# team_id -> dict {unload_area_id, unload_area_id, ...}
unload_area_group_dict
=
{}
# unload_area_id -> team_id
#
dump
<-> group id
#
group_dumps
<-> group id
group_dump_dict
=
{}
dump_group_dict
=
{}
...
...
@@ -54,7 +54,7 @@ class DispatchInfo:
# truck -> match(excavator_id, unload_area_id)
truck_match_dict
=
{}
#
unload_area <-> dump
id
#
group_unload_areas <-> group_dumps
id
dump_unload_area_dict
=
{}
unload_area_dump_dict
=
{}
...
...
@@ -204,7 +204,7 @@ class DispatchInfo:
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
)
.
all
():
# add
excavator
# add
group_excavators
if
item
.
group_id
not
in
cls
.
group_excavator_dict
.
keys
():
cls
.
group_excavator_dict
[
item
.
group_id
]
=
[
item
.
exactor_id
]
else
:
...
...
@@ -212,7 +212,7 @@ class DispatchInfo:
cls
.
group_excavator_dict
[
item
.
group_id
]
.
append
(
item
.
exactor_id
)
cls
.
excavator_group_dict
[
item
.
exactor_id
]
=
item
.
group_id
# add
unload_area
# add
group_unload_areas
if
item
.
group_id
not
in
cls
.
group_unload_area_dict
.
keys
():
cls
.
group_unload_area_dict
[
item
.
group_id
]
=
[
item
.
unload_area_id
]
else
:
...
...
@@ -220,7 +220,7 @@ class DispatchInfo:
cls
.
group_unload_area_dict
[
item
.
group_id
]
.
append
(
item
.
unload_area_id
)
cls
.
unload_area_group_dict
[
item
.
unload_area_id
]
=
item
.
group_id
# add
dump
# add
group_dumps
if
item
.
group_id
not
in
cls
.
group_dump_dict
.
keys
():
cls
.
group_dump_dict
[
item
.
group_id
]
=
[
item
.
dump_id
]
else
:
...
...
data/para_config.py
View file @
8edf3046
...
...
@@ -48,13 +48,13 @@ logger = get_logger("zxt.para")
# excavator_uuid_to_name_dict, dump_uuid_to_name_dict = build_equipment_uuid_name_map()
#
# # 矿卡集合
#
truck_set
= set(update_total_truck())
#
group_trucks
= set(update_total_truck())
#
# # 固定派车矿卡集合
# fixed_truck_set = set(update_fixdisp_truck())
#
# # 动态派车矿卡集合
# # dynamic_truck_set =
truck_set
.difference(fixed_truck_set)
# # dynamic_truck_set =
group_trucks
.difference(fixed_truck_set)
# dynamic_truck_set = update_dynamic_truck()
#
# dynamic_truck_num = len(dynamic_truck_set)
...
...
@@ -472,7 +472,7 @@ def global_period_para_update():
# 矿卡集合
truck_set
=
set
(
update_total_truck
())
logger
.
info
(
"
truck_set
"
)
logger
.
info
(
"
group_trucks
"
)
logger
.
info
(
truck_set
)
# 固定派车矿卡集合
...
...
@@ -482,7 +482,7 @@ def global_period_para_update():
logger
.
info
(
fixed_truck_set
)
# 动态派车矿卡集合
# dynamic_truck_set =
truck_set
.difference(fixed_truck_set)
# dynamic_truck_set =
group_trucks
.difference(fixed_truck_set)
dynamic_truck_set
=
update_dynamic_truck
()
dynamic_truck_num
=
len
(
dynamic_truck_set
)
...
...
equipment/dump.py
View file @
8edf3046
...
...
@@ -3,7 +3,7 @@
# @Time : 2021/8/24 11:28
# @Author : Opfer
# @Site :
# @File :
dump.py
# @File :
group_dumps.py
# @Software: PyCharm
from
data.para_config
import
*
...
...
@@ -33,7 +33,7 @@ class DumpInfo(WalkManage):
self
.
dump_strength
=
np
.
zeros
(
self
.
dynamic_dump_num
)
# 日志器
self
.
logger
=
get_logger
(
"zxt.
dump
"
)
self
.
logger
=
get_logger
(
"zxt.
group_dumps
"
)
# # 参数初始化
# self.dump_para_period_update()
...
...
equipment/excavator.py
View file @
8edf3046
...
...
@@ -3,7 +3,7 @@
# @Time : 2021/8/24 11:28
# @Author : Opfer
# @Site :
# @File :
excavator.py
# @File :
group_excavators.py
# @Software: PyCharm
from
data.para_config
import
*
...
...
@@ -37,7 +37,7 @@ class ExcavatorInfo(WalkManage):
self
.
excavator_strength
=
np
.
zeros
(
self
.
dynamic_excavator_num
)
# 日志器
self
.
logger
=
get_logger
(
"zxt.
excavator
"
)
self
.
logger
=
get_logger
(
"zxt.
group_excavators
"
)
#
# # 参数初始化
# self.excavator_para_period_update()
...
...
equipment/truck.py
View file @
8edf3046
...
...
@@ -76,7 +76,7 @@ class TruckInfo(WalkManage):
# 日志
self
.
logger
=
get_logger
(
"zxt.truck"
)
# # 初始化读取参数
# self.truck_para_period_update(
dump, excavator
)
# self.truck_para_period_update(
group_dumps, group_excavators
)
# # 矿卡所属group
# self.truck_group = {}
# 矿卡禁用列表
...
...
@@ -428,7 +428,7 @@ class TruckInfo(WalkManage):
# self.dump_hold_truck_num[end_eqp_index] = self.dump_hold_truck_num[end_eqp_index] + 1
# 其他状态,矿卡状态为-2,equipment_pair表不存在该矿卡
else
:
# end_eqp_index =
excavator
.excavator_uuid_to_index_dict[item.exactor_id]
# end_eqp_index =
group_excavators
.excavator_uuid_to_index_dict[item.exactor_id]
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
pass
except
Exception
as
es
:
...
...
gothrough/gothrough_digging.py
View file @
8edf3046
...
...
@@ -474,7 +474,7 @@ def get_lanes_between_entrances(closer_node_id, further_node_id):
def
get_excavator_state
(
excavator_id
):
"""
get
excavator
state.
get
group_excavators
state.
:param excavator_id:
:return: state
"""
...
...
graph/topo_graph.py
View file @
8edf3046
...
...
@@ -142,7 +142,7 @@ class Topo():
Entrancenode_for_dump
=
str
(
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
item
[
0
][
1
])
.
first
()
.
EntranceNodeId
)
dump_name
=
str
(
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
item
[
0
][
1
])
.
first
()
.
Name
)
self
.
unload_G
.
add_node
(
Exitnode_for_digging
,
name
=
'digging'
,
type
=
digging_name
)
self
.
unload_G
.
add_node
(
Entrancenode_for_dump
,
name
=
'
dump
'
,
type
=
dump_name
)
self
.
unload_G
.
add_node
(
Entrancenode_for_dump
,
name
=
'
group_dumps
'
,
type
=
dump_name
)
# path_node_for_trip.append(Exitnode_for_digging) # add start node for trip
...
...
@@ -215,7 +215,7 @@ class Topo():
self
.
load_G_all_nodes
.
append
(
Entrancenode_for_digging
)
self
.
load_G_digging_nodes
.
append
(
Entrancenode_for_digging
)
self
.
load_G
.
add_node
(
Exitnode_for_dump
,
name
=
'
dump
'
,
type
=
digging_name
)
self
.
load_G
.
add_node
(
Exitnode_for_dump
,
name
=
'
group_dumps
'
,
type
=
digging_name
)
self
.
load_G
.
add_node
(
Entrancenode_for_digging
,
name
=
'digging'
,
type
=
dump_name
)
try
:
...
...
@@ -333,7 +333,7 @@ class Topo():
for
(
u
,
wt
)
in
self
.
unload_G
.
nodes
.
data
(
'name'
):
# select next reachable target
if
wt
==
'
dump
'
:
if
wt
==
'
group_dumps
'
:
if
allow
:
target_list
.
append
(
u
)
else
:
...
...
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