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
a9759c8e
Commit
a9759c8e
authored
Sep 16, 2022
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
测试问题修复
parent
75bc5a5a
Show whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
223 additions
and
90 deletions
+223
-90
algorithm.py
alg/algorithm.py
+47
-17
dispatcher.py
core/dispatcher.py
+6
-6
group.py
core/group.py
+74
-52
schedule.py
core/schedule.py
+16
-2
util.py
core/util.py
+17
-0
dispatchInfo.py
data/dispatchInfo.py
+51
-1
static_data_process.py
data/static_data_process.py
+2
-2
dump.py
equipment/dump.py
+8
-8
excavator.py
equipment/excavator.py
+1
-1
truck.py
equipment/truck.py
+1
-1
No files found.
alg/algorithm.py
View file @
a9759c8e
...
...
@@ -175,13 +175,16 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
info
(
"-----------------------------------Alg. Module-----------------------------------"
)
if
task
==
-
2
:
################################################ 矿卡启动 ###############################################
try
:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡启动或故障恢复"
)
self
.
logger
.
info
(
f
"涉及挖机:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}"
)
self
.
logger
.
info
(
f
"涉及挖机:{self.group.excavator}"
)
# 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
)
...
...
@@ -192,6 +195,9 @@ class ExpectedTime(AlgorithmBase):
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0.0
)
self
.
logger
.
info
(
"self.group.excavator_uuid_index_dict"
)
self
.
logger
.
info
(
self
.
group
.
excavator_uuid_index_dict
)
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
...
...
@@ -205,18 +211,21 @@ class ExpectedTime(AlgorithmBase):
# 计算行程时间
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_service_time"
)
self
.
logger
.
info
(
truck_service_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-excavator_val_time"
)
self
.
logger
.
info
(
excavator_val_time
)
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
)
# except Exception as es:
# self.logger.error("矿卡启动调度异常")
# self.logger.error(es)
...
...
@@ -228,7 +237,8 @@ class ExpectedTime(AlgorithmBase):
try
:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡空载"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{list(DeviceMap.dump_uuid_to_index_dict.keys())}"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{self.group.dump}"
)
# 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
)
...
...
@@ -238,7 +248,7 @@ class ExpectedTime(AlgorithmBase):
dump_val_time_global
=
self
.
pre_sch
.
get_dump_avl_time
()
# 局部卸点可用时间 list
dump_val_time
=
np
.
full
(
len
(
self
.
group
.
unload_area
),
0
)
dump_val_time
=
np
.
full
(
len
(
self
.
group
.
unload_area
),
0
.0
)
bb
=
self
.
group
.
dump_uuid_index_dict
for
dump_id
,
dump_index
in
self
.
group
.
dump_uuid_index_dict
.
items
():
dump_val_time
[
dump_index
]
=
dump_val_time_global
[
dump_id
]
...
...
@@ -259,18 +269,21 @@ class ExpectedTime(AlgorithmBase):
# 计算行程时间
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_service_time"
)
self
.
logger
.
info
(
truck_service_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-dump_val_time"
)
self
.
logger
.
info
(
dump_val_time
)
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
)
except
Exception
as
es
:
self
.
logger
.
error
(
"矿卡空载调度异常"
)
self
.
logger
.
error
(
es
)
...
...
@@ -282,7 +295,8 @@ class ExpectedTime(AlgorithmBase):
try
:
self
.
logger
.
info
(
f
'矿卡 {truck_id}'
)
self
.
logger
.
info
(
"矿卡状态:矿卡重载"
)
self
.
logger
.
info
(
f
"涉及挖机设备:{list(DeviceMap.excavator_uuid_to_index_dict.keys())}"
)
self
.
logger
.
info
(
f
'涉及挖机设备:{self.group.excavator}'
)
# 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
)
...
...
@@ -291,7 +305,7 @@ class ExpectedTime(AlgorithmBase):
# 挖机可用时间
excavator_val_time_global
=
self
.
pre_sch
.
get_excavator_avl_time
()
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0
)
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0
.0
)
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
...
...
@@ -315,9 +329,25 @@ class ExpectedTime(AlgorithmBase):
# 计算行程时间
transport_value
=
truck_service_time
-
truck_avl_time
self
.
logger
.
info
(
"expected_travelling_schedule-truck_reach_time"
)
self
.
logger
.
info
(
truck_reach_time
)
self
.
logger
.
info
(
"expected_travelling_schedule-excavator_val_time"
)
self
.
logger
.
info
(
excavator_val_time
)
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
)
except
Exception
as
es
:
self
.
logger
.
error
(
"矿卡重载调度异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
.
__traceback__
.
tb_lineno
)
transport_value
=
np
.
zeros
(
group_dynamic_unload_area_num
)
return
transport_value
...
...
core/dispatcher.py
View file @
a9759c8e
...
...
@@ -196,14 +196,14 @@ class DispatchSubmission:
if
task
==
3
and
state
==
2
and
self
.
truck
.
get_truck_locate_dict
()[
truck_id
]
in
self
.
topo
.
cross_bf_lanes
:
# try:
if
truck_id
in
self
.
truck
.
truck_is_temp
and
not
self
.
truck
.
truck_is_temp
[
truck_id
]:
#
if truck_id in self.truck.truck_is_temp and not self.truck.truck_is_temp[truck_id]:
self
.
logger
.
info
(
"二次调度前往卸载区"
)
record
[
"isTemp"
]
=
True
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
POST
(
truck_id
)
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
else
:
self
.
logger
.
info
(
"车辆已完成二次调度-无需更改派车计划"
)
#
else:
#
self.logger.info("车辆已完成二次调度-无需更改派车计划")
# except Exception as es:
# self.logger.error(es)
...
...
@@ -258,15 +258,15 @@ class DispatchSubmission:
if
task
==
0
and
state
==
2
and
self
.
truck
.
get_truck_locate_dict
()[
truck_id
]
in
self
.
topo
.
cross_bf_lanes
:
# 车辆停车等待
# try:
if
truck_id
in
self
.
truck
.
truck_is_temp
and
not
self
.
truck
.
truck_is_temp
[
truck_id
]:
#
if truck_id in self.truck.truck_is_temp and not self.truck.truck_is_temp[truck_id]:
self
.
logger
.
info
(
"二次调度前往装载区"
)
record
[
"isTemp"
]
=
True
# 若尚未二次调度
redis5
.
set
(
truck_id
,
str
(
json
.
dumps
(
record
)))
POST
(
truck_id
)
self
.
logger
.
info
(
f
'redis 注入 {record}'
)
else
:
self
.
logger
.
info
(
"车辆已完成二次调度-无需更改派车计划"
)
#
else:
#
self.logger.info("车辆已完成二次调度-无需更改派车计划")
# except Exception as es:
# self.logger.error(es)
# self.logger.error("二次调度失败")
...
...
core/group.py
View file @
a9759c8e
...
...
@@ -59,6 +59,7 @@ class Group:
self
.
logger
=
get_logger
(
"zxt.Group"
)
# basic info.
self
.
group_id
=
group_id
self
.
group_name
=
DispatchInfo
.
group_name
[
self
.
group_id
]
self
.
group_mode
=
1
self
.
truck
=
truck
self
.
pre_sch
=
pre_sch
...
...
@@ -126,8 +127,8 @@ class Group:
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.logger.info(f'group excavator {self.excavator}')
#
self.logger.info(f'group dump {self.dump}')
def
update_group_road_network
(
self
):
"""
...
...
@@ -149,31 +150,31 @@ class Group:
"""
# excavator_index = 0
self
.
excavator_uuid_index_dict
=
{}
self
.
unload_area_uuid_index_dict
=
{}
self
.
truck_uuid_index_dict
=
{}
self
.
dump_uuid_index_dict
=
{}
for
i
in
range
(
len
(
self
.
excavator
)):
self
.
excavator_uuid_index_dict
[
list
(
self
.
excavator
)[
i
]]
=
i
for
i
in
range
(
len
(
self
.
unload_area
)):
self
.
unload_area_uuid_index_dict
[
list
(
self
.
unload_area
)[
i
]]
=
i
for
i
in
range
(
len
(
self
.
dump
)):
self
.
dump_uuid_index_dict
[
list
(
self
.
dump
)[
i
]]
=
i
for
i
in
range
(
len
(
self
.
truck_set
)):
self
.
truck_uuid_index_dict
[
list
(
self
.
truck_set
)[
i
]]
=
i
# self.excavator_uuid_index_dict = bidict(DispatchInfo.excavator_uuid_to_index_dict[self.group_id])
# self.unload_area_uuid_index_dict = bidict(DispatchInfo.unload_area_uuid_to_index_dict[self.group_id])
# self.dump_uuid_index_dict = bidict(DispatchInfo.dump_uuid_to_index_dict[self.group_id])
self
.
excavator_uuid_index_dict
=
bidict
(
self
.
excavator_uuid_index_dict
)
self
.
unload_area_uuid_index_dict
=
bidict
(
self
.
unload_area_uuid_index_dict
)
self
.
truck_uuid_index_dict
=
bidict
(
self
.
truck_uuid_index_dict
)
self
.
dump_uuid_index_dict
=
bidict
(
self
.
dump_uuid_index_dict
)
self
.
excavator_uuid_index_dict
=
DispatchInfo
.
get_group_excavator_dict
(
self
.
group_id
)
self
.
unload_area_uuid_index_dict
=
DispatchInfo
.
get_group_unload_area_dict
(
self
.
group_id
)
# self.truck_uuid_index_dict = DispatchInfo.get_group_truck_dict(self.group_id)
self
.
dump_uuid_index_dict
=
DispatchInfo
.
get_group_dump_dict
(
self
.
group_id
)
#
for i in range(len(self.excavator)):
#
self.excavator_uuid_index_dict[list(self.excavator)[i]] = i
#
#
for i in range(len(self.unload_area)):
#
self.unload_area_uuid_index_dict[list(self.unload_area)[i]] = i
#
#
for i in range(len(self.dump)):
#
self.dump_uuid_index_dict[list(self.dump)[i]] = i
#
#
for i in range(len(self.truck_set)):
#
self.truck_uuid_index_dict[list(self.truck_set)[i]] = i
#
#
#
self.excavator_uuid_index_dict = bidict(DispatchInfo.excavator_uuid_to_index_dict[self.group_id])
#
#
self.unload_area_uuid_index_dict = bidict(DispatchInfo.unload_area_uuid_to_index_dict[self.group_id])
#
#
self.dump_uuid_index_dict = bidict(DispatchInfo.dump_uuid_to_index_dict[self.group_id])
#
#
self.excavator_uuid_index_dict = bidict(self.excavator_uuid_index_dict)
#
self.unload_area_uuid_index_dict = bidict(self.unload_area_uuid_index_dict)
#
self.truck_uuid_index_dict = bidict(self.truck_uuid_index_dict)
#
self.dump_uuid_index_dict = bidict(self.dump_uuid_index_dict)
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
...
...
@@ -188,8 +189,8 @@ class Group:
try
:
self
.
logger
.
info
(
"物料兼容性"
)
self
.
logger
.
info
(
DispatchInfo
.
group_name
[
self
.
group_id
])
#
self.logger.info("物料兼容性")
#
self.logger.info(DispatchInfo.group_name[self.group_id])
for
dump_id
in
self
.
dump
:
for
excavator_id
in
self
.
excavator
:
...
...
@@ -203,11 +204,11 @@ class Group:
# 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(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
])
#
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
...
...
@@ -270,9 +271,12 @@ class Group:
assert
issubclass
(
solver
,
AlgorithmBase
)
s
=
solver
(
self
,
self
.
truck
,
self
.
pre_sch
)
# algorithm init
self
.
logger
.
info
(
f
'分组 {self.group_name} 调度计算 调度模式 {self.group_mode}'
)
for
i
in
list
(
self
.
truck_set
):
self
.
logger
.
info
(
"车辆调度程序"
)
self
.
logger
.
info
(
f
'调度车辆 {i}'
)
try
:
truck_trip
=
self
.
truck
.
get_truck_current_trip
()[
self
.
truck
.
truck_uuid_to_index_dict
[
i
]]
truck_task
=
self
.
truck
.
get_truck_current_task
()[
i
]
...
...
@@ -289,19 +293,19 @@ class Group:
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
info
(
"self.excavator_uuid_index_dict"
)
self
.
logger
.
info
(
self
.
excavator_uuid_index_dict
)
try
:
# 全智能模式
if
self
.
group_mode
==
1
:
self
.
logger
.
info
(
"全智能模式调度"
)
self
.
full_dynamic_mode
(
i
,
s
,
truck_dispatch
,
truck_info
,
truck_task
,
truck_trip
)
# 空车智能模式
elif
self
.
group_mode
==
2
:
self
.
logger
.
info
(
"空车智能模式调度"
)
self
.
semi_dynamic_mode
(
i
,
s
,
truck_dispatch
,
truck_info
,
truck_task
,
truck_trip
)
# 定铲派车
elif
self
.
group_mode
==
3
:
self
.
logger
.
info
(
"固定模式调度"
)
try
:
truck_dispatch
[
i
]
=
DispatchInfo
.
get_truck_match
(
i
)
except
Exception
as
es
:
...
...
@@ -310,11 +314,11 @@ class Group:
# 分流配比模式
elif
self
.
group_mode
==
4
:
self
.
logger
.
info
(
"分流配比模式调度"
)
self
.
ratio_mode
(
i
,
truck_dispatch
,
truck_task
)
except
Exception
as
es
:
self
.
logger
.
info
(
es
)
self
.
logger
.
error
(
es
)
# return dispatch plan
return
truck_dispatch
...
...
@@ -404,6 +408,8 @@ class Group:
min_index
=
np
.
argmin
(
next_excavator_value
)
next_excavator_id
=
self
.
excavator_uuid_index_dict
.
inverse
[
min_index
]
self
.
logger
.
info
(
f
'目标挖机 {min_index} {next_excavator_id}'
)
if
truck_task
==
-
2
:
next_unload_area_id
=
"Park"
else
:
...
...
@@ -419,12 +425,12 @@ class Group:
try
:
next_excavator_id
=
get_value
(
"excavator_index_to_uuid_dict"
)[
truck_trip
[
-
1
]]
next_unload_area_value
=
s
.
solve
(
truck_info
)
self
.
logger
.
info
(
f
'车辆 {i}'
)
self
.
logger
.
info
(
f
'group distance {self.to_unload_area_distance}'
)
self
.
logger
.
info
(
f
'walk available {self.group_walk_available}'
)
self
.
logger
.
info
(
self
.
unload_area_uuid_index_dict
)
self
.
logger
.
info
(
self
.
excavator_uuid_index_dict
)
#
self.logger.info(f'车辆 {i}')
#
self.logger.info(f'group distance {self.to_unload_area_distance}')
#
self.logger.info(f'walk available {self.group_walk_available}')
#
#
self.logger.info(self.unload_area_uuid_index_dict)
#
self.logger.info(self.excavator_uuid_index_dict)
if
i
in
self
.
truck
.
truck_dump_bind
:
dump_uuid_to_unload_area_uuid_dict
=
get_value
(
"dump_uuid_to_unload_area_uuid_dict"
)
...
...
@@ -432,15 +438,17 @@ class Group:
else
:
tmp
=
self
.
group_walk_available
[
self
.
excavator_uuid_index_dict
[
next_excavator_id
],
:]
.
flatten
()
self
.
logger
.
info
(
f
'group_walk_available_pick {tmp}'
)
self
.
logger
.
info
(
f
'next_excavator_id {next_excavator_id}'
)
self
.
logger
.
info
(
next_unload_area_value
)
#
self.logger.info(f'group_walk_available_pick {tmp}')
#
self.logger.info(f'next_excavator_id {next_excavator_id}')
#
self.logger.info(next_unload_area_value)
next_unload_area_value
*=
self
.
group_walk_available
[
self
.
excavator_uuid_index_dict
[
next_excavator_id
],
:]
.
flatten
()
self
.
logger
.
info
(
next_unload_area_value
)
#
self.logger.info(next_unload_area_value)
min_index
=
np
.
argmin
(
next_unload_area_value
)
next_unload_area_id
=
self
.
unload_area_uuid_index_dict
.
inverse
[
min_index
]
self
.
logger
.
info
(
f
'目标卸点 {min_index} {next_unload_area_id}'
)
# next_excavator_id = self.excavator_uuid_index_dict.inverse[truck_trip[-1]]
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_unload_area_id
]
...
...
@@ -465,14 +473,17 @@ class Group:
self
.
logger
.
error
(
"车辆临时字段异常"
)
self
.
logger
.
error
(
es
)
# 车辆当前位于交叉路口前,且排队等待
self
.
logger
.
info
(
"潜在二次调度车辆状态"
)
self
.
logger
.
info
(
f
'车辆 {i}'
)
self
.
logger
.
info
(
f
'车辆位置 {truck_locate}'
)
self
.
logger
.
info
(
f
'车辆状态 {self.truck.truck_current_state[i]}'
)
self
.
logger
.
info
(
f
'车辆临时 {truck_is_temp} {type(truck_is_temp)}'
)
self
.
logger
.
info
(
self
.
topo
.
cross_bf_lanes
)
self
.
logger
.
info
(
self
.
truck
.
truck_current_state
)
self
.
logger
.
info
(
truck_is_temp
)
if
(
truck_locate
in
self
.
topo
.
cross_bf_lanes
)
and
(
self
.
truck
.
truck_current_state
[
i
]
==
2
)
\
and
(
not
truck_is_temp
):
# if (truck_locate in self.topo.cross_bf_lanes) and (self.truck.truck_current_state[i] == 2) \
# and (not truck_is_temp):
if
(
truck_locate
in
self
.
topo
.
cross_bf_lanes
)
and
(
self
.
truck
.
truck_current_state
[
i
]
==
2
):
self
.
logger
.
info
(
"触发二次调度"
)
# 当前绑定卸载区
# if truck_trip[0] == -1:
...
...
@@ -584,7 +595,7 @@ class Group:
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
]
/
self
.
truck
.
heavy_speed
[
i
]
traveling_time
=
value
[
0
]
/
heavy_speed
now
=
float
(
(
datetime
.
now
()
-
self
.
pre_sch
.
start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
...
...
@@ -617,12 +628,15 @@ class Group:
"""
min_trip_time
=
10000000
best_excavator_id
=
current_excavator_id
try
:
for
load_area
,
value
in
load_area_dict
.
items
():
# 车辆不需要掉头
if
load_area
in
DispatchInfo
.
load_excavator_dict
:
excavator_id
=
DispatchInfo
.
load_excavator_dict
[
load_area
]
else
:
continue
if
value
[
-
1
]
==
1
and
excavator_id
in
self
.
excavator
:
# excavator_id = DispatchInfo.load_excavator_dict[load_area]
traveling_time
=
60
*
(
value
[
0
]
/
1000
)
/
self
.
truck
.
empty_speed
[
truck_id
]
traveling_time
=
60
*
(
value
[
0
]
/
1000
)
/
empty_speed
self
.
logger
.
info
(
f
'load_area {load_area}'
)
self
.
logger
.
info
(
f
'traveling_time {traveling_time}'
)
...
...
@@ -642,6 +656,11 @@ class Group:
if
min_trip_time
>
trip_time
:
best_excavator_id
=
excavator_id
min_trip_time
=
trip_time
except
Exception
as
es
:
self
.
logger
.
error
(
"寻找最佳装载区异常"
)
self
.
logger
.
error
(
f
'exception {es}'
)
self
.
logger
.
error
(
f
'in line {es.__traceback__.tb_lineno}'
)
return
best_excavator_id
def
get_congestion_lanes
(
self
):
...
...
@@ -651,4 +670,7 @@ class Group:
for
key
,
value
in
truck_locate_dict
.
items
():
if
self
.
truck
.
truck_current_state
[
key
]
==
2
:
congestion_lane_list
.
append
(
value
)
print
(
"congestion_lane_list"
)
print
(
list
(
set
(
congestion_lane_list
)))
return
list
(
set
(
congestion_lane_list
))
core/schedule.py
View file @
a9759c8e
...
...
@@ -183,8 +183,14 @@ class PreSchedule:
# self.truck_avl_time[int(tmp[i][1])] = now
# if abs(self.excavator_avl_time[excavator_index] - now) > 60:
# self.excavator_avl_time[excavator_index] = now
count
=
0
self
.
logger
.
info
(
"update_excavator_avl_time-excavator_avl_ls"
)
self
.
logger
.
info
(
excavator_avl_ls
)
for
excavator_id
in
self
.
excavator
.
excavator_uuid_to_index_dict
.
keys
():
self
.
logger
.
info
(
f
'{excavator_id} {excavator_avl_ls[count]}'
)
count
+=
1
# self.logger.info(get_value("dynamic_excavator_set"))
# self.logger.info(excavator_avl_ls)
except
Exception
as
es
:
self
.
logger
.
error
(
"挖机可用时间计算异常"
)
self
.
logger
.
error
(
es
)
...
...
@@ -248,6 +254,14 @@ class PreSchedule:
# self.dump_avl_time[dump_index] = now
# if abs(self.truck_avl_time[int(tmp[i][1])] - now) > 60:
# self.truck_avl_time[int(tmp[i][1])] = now
count
=
0
self
.
logger
.
info
(
"update_dump_avl_time-dump_avl_ls"
)
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
self
.
logger
.
info
(
f
'{dump_id} {dump_avl_ls[count]}'
)
count
+=
1
# self.logger.info(get_value("dynamic_dump_set"))
# self.logger.info(dump_avl_ls)
# except Exception as es:
# self.logger.error("卸载设备可用时间计算异常")
# self.logger.error(es)
...
...
@@ -294,7 +308,7 @@ class PreSchedule:
return
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
\
[
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
else
:
tmp
=
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
#
tmp = self.update_excavator_avl_time(excavator_avl_ls)
return
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
def
get_truck_avl_time
(
self
,
truck_id
=
None
):
...
...
core/util.py
View file @
a9759c8e
...
...
@@ -40,11 +40,25 @@ with open(json_file) as f:
#
# return POST(real_data)
# def get_cross_next_lanes(truck_locate):
# next_lane_list = []
# startNodeId = session_postgre.query(Lane).filter_by(Id=truck_locate).first().EndNodeId
# for item in session_postgre.query(Lane).filter_by(StartNodeId=startNodeId).all():
# next_lane_list.append(str(item.Id))
# return next_lane_list
def
get_cross_next_lanes
(
truck_locate
):
next_lane_list
=
[]
startNodeId
=
session_postgre
.
query
(
Lane
)
.
filter_by
(
Id
=
truck_locate
)
.
first
()
.
EndNodeId
for
item
in
session_postgre
.
query
(
Lane
)
.
filter_by
(
StartNodeId
=
startNodeId
)
.
all
():
next_lane_list
.
append
(
str
(
item
.
Id
))
next_lane_end_node
=
item
.
EndNodeId
for
next_item
in
session_postgre
.
query
(
Lane
)
.
filter_by
(
StartNodeId
=
next_lane_end_node
)
.
all
():
next_lane_list
.
append
(
str
(
next_item
.
Id
))
print
(
"next_lane_list"
)
print
(
next_lane_list
)
return
next_lane_list
...
...
@@ -72,6 +86,9 @@ def get_lane_reach_load_areas(load_area_lane_dict, next_lane_list):
next_lane_load_area_dict
[
lane_id
]
=
[
key
]
else
:
next_lane_load_area_dict
[
lane_id
]
.
append
(
key
)
print
(
"next_lane_load_area_dict"
)
print
(
next_lane_load_area_dict
)
return
next_lane_load_area_dict
...
...
data/dispatchInfo.py
View file @
a9759c8e
...
...
@@ -9,7 +9,7 @@ import numpy as np
from
settings
import
*
import
pandas
as
pd
from
tables
import
DispatchMatch
,
DispatchEquipment
import
bidict
from
bidict
import
bidict
logger
=
get_logger
(
"zxt.dispatchInfo"
)
...
...
@@ -387,6 +387,11 @@ class DispatchInfo:
if
unload_area_id
not
in
group_unload_area_uuid_to_index
:
group_unload_area_uuid_to_index
[
unload_area_id
]
=
group_unload_area_count
group_excavator_uuid_to_index
=
bidict
(
group_excavator_uuid_to_index
)
group_dump_uuid_to_index
=
bidict
(
group_dump_uuid_to_index
)
group_load_area_uuid_to_index
=
bidict
(
group_load_area_uuid_to_index
)
group_unload_area_uuid_to_index
=
bidict
(
group_unload_area_uuid_to_index
)
cls
.
excavator_uuid_to_index_dict
[
item
]
=
group_excavator_uuid_to_index
cls
.
dump_uuid_to_index_dict
[
item
]
=
group_dump_uuid_to_index
cls
.
load_area_uuid_to_index_dict
[
item
]
=
group_load_area_uuid_to_index
...
...
@@ -428,6 +433,51 @@ class DispatchInfo:
# logger.error("路网距离更新异常-调度部分和路网部分不一致")
# logger.error(es)
# @classmethod
# def update_device_dict(cls):
# cls.excavator_uuid_index_dict = {}
# cls.unload_area_uuid_index_dict = {}
# cls.truck_uuid_index_dict = {}
# cls.dump_uuid_index_dict = {}
# for group_id in cls.group_set:
# cls.excavator_uuid_index_dict = {}
# cls.unload_area_uuid_index_dict = {}
# cls.truck_uuid_index_dict = {}
# cls.dump_uuid_index_dict = {}
#
# for i in range(len(cls.group_excavator_dict[group_id])):
# cls.excavator_uuid_index_dict[group_id][list(cls.group_excavator_dict[group_id])[i]] = i
#
# for i in range(len(cls.group_unload_area_dict[group_id])):
# cls.unload_area_uuid_index_dict[group_id][list(cls.group_unload_area_dict[group_id])[i]] = i
#
# for i in range(len(cls.group_dump_dict[group_id])):
# cls.dump_uuid_index_dict[group_id][list(cls.group_dump_dict[group_id])[i]] = i
#
# for i in range(len(cls.group_truck_dict[group_id])):
# cls.truck_uuid_index_dict[group_id][list(cls.group_truck_dict[group_id])[i]] = i
#
# # self.excavator_uuid_index_dict = bidict(DispatchInfo.excavator_uuid_to_index_dict[self.group_id])
# # self.unload_area_uuid_index_dict = bidict(DispatchInfo.unload_area_uuid_to_index_dict[self.group_id])
# # self.dump_uuid_index_dict = bidict(DispatchInfo.dump_uuid_to_index_dict[self.group_id])
#
# cls.excavator_uuid_index_dict = bidict(cls.excavator_uuid_index_dict)
# cls.unload_area_uuid_index_dict = bidict(cls.unload_area_uuid_index_dict)
# cls.truck_uuid_index_dict = bidict(cls.truck_uuid_index_dict)
# cls.dump_uuid_index_dict = bidict(cls.dump_uuid_index_dict)
@classmethod
def
get_group_excavator_dict
(
cls
,
group_id
):
return
cls
.
excavator_uuid_to_index_dict
[
group_id
]
@classmethod
def
get_group_dump_dict
(
cls
,
group_id
):
return
cls
.
dump_uuid_to_index_dict
[
group_id
]
@classmethod
def
get_group_unload_area_dict
(
cls
,
group_id
):
return
cls
.
unload_area_uuid_to_index_dict
[
group_id
]
@classmethod
def
get_all_group
(
cls
):
return
set
(
cls
.
group_excavator_dict
.
keys
())
...
...
data/static_data_process.py
View file @
a9759c8e
...
...
@@ -334,7 +334,7 @@ def update_autodisp_excavator():
# 用于动态派车的挖机集合
dynamic_excavator_list
=
[]
try
:
for
item
in
(
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
()
.
all
()):
for
item
in
(
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
)
.
all
()):
if
item
.
exactor_id
not
in
dynamic_excavator_list
:
dynamic_excavator_list
.
append
(
item
.
exactor_id
)
if
len
(
dynamic_excavator_list
)
<
1
:
...
...
@@ -351,7 +351,7 @@ def update_autodisp_dump():
# 用于动态调度的卸载点集合
dynamic_dump_list
=
[]
try
:
for
item
in
(
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
()
.
all
()):
for
item
in
(
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
isdeleted
=
0
)
.
all
()):
if
item
.
dump_id
not
in
dynamic_dump_list
:
dynamic_dump_list
.
append
(
item
.
dump_id
)
if
len
(
dynamic_dump_list
)
<
1
:
...
...
equipment/dump.py
View file @
a9759c8e
...
...
@@ -84,7 +84,7 @@ class DumpInfo(WalkManage):
# except Exception as es:
# self.logger.error(f"卸载设备 {dump_id} 卸载时间信息缺失, 已设为默认值(1min)")
# self.logger.error(es)
self
.
unloading_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
10
.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]])
# 更新卸载设备出入时间
...
...
@@ -117,7 +117,7 @@ class DumpInfo(WalkManage):
def
update_dump_material
(
self
):
self
.
dump_material
=
{}
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
#
try:
try
:
# unload_area_id = session_mysql.query(DispatchSetting).filter_by(dump_id=dump_id, isauto=1, isdeleted=0).first().unload_area_id
unload_area_id
=
session_mysql
.
query
(
DispatchSetting
)
.
filter_by
(
dump_id
=
dump_id
,
isdeleted
=
0
)
.
first
()
.
unload_area_id
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Materials
...
...
@@ -126,12 +126,12 @@ class DumpInfo(WalkManage):
else
:
dump_material_id
=
list
(
dump_material_id
)
self
.
dump_material
[
dump_id
]
=
dump_material_id
#
except Exception as es:
# self.logger.error("卸点物料更新异常"
)
# self.dump_material[dump_id] = {}
# self.logger.error(es)
#
session_mysql.rollback()
#
session_postgre.rollback()
except
Exception
as
es
:
self
.
logger
.
error
(
f
'卸点物料更新异常 in {es.__traceback__.tb_lineno}'
)
self
.
logger
.
error
(
es
)
self
.
dump_material
[
dump_id
]
=
{}
session_mysql
.
rollback
()
session_postgre
.
rollback
()
def
update_dump_priority
(
self
):
unload_area_index_to_uuid_dict
=
get_value
(
"unload_area_index_to_uuid_dict"
)
...
...
equipment/excavator.py
View file @
a9759c8e
...
...
@@ -82,7 +82,7 @@ class ExcavatorInfo(WalkManage):
self
.
logger
.
info
(
self
.
loading_time
)
self
.
logger
.
info
(
"excavator_uuid_to_index_dict"
)
self
.
logger
.
info
(
self
.
excavator_uuid_to_index_dict
)
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
2
.00
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
5
.00
# 更新挖机设备出入时间
def
update_excavator_entrance_exit_time
(
self
):
...
...
equipment/truck.py
View file @
a9759c8e
...
...
@@ -218,7 +218,7 @@ class TruckInfo(WalkManage):
self
.
logger
.
error
(
es
)
self
.
truck_is_temp
[
truck_name_to_uuid_dict
[
item
]]
=
True
print
(
f
'here3 {item} {bool(isTemp)}'
)
#
print(f'here3 {item} {bool(isTemp)}')
except
Exception
as
es
:
self
.
logger
.
warning
(
"读取矿卡任务异常-reids读取异常"
)
self
.
logger
.
warning
(
es
)
...
...
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