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
49054843
Commit
49054843
authored
Apr 14, 2022
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加等待时间算法,修复部分BUG
parent
11c09e4a
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
836 additions
and
1108 deletions
+836
-1108
CHANGELOG.txt
CHANGELOG.txt
+10
-0
algorithm.py
algorithm.py
+180
-15
config.json
config.json
+5
-4
dispatcher.py
dispatcher.py
+138
-79
dump.py
equipment/dump.py
+13
-18
excavator.py
equipment/excavator.py
+5
-15
truck.py
equipment/truck.py
+96
-99
group_control.py
group_control/group_control.py
+50
-14
para_config.py
para_config.py
+227
-743
path_plannner.py
path_plan/path_plannner.py
+71
-71
priority_control.py
path_plan/priority_control.py
+2
-4
realtime_dispatch.py
realtime_dispatch.py
+29
-32
settings.py
settings.py
+2
-2
tables.py
tables.py
+4
-3
traffic_flow_info.py
traffic_flow/traffic_flow_info.py
+4
-9
No files found.
CHANGELOG.txt
View file @
49054843
...
...
@@ -41,4 +41,13 @@ Changelog for package Dispatch
[fix ]:
[TODO ]:
[info ]: author: zxt ; time: 2021-11-03 10:13:00 ; email: ; tel: ;
--------------------
--------------------
[version]: 3.4.0
[message]: add expected travelling time algorithm module
[feather]:
[fix ]:
[TODO ]:
[info ]: author: zxt ; time: 2022-04-07 17:33:00 ; email: ; tel: ;
--------------------
\ No newline at end of file
algorithm.py
View file @
49054843
...
...
@@ -8,6 +8,9 @@
from
para_config
import
*
from
equipment.truck
import
TruckInfo
from
equipment.dump
import
DumpInfo
from
equipment.excavator
import
ExcavatorInfo
class
ScheduleAlg
(
WalkManage
):
""" class for the schedule algorithm.
...
...
@@ -19,13 +22,15 @@ class ScheduleAlg(WalkManage):
equipment class: truck, excavator, dump, group
"""
def
__init__
(
self
,
dump
,
excavator
,
truck
,
group
):
def
__init__
(
self
,
dump
,
excavator
,
truck
,
group
,
pre_sch
):
self
.
_dump
=
dump
self
.
_excavator
=
excavator
self
.
_truck
=
truck
self
.
_group
=
group
# 获取日志器
self
.
logger
=
get_logger
(
"zxt.alg"
)
# 行程预测对象
self
.
_pre_sch
=
pre_sch
def
truck_schedule
(
self
,
current_truck
,
alg
):
"""
...
...
@@ -35,27 +40,43 @@ class ScheduleAlg(WalkManage):
:return: 调度价值
"""
if
alg
==
"congestion"
:
transport_value
=
None
try
:
if
alg
==
"congestion"
:
transport_value
=
self
.
congestion_schedule
(
current_truck
)
transport_value
=
self
.
congestion_schedule
(
current_truck
.
get_truck_id
(),
current_truck
)
elif
alg
==
"traffic_plan"
:
elif
alg
==
"traffic_plan"
:
transport_value
=
self
.
traffic_plan_schedule
(
current_truck
)
transport_value
=
self
.
traffic_plan_schedule
(
current_truck
)
elif
alg
==
"saturation"
:
elif
alg
==
"saturation"
:
transport_value
=
self
.
saturation_schedule
(
current_truck
)
elif
alg
==
"expected"
:
transport_value
=
self
.
saturation
_schedule
(
current_truck
)
transport_value
=
self
.
expected_travelling
_schedule
(
current_truck
)
else
:
return
None
else
:
return
None
except
Exception
as
es
:
self
.
logger
.
error
(
"调度算法计算异常"
)
self
.
logger
.
error
(
es
)
return
transport_value
def
congestion_schedule
(
self
,
truck_id
,
current_truck
):
def
congestion_schedule
(
self
,
current_truck
):
"""
计算车辆驶往各目的地的拥堵度
:param current_truck: 请求调度
:return: transport_value
"""
transport_value
=
None
truck_id
=
current_truck
.
get_truck_id
()
group_id
=
current_truck
.
get_group_id
()
task
=
current_truck
.
get_task
()
...
...
@@ -70,7 +91,7 @@ class ScheduleAlg(WalkManage):
################################################ 矿卡启动 ###############################################
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡启动或故障恢复"
)
self
.
logger
.
info
(
f
"涉及挖机:{list(
self._excavator
.excavator_uuid_to_index_dict.keys())}"
)
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
)
...
...
@@ -87,7 +108,7 @@ class ScheduleAlg(WalkManage):
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡空载"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{list(
self._dump
.dump_uuid_to_index_dict.keys())}"
)
self
.
logger
.
info
(
f
"涉及卸载设备:{list(
DumpInfo
.dump_uuid_to_index_dict.keys())}"
)
except
Exception
as
es
:
self
.
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
self
.
logger
.
error
(
es
)
...
...
@@ -104,7 +125,7 @@ class ScheduleAlg(WalkManage):
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡重载"
)
self
.
logger
.
info
(
f
"涉及挖机设备:{list(
self._excavator
.excavator_uuid_to_index_dict.keys())}"
)
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
)
...
...
@@ -119,6 +140,151 @@ class ScheduleAlg(WalkManage):
return
transport_value
def
expected_travelling_schedule
(
self
,
current_truck
):
"""
车辆驶往各目的地预计行驶时间
:param current_truck: 请求调度车辆信息
:return: transport_value
"""
transport_value
=
None
truck_id
=
current_truck
.
get_truck_id
()
group_id
=
current_truck
.
get_group_id
()
task
=
current_truck
.
get_task
()
trip
=
current_truck
.
get_trip
()
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
dynamic_dump_num
=
get_value
(
"dynamic_dump_num"
)
# 车辆可用时间
truck_avl_time
=
self
.
_pre_sch
.
get_truck_avl_time
(
truck_id
=
truck_id
)
if
task
==
-
2
:
################################################ 矿卡启动 ###############################################
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡启动或故障恢复"
)
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:
# 挖机可用时间
excavator_val_time
=
self
.
_group
.
update_excavator_avl_time
(
self
.
_pre_sch
.
get_excavator_avl_time
())[
group_id
]
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
_group
.
group_park_to_excavator
[
group_id
][
0
,
:]
/
1000
/
\
self
.
_truck
.
empty_speed
[
truck_id
]
+
truck_avl_time
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_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_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
)
# except Exception as es:
# transport_value = np.zeros(dynamic_excavator_num)
# self.logger.info(es)
if
task
in
[
0
,
1
,
2
]:
################################################ 矿卡空载 ###############################################
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡空载"
)
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:
# 卸点可用时间
dump_val_time
=
self
.
_group
.
update_dump_avl_time
(
self
.
_pre_sch
.
get_dump_avl_time
())[
group_id
]
# 车辆所在挖机
excavator_id
=
DeviceMap
.
excavator_index_to_uuid_dict
[
int
(
trip
[
1
])]
# 挖机对应分组编号
excavator_group_index
=
self
.
_group
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
_group
.
group_walk_to_dump_cost
[
group_id
][
excavator_group_index
,
:]
\
/
1000
/
self
.
_truck
.
heavy_speed
[
truck_id
]
+
truck_avl_time
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
dump_val_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_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
)
# except Exception as es:
# transport_value = np.zeros(dynamic_dump_num)
# self.logger.error(es)
elif
task
in
[
3
,
4
,
5
]:
################################################ 矿卡重载 ###############################################
try
:
self
.
logger
.
info
(
"矿卡状态:矿卡重载"
)
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
:
# 挖机可用时间
excavator_val_time
=
self
.
_group
.
update_excavator_avl_time
(
self
.
_pre_sch
.
get_excavator_avl_time
())[
group_id
]
# 车辆所在卸点
dump_id
=
DeviceMap
.
dump_index_to_uuid_dict
[
int
(
trip
[
1
])]
# 卸点对应分组编号
dump_group_index
=
self
.
_group
.
group_dump_uuid_to_index_dict
[
group_id
][
dump_id
]
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
_group
.
group_walk_to_excavator_cost
[
group_id
][
dump_group_index
,
:]
\
/
1000
/
self
.
_truck
.
empty_speed
[
truck_id
]
+
truck_avl_time
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_time
)
# 计算行程时间
transport_value
=
truck_service_time
-
truck_avl_time
except
Exception
as
es
:
transport_value
=
np
.
zeros
(
dynamic_dump_num
)
self
.
logger
.
error
(
es
)
return
transport_value
# def traffic_plan_schedule(self, current_truck):
#
# traffic_value = None
...
...
@@ -324,4 +490,4 @@ class ScheduleAlg(WalkManage):
self
.
logger
.
info
(
f
'饱和度价值 {saturation_value}'
)
# self.logger.info(saturation_value)
return
saturation_value
\ No newline at end of file
return
saturation_value
config.json
View file @
49054843
{
"para"
:
{
"log_path"
:
"
/usr/local/fleet-log/dispatch
"
,
"log_path"
:
"
E:
\\
Pycharm Projects
\\
Waytous
\\
"
,
"empty_speed"
:
25
,
"heavy_speed"
:
22
,
"dump_target_mass"
:
5000
,
...
...
@@ -8,7 +8,7 @@
},
"mysql"
:
{
"host"
:
"192.168.
28.111
"
,
"host"
:
"192.168.
9.152
"
,
"port"
:
"3306"
,
"user"
:
"root"
,
"password"
:
"Huituo@123"
,
...
...
@@ -16,7 +16,7 @@
},
"postgresql"
:
{
"host"
:
"192.168.
28.111
"
,
"host"
:
"192.168.
9.152
"
,
"port"
:
"5432"
,
"user"
:
"postgres"
,
"password"
:
"Huituo@123"
,
...
...
@@ -24,7 +24,7 @@
},
"redis"
:
{
"host"
:
"192.168.
28.111
"
,
"host"
:
"192.168.
9.152
"
,
"password"
:
"Huituo@123"
}
}
\ No newline at end of file
dispatcher.py
View file @
49054843
...
...
@@ -14,6 +14,19 @@ from algorithm import ScheduleAlg
class
CurrentTruck
:
""" class for the information of current dispatching truck.
Description:
当前请求调度卡车信息
Attribute:
truck_id(uuid)
group_id(uuid)
trip(list)
task(int)
"""
def
__init__
(
self
,
truck_id
,
group_id
,
trip
,
task
):
self
.
_truck_id
=
truck_id
self
.
_group_id
=
group_id
...
...
@@ -166,7 +179,8 @@ class Dispatcher(WalkManage):
self
.
path
=
PathPlanner
()
# 车流对象
self
.
traffic_flow
=
Traffic_flow
(
dump
,
excavator
,
truck
)
# self.traffic_flow = Traffic_flow(dump, excavator, truck)
self
.
traffic_flow
=
None
# 分组控制对象
self
.
group
=
Group
(
dump
,
excavator
,
truck
,
self
.
traffic_flow
)
...
...
@@ -180,31 +194,28 @@ class Dispatcher(WalkManage):
self
.
truck
=
truck
# 调度算法
self
.
_schedule_alg
=
ScheduleAlg
(
dump
,
excavator
,
truck
,
self
.
group
)
self
.
_schedule_alg
=
ScheduleAlg
(
dump
,
excavator
,
truck
,
self
.
group
,
self
.
pre_sch
)
# 获取日志器
self
.
logger
=
get_logger
(
"zxt.dispatcher"
)
def
dispatcher_period_update
(
self
):
# 装载映射参数及
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
global_period_para_update
()
# 更新卸载设备对象
self
.
dump
.
para_period_update
()
self
.
dump
.
dump_
para_period_update
()
# 更新挖机对象
self
.
excavator
.
para_period_update
()
self
.
excavator
.
excavator_
para_period_update
()
# 更新矿卡对象
self
.
truck
.
para_period_update
(
self
.
dump
,
self
.
excavator
)
self
.
truck
.
truck_
para_period_update
(
self
.
dump
,
self
.
excavator
)
self
.
truck
.
state_period_update
()
# 更新实时车流
self
.
traffic_flow
.
update_actual_traffic_flow
()
#
#
更新实时车流
#
self.traffic_flow.update_actual_traffic_flow()
# 获取路网加权行驶成本
self
.
cost_to_excavator
,
self
.
cost_to_dump
,
self
.
cost_park_to_excavator
=
self
.
path
.
walk_cost_cal
()
...
...
@@ -263,6 +274,7 @@ class Dispatcher(WalkManage):
################################################ 矿卡启动 ###############################################
try
:
self
.
logger
.
info
(
datetime
.
now
())
self
.
logger
.
info
(
"矿卡状态:矿卡启动或故障恢复"
)
self
.
logger
.
info
(
"矿卡行程:无"
)
self
.
logger
.
info
(
f
"涉及挖机:{list(self.excavator.excavator_uuid_to_index_dict.keys())}"
)
...
...
@@ -274,44 +286,61 @@ class Dispatcher(WalkManage):
self
.
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
self
.
logger
.
error
(
es
)
# try:
# 1. 绑定调度
if
truck_id
in
self
.
truck
.
truck_excavator_bind
:
self
.
logger
.
info
(
"绑定调度"
)
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
truck
.
truck_excavator_bind
[
truck_id
]]
try
:
# 1. 绑定调度
if
truck_id
in
self
.
truck
.
truck_excavator_bind
:
self
.
logger
.
info
(
"绑定调度"
)
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
truck
.
truck_excavator_bind
[
truck_id
]]
# 2. 正常调度
elif
rule3
and
rule4
:
self
.
logger
.
info
(
"正常调度"
)
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"expected"
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {transport_value}'
)
excavator_exclude_modify
=
self
.
group
.
group_excavator_exclude_modify
[
truck_id
]
self
.
logger
.
info
(
f
'挖机设备禁止因子 {excavator_exclude_modify}'
)
# 2. 正常调度
elif
rule3
and
rule4
:
self
.
logger
.
info
(
"正常调度"
)
target
=
np
.
argmin
(
transport_value
+
excavator_exclude_modify
)
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"congestion"
)
self
.
logger
.
info
(
"truck_schedule-target"
)
self
.
logger
.
info
(
target
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {transport_value}'
)
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
self
.
logger
.
info
(
"truck_schedule-dict"
)
self
.
logger
.
info
(
self
.
excavator
.
excavator_uuid_to_index_dict
)
self
.
logger
.
info
(
self
.
group
.
group_excavator_index_to_uuid_dict
)
excavator_exclude_modify
=
self
.
group
.
group_excavator_exclude_modify
[
truck_id
]
self
.
logger
.
info
(
"truck_schedule-target"
)
self
.
logger
.
info
(
target
)
self
.
logger
.
info
(
f
'挖机设备禁止因子 {excavator_exclude_modify
}'
)
self
.
logger
.
info
(
f
'excavator_uuid_to_index_dict {self.excavator.excavator_uuid_to_index_dict
}'
)
target
=
np
.
argmin
(
transport_value
+
excavator_exclude_modify
)
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
# 3. 启用饱和度调度
else
:
self
.
logger
.
info
(
"饱和度调度"
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {self.excavator.excavator_uuid_to_index_dict}'
)
# saturation_value = self._schedule_alg.saturation_schedule(current_truck
)
# 3. 启用饱和度调度
else
:
self
.
logger
.
info
(
"饱和度调度"
)
saturation_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"saturation"
)
saturation_value
=
self
.
_schedule_alg
.
saturation_schedule
(
current_truck
)
self
.
logger
.
info
(
f
'驶往挖机饱和度价值 {saturation_value}'
)
self
.
logger
.
info
(
f
'驶往挖机饱和度价值 {saturation_value}'
)
target
=
np
.
argmax
(
saturation_value
)
target
=
np
.
argmax
(
saturation_value
)
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
target
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
except
Exception
as
es
:
self
.
logger
.
error
(
f
"矿卡{truck_id}调度指令生成异常"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
info
(
self
.
excavator
.
excavator_uuid_to_index_dict
)
self
.
logger
.
info
(
self
.
group
.
group_excavator_uuid_to_index_dict
)
...
...
@@ -343,45 +372,54 @@ class Dispatcher(WalkManage):
self
.
logger
.
info
(
"矿卡行程信息异常"
)
self
.
logger
.
info
(
es
)
# 1. 绑定调度
if
truck_id
in
self
.
truck
.
truck_dump_bind
:
self
.
logger
.
info
(
"矿卡已绑定卸点"
)
unload_area_uuid_to_index_dict
=
get_value
(
"unload_area_uuid_to_index_dict"
)
bind_unload_area_id
=
self
.
truck
.
truck_dump_bind
[
truck_id
]
for
key
,
value
in
self
.
dump
.
dump_index_to_unload_area_index_dict
.
items
():
if
value
==
unload_area_uuid_to_index_dict
[
bind_unload_area_id
]:
target
=
key
break
# 2. 正常调度
elif
rule3
and
rule4
:
try
:
# 1. 绑定调度
if
truck_id
in
self
.
truck
.
truck_dump_bind
:
self
.
logger
.
info
(
"矿卡已绑定卸点"
)
unload_area_uuid_to_index_dict
=
get_value
(
"unload_area_uuid_to_index_dict"
)
bind_unload_area_id
=
self
.
truck
.
truck_dump_bind
[
truck_id
]
for
key
,
value
in
self
.
dump
.
dump_index_to_unload_area_index_dict
.
items
():
if
value
==
unload_area_uuid_to_index_dict
[
bind_unload_area_id
]:
target
=
key
break
# 2. 正常调度
elif
rule3
and
rule4
:
# 卸载点处理能力及产量约束 and 电铲采装能力及产量约束 均未启用
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"expected"
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {transport_value}'
)
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"congestion"
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {transport_value
}'
)
dump_material_bind_modify
=
self
.
group
.
group_dump_material_bind_modify
[
truck_id
]
self
.
logger
.
info
(
f
'卸点物料禁止因子 {dump_material_bind_modify
}'
)
dump_material_bind_modify
=
self
.
group
.
group_dump_material_bind_modify
[
truck_id
]
self
.
logger
.
info
(
f
'卸点物料禁止因子 {dump_material_bind_modify}'
)
target
=
np
.
argmin
(
transport_value
.
T
+
dump_material_bind_modify
)
target
=
np
.
argmin
(
transport_value
.
T
+
dump_material_bind_modify
)
target
=
self
.
dump
.
dump_uuid_to_index_dict
[
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
target
=
self
.
dump
.
dump_uuid_to_index_dict
[
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
# 3. 饱和度调度
else
:
# 卸载点处理能力及产量约束 or 电铲采装能力及产量约束 启用
# 3. 饱和度调度
else
:
self
.
logger
.
info
(
"饱和度调度"
)
self
.
logger
.
info
(
"饱和度调度"
)
# saturation_value = self._schedule_alg.saturation_schedule(current_truck
)
# saturation_value = self._schedule_alg.saturation_schedule(current_truck
)
saturation_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"saturation"
)
saturation_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"saturation"
)
self
.
logger
.
info
(
f
'驶往卸点饱和度价值 {saturation_value}'
)
self
.
logger
.
info
(
f
'驶往卸点饱和度价值 {saturation_value}'
)
target
=
np
.
argmax
(
saturation_value
)
target
=
np
.
argmax
(
saturation_value
)
target
=
self
.
dump
.
dump_uuid_to_index_dict
[
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
target
=
self
.
dump
.
dump_uuid_to_index_dict
[
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
except
Exception
as
es
:
self
.
logger
.
error
(
f
"矿卡{truck_id}调度指令生成异常"
)
self
.
logger
.
error
(
es
)
dump_uuid_to_name_dict
=
get_value
(
"dump_uuid_to_name_dict"
)
self
.
logger
.
info
(
f
"目的地:{dump_uuid_to_name_dict[self.dump.dump_index_to_uuid_dict[target]]}"
)
...
...
@@ -429,7 +467,7 @@ class Dispatcher(WalkManage):
elif
rule3
and
rule4
:
self
.
logger
.
info
(
"正常调度"
)
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"
congestion
"
)
transport_value
=
self
.
_schedule_alg
.
truck_schedule
(
current_truck
,
"
expected
"
)
self
.
logger
.
info
(
f
'行驶成本-含拥堵度的路径长度 {transport_value}'
)
excavator_exclude_modify
=
self
.
group
.
group_excavator_exclude_modify
[
truck_id
]
...
...
@@ -459,11 +497,11 @@ class Dispatcher(WalkManage):
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
except
Exception
as
es
:
self
.
logger
.
error
(
"trip出错1
"
)
self
.
logger
.
error
(
f
"矿卡{truck_id}调度指令生成异常
"
)
self
.
logger
.
info
(
es
)
excavator_uuid_to_name_dict
=
get_value
(
"excavator_uuid_to_name_dict"
)
self
.
logger
.
info
(
f
"目的地:{excavator_uuid_to_name_dict[
self.excavator
.excavator_index_to_uuid_dict[target]]}"
)
self
.
logger
.
info
(
f
"目的地:{excavator_uuid_to_name_dict[
DeviceMap
.excavator_index_to_uuid_dict[target]]}"
)
self
.
logger
.
info
(
"=========================================================="
)
...
...
@@ -587,8 +625,8 @@ class Dispatcher(WalkManage):
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
dump_id
=
self
.
dum
p
.
dump_index_to_uuid_dict
[
Seq
[
i
][
1
]],
exactor_id
=
self
.
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
0
]],
.
filter_by
(
dump_id
=
DeviceMa
p
.
dump_index_to_uuid_dict
[
Seq
[
i
][
1
]],
exactor_id
=
DeviceMap
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,
)
.
first
())
...
...
@@ -607,8 +645,8 @@ class Dispatcher(WalkManage):
elif
task
in
heavy_task_set
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
self
.
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
dump_id
=
self
.
dum
p
.
dump_index_to_uuid_dict
[
Seq
[
i
][
0
]],
.
filter_by
(
exactor_id
=
DeviceMap
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
dump_id
=
DeviceMa
p
.
dump_index_to_uuid_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,
)
.
first
())
...
...
@@ -628,11 +666,15 @@ class Dispatcher(WalkManage):
try
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
self
.
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
.
filter_by
(
exactor_id
=
DeviceMap
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
)
.
first
())
print
(
Seq
)
print
(
Seq
[
i
][
1
])
print
(
DeviceMap
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]])
print
(
"item"
)
print
(
item
.
id
,
item
.
truck_id
,
item
.
exactor_id
,
item
.
dump_id
)
except
Exception
as
es
:
...
...
@@ -681,7 +723,7 @@ class PreSchedule:
Description:
Calculate and update the prediction item.
复杂
处理所有预测项的计算与更新
负责
处理所有预测项的计算与更新
基于矿卡最近一次装卸载时间预测其抵达目的地时间
根据矿卡请求队列及抵达信息,计算设备最早可用时间
...
...
@@ -709,6 +751,8 @@ class PreSchedule:
# 卡车完成装载及卸载时间(矿卡可用时间)
self
.
truck_avl_time
=
np
.
zeros
(
self
.
truck
.
get_truck_num
())
self
.
logger
=
get_logger
(
"zxt.pre_schedule"
)
def
update_truck_reach_time
(
self
):
"""
更新矿卡预计抵达目的地时间
...
...
@@ -731,9 +775,13 @@ class PreSchedule:
excavator_avl_ls
=
[[]
for
_
in
range
(
dynamic_excavator_num
)]
dump_avl_ls
=
[[]
for
_
in
range
(
dumps
)]
self
.
logger
.
info
(
"update_truck_reach_time-trucks"
)
self
.
logger
.
info
(
trucks
)
for
i
in
range
(
trucks
):
task
=
truck_current_task
[
self
.
truck
.
truck_index_to_uuid_dict
[
i
]]
end_area_index
=
truck_current_trip
[
i
][
1
]
self
.
logger
.
info
(
"update_truck_reach_time-truck_current_trip"
)
self
.
logger
.
info
(
truck_current_trip
)
if
task
in
[
0
,
1
]:
reach_time
=
truck_reach_excavator
[
i
]
excavator_avl_ls
[
end_area_index
]
.
append
(
...
...
@@ -782,6 +830,8 @@ class PreSchedule:
)
for
reach_ls
in
excavator_avl_ls
:
self
.
logger
.
info
(
"update_excavator_avl_time-excavator_avl_ls"
)
self
.
logger
.
info
(
excavator_avl_ls
)
if
len
(
reach_ls
)
!=
0
:
reach_ls
=
np
.
array
(
reach_ls
)
tmp
=
reach_ls
[
np
.
lexsort
(
reach_ls
[:,
::
-
1
]
.
T
)]
...
...
@@ -884,24 +934,33 @@ class PreSchedule:
dump_avl_time
=
self
.
update_dump_avl_time
(
dump_avl_ls
)
return
dump_avl_time
def
get_excavator_avl_time
(
self
):
def
get_excavator_avl_time
(
self
,
excavator_id
=
None
):
"""
获取挖机最早可用时间
:param excavator_id: 挖机编号uuid
:return:
excavator_avl_time: (array) 各挖机完成所有已分配矿卡装载的时间
"""
self
.
_reset
()
excavator_avl_ls
,
dump_avl_ls
=
self
.
update_truck_reach_time
()
return
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
if
excavator_id
is
not
None
:
return
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
\
[
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
else
:
return
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
def
get_truck_avl_time
(
self
):
def
get_truck_avl_time
(
self
,
truck_id
=
None
):
"""
获取矿卡最早可用时间
:
return:
truck_avl_time: (array) 各矿卡完成当前装载或卸载任务的时间
:
param truck_id: 矿卡编号uuid
:return:
truck_avl_time: (array) 各矿卡完成当前装载或卸载任务的时间
"""
self
.
_reset
()
excavator_avl_ls
,
dump_avl_ls
=
self
.
update_truck_reach_time
()
self
.
update_excavator_avl_time
(
excavator_avl_ls
)
self
.
update_dump_avl_time
(
dump_avl_ls
)
return
self
.
truck_avl_time
if
truck_id
is
not
None
:
return
self
.
truck_avl_time
[
self
.
truck
.
truck_uuid_to_index_dict
[
truck_id
]]
else
:
return
self
.
truck_avl_time
equipment/dump.py
View file @
49054843
...
...
@@ -32,15 +32,11 @@ class DumpInfo(WalkManage):
# 卸点卸载能力
self
.
dump_strength
=
np
.
zeros
(
self
.
dynamic_dump_num
)
# 初始化读取映射及路网
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
# 日志器
self
.
logger
=
get_logger
(
"zxt.dump"
)
# 参数初始化
self
.
para_period_update
()
#
#
参数初始化
# self.dump_
para_period_update()
def
get_unloading_time
(
self
):
return
self
.
unloading_time
...
...
@@ -88,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
]]
=
5
.00
self
.
unloading_time
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
=
2
.00
# print("average_unload_time: ", self.unloading_time[self.dump_uuid_to_index_dict[dump_id]])
# 更新卸载设备出入时间
...
...
@@ -126,7 +122,7 @@ class DumpInfo(WalkManage):
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Material
self
.
dump_material
[
dump_id
]
=
dump_material_id
except
Exception
as
es
:
self
.
logger
.
error
(
"
无动态派车计划可用
"
)
self
.
logger
.
error
(
"
卸点物料更新异常
"
)
self
.
logger
.
error
(
es
)
def
update_dump_priority
(
self
):
...
...
@@ -135,10 +131,14 @@ class DumpInfo(WalkManage):
try
:
unload_area_index
=
self
.
dump_index_to_unload_area_index_dict
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
unload_area_id
=
unload_area_index_to_uuid_dict
[
unload_area_index
]
self
.
logger
.
debug
(
"update_dump_priority-unload_area_index"
)
self
.
logger
.
debug
(
unload_area_index
)
self
.
logger
.
debug
(
"update_dump_priority-unload_area_id"
)
self
.
logger
.
debug
(
unload_area_id
)
item
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
self
.
dump_priority_coefficient
[
self
.
dump_uuid_to_index_dict
[
dump_id
]]
+=
item
.
Priority
except
Exception
as
es
:
self
.
logger
.
error
(
"
无动态派车计划可用
"
)
self
.
logger
.
error
(
"
卸点优先级更新异常
"
)
self
.
logger
.
error
(
es
)
def
update_unload_ability
(
self
):
...
...
@@ -149,10 +149,10 @@ class DumpInfo(WalkManage):
unload_area_id
=
unload_area_index_to_uuid_dict
[
self
.
dump_index_to_unload_area_index_dict
[
dump_index
]]
unload_ability
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
UnloadAbililty
self
.
dump_strength
[
dump_index
]
=
unload_ability
# 卸载设备最大卸载能力,单位吨/小时
self
.
dump_strength
[
dump_index
]
=
unload_ability
# 卸载设备最大卸载能力,单位吨/小时
#
if unload_ability < 200:
#
raise Exception("卸载点卸载能力异常")
if
unload_ability
<
200
:
raise
Exception
(
"卸载点卸载能力异常"
)
else
:
self
.
dump_strength
=
np
.
full
(
self
.
dynamic_dump_num
,
5000
)
...
...
@@ -178,7 +178,7 @@ class DumpInfo(WalkManage):
# 卸点卸载能力
self
.
dump_strength
=
np
.
zeros
(
self
.
dynamic_dump_num
)
def
para_period_update
(
self
):
def
dump_
para_period_update
(
self
):
self
.
reset
()
...
...
@@ -186,11 +186,6 @@ class DumpInfo(WalkManage):
self
.
logger
.
info
(
"Dump update!"
)
# 装载周期参数
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
# 计算平均卸载时间
self
.
update_dump_unloadtime
()
...
...
equipment/excavator.py
View file @
49054843
...
...
@@ -36,15 +36,11 @@ class ExcavatorInfo(WalkManage):
# 挖机装载能力
self
.
excavator_strength
=
np
.
zeros
(
self
.
dynamic_excavator_num
)
# 初始化读取映射及路网
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
# 日志器
self
.
logger
=
get_logger
(
"zxt.excavator"
)
# 参数初始化
self
.
para_period_update
()
#
#
#
参数初始化
# self.excavator_
para_period_update()
def
get_loading_time
(
self
):
return
self
.
loading_time
...
...
@@ -86,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
]]
=
5
.00
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
1
.00
# 更新挖机设备出入时间
def
update_excavator_entrance_exit_time
(
self
):
...
...
@@ -207,7 +203,7 @@ class ExcavatorInfo(WalkManage):
# 挖机装载能力
self
.
excavator_strength
=
np
.
zeros
(
get_value
(
"dynamic_excavator_num"
))
def
para_period_update
(
self
):
def
excavator_
para_period_update
(
self
):
self
.
reset
()
...
...
@@ -218,14 +214,8 @@ class ExcavatorInfo(WalkManage):
self
.
logger
.
info
(
"物料优先级规则"
)
self
.
logger
.
info
(
rule7
)
# 装载周期参数
self
.
period_map_para_load
()
print
(
"truck.excavator_uuid_index_dict"
)
print
(
self
.
excavator_uuid_to_index_dict
)
self
.
period_walk_para_load
()
# # 用于动态调度的挖机设备
# self.dynamic_excavator_set = set(update_autodisp_excavator())
#
...
...
equipment/truck.py
View file @
49054843
...
...
@@ -12,8 +12,6 @@ from equipment.excavator import ExcavatorInfo
from
typing
import
List
# 矿卡设备类
class
TruckInfo
(
WalkManage
):
def
__init__
(
self
,
dump
,
excavator
):
...
...
@@ -71,20 +69,17 @@ class TruckInfo(WalkManage):
self
.
dump_hold_truck_num
=
np
.
zeros
(
get_value
(
"dynamic_dump_num"
))
# 各装载区矿卡数量
self
.
excavator_hold_truck_num
=
np
.
zeros
(
get_value
(
"dynamic_excavator_num"
))
# 初始化读取映射及路网
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
# 日志
self
.
logger
=
get_logger
(
"zxt.truck"
)
# 初始化读取参数
self
.
para_period_update
(
dump
,
excavator
)
#
#
初始化读取参数
# self.truck_
para_period_update(dump, excavator)
# # 矿卡所属group
# self.truck_group = {}
# 矿卡禁用列表
self
.
truck_disable_list
=
[]
# 对象域
self
.
dump
=
dump
self
.
excavator
=
excavator
self
.
_
dump
=
dump
self
.
_
excavator
=
excavator
def
get_truck_current_trip
(
self
):
return
self
.
truck_current_trip
...
...
@@ -132,13 +127,6 @@ class TruckInfo(WalkManage):
self
.
truck_current_task
=
{}
device_name_set
=
redis2
.
keys
()
# print("tast_truck_set")
# print(get_value("dynamic_truck_set")) ## 两个
#
# print(self.dynamic_truck_set)
# print(self.truck_uuid_to_index_dict)
for
item
in
device_name_set
:
try
:
item
=
item
.
decode
(
encoding
=
"utf-8"
)
...
...
@@ -264,8 +252,8 @@ class TruckInfo(WalkManage):
def
update_truck_trip
(
self
):
walk_time_to_load_area
=
walk_manage
.
get_walk_time_to_load_area
()
walk_time_to_unload_area
=
walk_manage
.
get_walk_time_to_unload_area
()
walk_time_to_load_area
=
WalkManage
.
walk_time_to_load_area
walk_time_to_unload_area
=
WalkManage
.
walk_time_to_unload_area
# 初始化矿卡行程, -1代表备停区
self
.
truck_current_trip
=
np
.
full
((
self
.
dynamic_truck_num
,
2
),
-
1
)
...
...
@@ -287,77 +275,91 @@ class TruckInfo(WalkManage):
self
.
logger
.
error
(
es
)
continue
#
try:
# 若矿卡状态为空运
if
task
in
empty_task_set
:
last_unload_time
=
self
.
relative_last_unload_time
[
self
.
truck_index_to_uuid_dict
[
i
]
]
# 开始区域id
start_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
item
.
dump_id
]
# 开始区域序号
start_area_index
=
unload_area_uuid_to_index_dict
[
start_area_id
]
end_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
]
# # 结束设备index
# end_eqp
_index = self.excavator_uuid_to_index_dict[item.exactor_id]
end_area_index
=
load_area_uuid_to_index_dict
[
end_area_id
]
self
.
truck_current_trip
[
i
]
=
[
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
]
self
.
cur_truck_reach_excavator
[
i
]
=
(
last_unload_time
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
)
try
:
# 若矿卡状态为空运
if
task
in
empty_task_set
:
last_unload_time
=
self
.
relative_last_unload_time
[
self
.
truck_index_to_uuid_dict
[
i
]
]
if
item
.
dump_id
in
DeviceMap
.
dump_uuid_to_unload_area_uuid_dict
:
start_area_id
=
self
.
dump_uuid_to_unload_area_uuid_dict
[
item
.
dump_id
]
start_area_index
=
unload_area_uuid_to_index_dict
[
start_area_id
]
start_eq_index
=
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
]
else
:
start_area_index
=
-
1
start_eq_index
=
-
1
if
item
.
exactor_id
in
DeviceMap
.
excavator_uuid_to_load_area_uuid_dict
:
end_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
]
end_area_index
=
load_area_uuid_to_index_dict
[
end_area_id
]
end_eq
_index
=
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
]
else
:
end_area_index
=
-
1
end_eq_index
=
-
1
self
.
truck_current_trip
[
i
]
=
[
start_eq_index
,
end_eq_index
]
self
.
cur_truck_reach_excavator
[
i
]
=
(
last_unload_time
+
walk_time_to_load_area
[
start_area_index
][
end_area_index
]
)
# # 目的地矿卡数加一
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
# 若矿卡状态为重载
elif
task
in
heavy_task_set
:
# print("读取重载行程")
# print(item.exactor_id, item.dump_id)
last_load_time
=
self
.
relative_last_load_time
[
self
.
truck_index_to_uuid_dict
[
i
]
]
# 开始区域id
start_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
]
# 开始区域序号
start_area_index
=
load_area_uuid_to_index_dict
[
start_area_id
]
# 结束区域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
]
# # 结束设备index
# end_eqp_index = self.dump_uuid_to_index_dict[item.dump_id]
self
.
truck_current_trip
[
i
]
=
[
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
],
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
],
]
self
.
cur_truck_reach_dump
[
i
]
=
(
last_load_time
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
)
self
.
logger
.
info
(
f
'update_truck_trip-{truck_id}-last_unload_time'
)
self
.
logger
.
info
(
last_unload_time
)
self
.
logger
.
info
(
f
'update_truck_trip-walk_time_to_load_area'
)
self
.
logger
.
info
(
walk_time_to_load_area
[
start_area_index
][
end_area_index
])
# # 目的地矿卡数加一
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
# 若矿卡状态为重载
elif
task
in
heavy_task_set
:
# print("读取重载行程")
# print(item.exactor_id, item.dump_id)
last_load_time
=
self
.
relative_last_load_time
[
self
.
truck_index_to_uuid_dict
[
i
]
]
if
item
.
exactor_id
in
DeviceMap
.
excavator_uuid_to_load_area_uuid_dict
:
start_area_id
=
self
.
excavator_uuid_to_load_area_uuid_dict
[
item
.
exactor_id
]
start_area_index
=
load_area_uuid_to_index_dict
[
start_area_id
]
start_eq_index
=
self
.
excavator_uuid_to_index_dict
[
item
.
exactor_id
]
else
:
start_area_index
=
-
1
start_eq_index
=
-
1
if
item
.
dump_id
in
DeviceMap
.
dump_uuid_to_index_dict
:
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_eq_index
=
self
.
dump_uuid_to_index_dict
[
item
.
dump_id
]
else
:
end_area_index
=
-
1
end_eq_index
=
-
1
# # 结束设备index
# end_eqp_index = self.dump_uuid_to_index_dict[item.dump_id]
self
.
truck_current_trip
[
i
]
=
[
start_eq_index
,
end_eq_index
]
self
.
cur_truck_reach_dump
[
i
]
=
(
last_load_time
+
walk_time_to_unload_area
[
end_area_index
][
start_area_index
]
)
# 目的地矿卡数加一
# 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]
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
pass
# except Exception as es:
# self.logger.error("矿卡行程读取异常")
# self.logger.error(es)
self
.
logger
.
info
(
f
'update_truck_trip-{truck_id}-last_load_time'
)
self
.
logger
.
info
(
last_load_time
)
self
.
logger
.
info
(
f
'update_truck_trip-walk_time_to_unload_area'
)
self
.
logger
.
info
(
walk_time_to_unload_area
[
end_area_index
][
start_area_index
])
# 目的地矿卡数加一
# 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]
# self.excavator_hold_truck_num[end_eqp_index] = self.excavator_hold_truck_num[end_eqp_index] + 1
pass
except
Exception
as
es
:
self
.
logger
.
error
(
"矿卡行程读取异常"
)
self
.
logger
.
error
(
es
)
# print("self.dump_hold_truck_num")
# print(self.dump_hold_truck_num)
...
...
@@ -366,8 +368,8 @@ class TruckInfo(WalkManage):
# print(self.excavator_hold_truck_num)
self
.
truck_current_trip
.
flatten
()
#
print("当前矿卡行程:")
#
print(self.truck_current_trip)
print
(
"当前矿卡行程:"
)
print
(
self
.
truck_current_trip
)
def
update_eqp_hold_truck
(
self
):
...
...
@@ -547,8 +549,8 @@ class TruckInfo(WalkManage):
if
truck_id
in
self
.
truck_excavator_bind
:
excavator_id
=
self
.
truck_excavator_bind
[
truck_id
]
# print(self.excavator.excavator_material)
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
# print(self.
_
excavator.excavator_material)
excavator_material_id
=
self
.
_
excavator
.
excavator_material
[
excavator_id
]
self
.
truck_material_bind
[
truck_id
]
=
excavator_material_id
for
truck_id
in
self
.
dynamic_truck_set
:
...
...
@@ -560,14 +562,14 @@ class TruckInfo(WalkManage):
material
=
self
.
truck_material_bind
[
truck_id
]
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
):
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
excavator_material_id
=
self
.
_
excavator
.
excavator_material
[
excavator_id
]
excavator_index
=
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
print
(
truck_index
,
excavator_index
)
if
excavator_material_id
!=
material
:
self
.
excavator_material_bind_modify
[
truck_index
][
excavator_index
]
=
1000000
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
dump_material_id
=
self
.
dump
.
dump_material
[
dump_id
]
dump_material_id
=
self
.
_
dump
.
dump_material
[
dump_id
]
dump_index
=
self
.
dump_uuid_to_index_dict
[
dump_id
]
if
dump_material_id
!=
material
:
self
.
dump_material_bind_modify
[
truck_index
][
dump_index
]
=
1000000
...
...
@@ -633,7 +635,7 @@ class TruckInfo(WalkManage):
self
.
dump
=
dump
self
.
excavator
=
excavator
def
para_period_update
(
self
,
dump
,
excavator
):
def
truck_
para_period_update
(
self
,
dump
,
excavator
):
# 初始化参数
self
.
truck_reset
(
dump
,
excavator
)
...
...
@@ -705,11 +707,6 @@ class TruckInfo(WalkManage):
self
.
logger
.
info
(
"Para truck update!"
)
# 装载周期参数
self
.
period_map_para_update
()
self
.
period_walk_para_update
()
# 更新有效载重
self
.
update_truck_payload
()
...
...
group_control/group_control.py
View file @
49054843
...
...
@@ -115,7 +115,7 @@ class Group(WalkManage):
print
(
truck_current_task
)
for
i
in
range
(
dynamic_truck_num
):
task
=
truck_current_task
[
self
.
truck
.
truck_index_to_uuid_dict
[
i
]]
task
=
truck_current_task
[
DeviceMap
.
truck_index_to_uuid_dict
[
i
]]
end_area_index
=
truck_current_trip
[
i
][
1
]
start_area_index
=
truck_current_trip
[
i
][
0
]
...
...
@@ -123,8 +123,6 @@ class Group(WalkManage):
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
])
# logger.info("debug2")
if
task
in
empty_task_set
:
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
])
...
...
@@ -181,16 +179,16 @@ class Group(WalkManage):
dump_group_index
=
self
.
group_dump_uuid_to_index_dict
[
group_id
][
dump_id
]
excavator_group_index
=
self
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
local_opt_goto_dump_traffic_flow
[
excavator_group_index
][
dump_group_index
]
=
\
opt_goto_dump_traffic_flow
[
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]][
self
.
dum
p
.
dump_uuid_to_index_dict
[
dump_id
]]
opt_goto_dump_traffic_flow
[
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]][
DeviceMa
p
.
dump_uuid_to_index_dict
[
dump_id
]]
local_opt_goto_excavator_traffic_flow
[
dump_group_index
][
excavator_group_index
]
=
\
opt_goto_excavator_traffic_flow
[
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
opt_goto_excavator_traffic_flow
[
DeviceMap
.
dump_uuid_to_index_dict
[
dump_id
]][
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]]
local_actual_goto_dump_traffic_flow
[
excavator_group_index
][
dump_group_index
]
=
\
actual_goto_dump_traffic_flow
[
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]][
self
.
dum
p
.
dump_uuid_to_index_dict
[
dump_id
]]
actual_goto_dump_traffic_flow
[
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]][
DeviceMa
p
.
dump_uuid_to_index_dict
[
dump_id
]]
local_actual_goto_excavator_traffic_flow
[
dump_group_index
][
excavator_group_index
]
=
\
actual_goto_excavator_traffic_flow
[
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
actual_goto_excavator_traffic_flow
[
DeviceMap
.
dump_uuid_to_index_dict
[
dump_id
]][
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]]
self
.
group_opt_goto_dump_traffic_flow
[
group_id
]
=
local_opt_goto_dump_traffic_flow
self
.
group_opt_goto_excavator_traffic_flow
[
group_id
]
=
local_opt_goto_excavator_traffic_flow
...
...
@@ -204,7 +202,6 @@ class Group(WalkManage):
logger
.
info
(
self
.
group_opt_goto_dump_traffic_flow
)
logger
.
info
(
self
.
group_opt_goto_excavator_traffic_flow
)
def
update_group_walk_cost
(
self
):
# 更新调度分组路网行驶成本
...
...
@@ -217,7 +214,7 @@ class Group(WalkManage):
dump_group
=
self
.
device_group
[
group_id
][
0
]
excavator_group
=
self
.
device_group
[
group_id
][
1
]
local_walk_to_excavator_cost
=
np
.
zeros
((
len
(
dump_group
),
len
(
excavator_group
)))
local_walk_to_dump_cost
=
np
.
zeros
((
len
(
dump_group
),
len
(
excavator
_group
)))
local_walk_to_dump_cost
=
np
.
zeros
((
len
(
excavator_group
),
len
(
dump
_group
)))
local_park_to_excavator_cost
=
np
.
zeros
((
park_num
,
len
(
excavator_group
)))
for
excavator_id
in
excavator_group
:
for
dump_id
in
dump_group
:
...
...
@@ -226,16 +223,19 @@ class Group(WalkManage):
print
(
"dump_group"
)
print
(
dump_group
)
local_walk_to_excavator_cost
[
dump_group_index
][
excavator_group_index
]
=
\
walk_to_excavator_cost
[
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
walk_to_excavator_cost
[
DeviceMap
.
dump_uuid_to_index_dict
[
dump_id
]][
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]]
local_walk_to_dump_cost
[
dump_group_index
][
excavator
_group_index
]
=
\
walk_to_dump_cost
[
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
local_walk_to_dump_cost
[
excavator_group_index
][
dump
_group_index
]
=
\
walk_to_dump_cost
[
DeviceMap
.
dump_uuid_to_index_dict
[
dump_id
]][
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]]
for
park_index
in
range
(
park_num
):
for
excavator_id
in
excavator_group
:
excavator_group_index
=
self
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
local_park_to_excavator_cost
[
park_index
][
excavator_group_index
]
=
\
park_to_excavator_cost
[
park_index
][
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
park_to_excavator_cost
[
park_index
][
DeviceMap
.
excavator_uuid_to_index_dict
[
excavator_id
]]
print
(
"here1"
)
print
(
park_to_excavator_cost
)
self
.
group_walk_to_excavator_cost
[
group_id
]
=
local_walk_to_excavator_cost
self
.
group_walk_to_dump_cost
[
group_id
]
=
local_walk_to_dump_cost
...
...
@@ -358,6 +358,42 @@ class Group(WalkManage):
return
group_dump_hold_truck
def
update_excavator_avl_time
(
self
,
excavator_avl_time
):
'''
更新调度分组内挖机可用时间
:param excavator_hold_truck:
:return:
'''
group_excavator_avl_time
=
{}
for
group_id
in
self
.
group_set
:
excavator_group
=
self
.
device_group
[
group_id
][
1
]
group_excavator_avl_time
[
group_id
]
=
np
.
zeros
(
len
(
excavator_group
))
for
excavator_id
in
excavator_group
:
group_excavator_index
=
self
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
excavator_index
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]
group_excavator_avl_time
[
group_id
][
group_excavator_index
]
=
excavator_avl_time
[
excavator_index
]
return
group_excavator_avl_time
def
update_dump_avl_time
(
self
,
dump_avl_time
):
'''
更新调度分组内挖机可用时间
:param dump_hold_truck:
:return:
'''
group_dump_avl_time
=
{}
for
group_id
in
self
.
group_set
:
dump_group
=
self
.
device_group
[
group_id
][
0
]
group_dump_avl_time
[
group_id
]
=
np
.
zeros
(
len
(
dump_group
))
for
dump_id
in
dump_group
:
group_dump_index
=
self
.
group_dump_uuid_to_index_dict
[
group_id
][
dump_id
]
dump_index
=
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]
group_dump_avl_time
[
group_id
][
group_dump_index
]
=
dump_avl_time
[
dump_index
]
return
group_dump_avl_time
def
update_allow_flow_to_excavator
(
self
):
group_allow_flow_to_excavator
=
{}
...
...
@@ -391,7 +427,7 @@ class Group(WalkManage):
self
.
update_device_group
()
self
.
update_group_device_map
()
self
.
update_group_walk_cost
()
self
.
update_group_truck_flow
()
#
self.update_group_truck_flow()
self
.
update_modify
()
def
get_diaptch_truck_group
(
self
):
...
...
para_config.py
View file @
49054843
...
...
@@ -85,221 +85,249 @@ global_dict["park_num"] = park_num
def
get_value
(
name
):
return
global_dict
[
name
]
# 设备映射类, 存储除工作区以外的映射关系
# 其余设备类继承该类
class
DeviceMap
:
def
__init__
(
self
):
self
.
excavator_uuid_to_index_dict
=
{}
self
.
dump_uuid_to_index_dict
=
{}
self
.
excavator_index_to_uuid_dict
=
{}
self
.
dump_index_to_uuid_dict
=
{}
self
.
dump_uuid_to_unload_area_uuid_dict
=
{}
self
.
excavator_uuid_to_load_area_uuid_dict
=
{}
self
.
excavator_index_to_load_area_index_dict
=
{}
self
.
dump_index_to_unload_area_index_dict
=
{}
self
.
truck_uuid_to_index_dict
=
{}
self
.
truck_index_to_uuid_dict
=
{}
def
get_excavator_uuid_to_index_dict
(
self
):
return
self
.
excavator_uuid_to_index_dict
def
get_dump_uuid_to_index_dict
(
self
):
return
self
.
dump_uuid_to_index_dict
def
get_excavator_index_to_uuid_dict
(
self
):
return
self
.
excavator_index_to_uuid_dict
def
get_dump_index_to_uuid_dict
(
self
):
return
self
.
dump_index_to_uuid_dict
def
get_dump_uuid_to_unload_area_uuid_dict
(
self
):
return
self
.
dump_uuid_to_unload_area_uuid_dict
def
get_excavator_uuid_to_load_area_uuid_dict
(
self
):
return
self
.
excavator_uuid_to_load_area_uuid_dict
def
get_excavator_index_to_load_area_index_dict
(
self
):
return
self
.
excavator_index_to_load_area_index_dict
def
get_dump_index_to_unload_area_index_dict
(
self
):
return
self
.
dump_index_to_unload_area_index_dict
def
get_truck_uuid_to_index_dict
(
self
):
return
self
.
truck_uuid_to_index_dict
def
get_truck_index_to_uuid_dict
(
self
):
return
self
.
truck_index_to_uuid_dict
excavator_uuid_to_index_dict
=
{}
dump_uuid_to_index_dict
=
{}
excavator_index_to_uuid_dict
=
{}
dump_index_to_uuid_dict
=
{}
dump_uuid_to_unload_area_uuid_dict
=
{}
excavator_uuid_to_load_area_uuid_dict
=
{}
excavator_index_to_load_area_index_dict
=
{}
dump_index_to_unload_area_index_dict
=
{}
truck_uuid_to_index_dict
=
{}
truck_index_to_uuid_dict
=
{}
# def __init__(cls):
# cls.excavator_uuid_to_index_dict = {}
# cls.dump_uuid_to_index_dict = {}
# cls.excavator_index_to_uuid_dict = {}
# cls.dump_index_to_uuid_dict = {}
#
# cls.dump_uuid_to_unload_area_uuid_dict = {}
# cls.excavator_uuid_to_load_area_uuid_dict = {}
# cls.excavator_index_to_load_area_index_dict = {}
# cls.dump_index_to_unload_area_index_dict = {}
#
# cls.truck_uuid_to_index_dict = {}
# cls.truck_index_to_uuid_dict = {}
def
reset
(
self
):
self
.
excavator_uuid_to_index_dict
=
{}
self
.
dump_uuid_to_index_dict
=
{}
self
.
excavator_index_to_uuid_dict
=
{}
self
.
dump_index_to_uuid_dict
=
{}
# def get_excavator_uuid_to_index_dict(cls):
# return cls.excavator_uuid_to_index_dict
#
# def get_dump_uuid_to_index_dict(cls):
# return cls.dump_uuid_to_index_dict
#
# def get_excavator_index_to_uuid_dict(cls):
# return cls.excavator_index_to_uuid_dict
#
# def get_dump_index_to_uuid_dict(cls):
# return cls.dump_index_to_uuid_dict
#
# def get_dump_uuid_to_unload_area_uuid_dict(cls):
# return cls.dump_uuid_to_unload_area_uuid_dict
#
# def get_excavator_uuid_to_load_area_uuid_dict(cls):
# return cls.excavator_uuid_to_load_area_uuid_dict
#
# def get_excavator_index_to_load_area_index_dict(cls):
# return cls.excavator_index_to_load_area_index_dict
#
# def get_dump_index_to_unload_area_index_dict(cls):
# return cls.dump_index_to_unload_area_index_dict
#
# def get_truck_uuid_to_index_dict(cls):
# return cls.truck_uuid_to_index_dict
#
# def get_truck_index_to_uuid_dict(cls):
# return cls.truck_index_to_uuid_dict
self
.
dump_uuid_to_unload_area_uuid_dict
=
{}
self
.
excavator_uuid_to_load_area_uuid_dict
=
{}
self
.
excavator_index_to_load_area_index_dict
=
{}
self
.
dump_index_to_unload_area_index_dict
=
{}
@classmethod
def
reset
(
cls
):
cls
.
excavator_uuid_to_index_dict
=
{}
cls
.
dump_uuid_to_index_dict
=
{}
cls
.
excavator_index_to_uuid_dict
=
{}
cls
.
dump_index_to_uuid_dict
=
{}
self
.
truck_uuid_to_index_dict
=
{}
self
.
truck_index_to_uuid_dict
=
{}
cls
.
dump_uuid_to_unload_area_uuid_dict
=
{}
cls
.
excavator_uuid_to_load_area_uuid_dict
=
{}
cls
.
excavator_index_to_load_area_index_dict
=
{}
cls
.
dump_index_to_unload_area_index_dict
=
{}
def
period_map_para_update
(
self
):
cls
.
truck_uuid_to_index_dict
=
{}
cls
.
truck_index_to_uuid_dict
=
{}
self
.
reset
()
@classmethod
def
period_map_para_update
(
cls
):
cls
.
reset
()
device_map_dict
=
update_deveices_map
(
unload_area_uuid_to_index_dict
,
load_area_uuid_to_index_dict
)
self
.
excavator_uuid_to_index_dict
=
device_map_dict
[
cls
.
excavator_uuid_to_index_dict
=
device_map_dict
[
"excavator_uuid_to_index_dict"
]
print
(
"device.dump_uuid_to_index_dict"
)
print
(
self
.
dump_uuid_to_index_dict
)
self
.
dump_uuid_to_index_dict
=
device_map_dict
[
"dump_uuid_to_index_dict"
]
self
.
excavator_index_to_uuid_dict
=
device_map_dict
[
cls
.
dump_uuid_to_index_dict
=
device_map_dict
[
"dump_uuid_to_index_dict"
]
cls
.
excavator_index_to_uuid_dict
=
device_map_dict
[
"excavator_index_to_uuid_dict"
]
self
.
dump_index_to_uuid_dict
=
device_map_dict
[
"dump_index_to_uuid_dict"
]
cls
.
dump_index_to_uuid_dict
=
device_map_dict
[
"dump_index_to_uuid_dict"
]
self
.
dump_uuid_to_unload_area_uuid_dict
=
device_map_dict
[
cls
.
dump_uuid_to_unload_area_uuid_dict
=
device_map_dict
[
"dump_uuid_to_unload_area_uuid_dict"
]
self
.
excavator_uuid_to_load_area_uuid_dict
=
device_map_dict
[
cls
.
excavator_uuid_to_load_area_uuid_dict
=
device_map_dict
[
"excavator_uuid_to_load_area_uuid_dict"
]
self
.
excavator_index_to_load_area_index_dict
=
device_map_dict
[
cls
.
excavator_index_to_load_area_index_dict
=
device_map_dict
[
"excavator_index_to_load_area_index_dict"
]
self
.
dump_index_to_unload_area_index_dict
=
device_map_dict
[
cls
.
dump_index_to_unload_area_index_dict
=
device_map_dict
[
"dump_index_to_unload_area_index_dict"
]
truck_map_dict
=
update_truck_uuid_index_map
(
get_value
(
"dynamic_truck_set"
))
self
.
truck_uuid_to_index_dict
=
truck_map_dict
[
"truck_uuid_to_index_dict"
]
cls
.
truck_uuid_to_index_dict
=
truck_map_dict
[
"truck_uuid_to_index_dict"
]
self
.
truck_index_to_uuid_dict
=
truck_map_dict
[
"truck_index_to_uuid_dict"
]
def
period_map_para_load
(
self
):
# 装载关系映射
self
.
excavator_uuid_to_index_dict
=
device_map
.
excavator_uuid_to_index_dict
self
.
dump_uuid_to_index_dict
=
device_map
.
dump_uuid_to_index_dict
self
.
excavator_index_to_uuid_dict
=
device_map
.
excavator_index_to_uuid_dict
self
.
dump_index_to_uuid_dict
=
device_map
.
dump_index_to_uuid_dict
self
.
dump_uuid_to_unload_area_uuid_dict
=
(
device_map
.
dump_uuid_to_unload_area_uuid_dict
)
self
.
excavator_uuid_to_load_area_uuid_dict
=
(
device_map
.
excavator_uuid_to_load_area_uuid_dict
)
self
.
excavator_index_to_load_area_index_dict
=
(
device_map
.
excavator_index_to_load_area_index_dict
)
self
.
dump_index_to_unload_area_index_dict
=
(
device_map
.
dump_index_to_unload_area_index_dict
)
cls
.
truck_index_to_uuid_dict
=
truck_map_dict
[
"truck_index_to_uuid_dict"
]
self
.
truck_uuid_to_index_dict
=
device_map
.
truck_uuid_to_index_dict
self
.
truck_index_to_uuid_dict
=
device_map
.
truck_index_to_uuid_dict
# def period_map_para_load(cls):
# # 装载关系映射
# cls.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# cls.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
# cls.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
# cls.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
# cls.dump_uuid_to_unload_area_uuid_dict = (
# device_map.dump_uuid_to_unload_area_uuid_dict
# )
# cls.excavator_uuid_to_load_area_uuid_dict = (
# device_map.excavator_uuid_to_load_area_uuid_dict
# )
# cls.excavator_index_to_load_area_index_dict = (
# device_map.excavator_index_to_load_area_index_dict
# )
# cls.dump_index_to_unload_area_index_dict = (
# device_map.dump_index_to_unload_area_index_dict
# )
#
# cls.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
# cls.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
# 路网信息类
class
WalkManage
(
DeviceMap
):
def
__init__
(
self
):
# # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
# 路网真实距离
self
.
walk_time_to_excavator
=
np
.
full
(
(
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
self
.
walk_time_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
self
.
walk_time_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
# 路网行驶时间
self
.
distance_to_excavator
=
np
.
full
(
(
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
distance_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
distance_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
self
.
distance_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
self
.
distance_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
self
.
distance_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
def
get_walk_time_to_load_area
(
self
):
return
self
.
walk_time_to_load_area
def
get_walk_time_to_unload_area
(
self
):
return
self
.
walk_time_to_unload_area
def
get_walk_time_to_excavator
(
self
):
return
self
.
walk_time_to_excavator
def
get_walk_time_to_dump
(
self
):
return
self
.
walk_time_to_dump
def
get_walk_time_park_to_load_area
(
self
):
return
self
.
walk_time_park_to_load_area
def
get_walk_time_park_to_excavator
(
self
):
return
self
.
walk_time_park_to_excavator
def
get_distance_to_load_area
(
self
):
return
self
.
distance_to_load_area
def
get_distance_to_unload_area
(
self
):
return
self
.
distance_to_unload_area
def
get_distance_to_excavator
(
self
):
return
self
.
distance_to_excavator
def
get_distance_to_dump
(
self
):
return
self
.
distance_to_dump
def
get_distance_park_to_load_area
(
self
):
return
self
.
distance_park_to_load_area
def
get_distance_park_to_excavator
(
self
):
return
self
.
distance_park_to_excavator
# def __init__(cls):
# # # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
#
# # 路网真实距离
# cls.walk_time_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float)
# cls.walk_time_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float)
# cls.walk_time_park_to_excavator = np.full((park_num, dynamic_excavator_num), M, dtype=float)
# cls.walk_time_park_to_load_area = np.full((park_num, load_area_num), M, dtype=float)
# cls.walk_time_to_load_area = np.full((unload_area_num, load_area_num), M, dtype=float)
# cls.walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M, dtype=float)
#
# # 路网行驶时间
# cls.distance_to_excavator = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float)
# cls.distance_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M, dtype=float)
# cls.distance_park_to_excavator = np.full((park_num, dynamic_excavator_num), M, dtype=float)
# cls.distance_park_to_load_area = np.full((park_num, load_area_num), M, dtype=float)
# cls.distance_to_load_area = np.full((unload_area_num, load_area_num), M, dtype=float)
# cls.distance_to_unload_area = np.full((unload_area_num, load_area_num), M, dtype=float)
# # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
# 路网真实距离
walk_time_to_excavator
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
walk_time_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
walk_time_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
walk_time_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
,
dtype
=
float
)
walk_time_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
,
dtype
=
float
)
walk_time_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
,
dtype
=
float
)
# 路网行驶时间
distance_to_excavator
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
distance_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
distance_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
,
dtype
=
float
)
distance_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
,
dtype
=
float
)
distance_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
,
dtype
=
float
)
distance_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
,
dtype
=
float
)
# def get_walk_time_to_load_area(cls):
# return cls.walk_time_to_load_area
#
# def get_walk_time_to_unload_area(cls):
# return cls.walk_time_to_unload_area
#
# def get_walk_time_to_excavator(cls):
# return cls.walk_time_to_excavator
#
# def get_walk_time_to_dump(cls):
# return cls.walk_time_to_dump
#
# def get_walk_time_park_to_load_area(cls):
# return cls.walk_time_park_to_load_area
#
# def get_walk_time_park_to_excavator(cls):
# return cls.walk_time_park_to_excavator
#
# def get_distance_to_load_area(cls):
# return cls.distance_to_load_area
#
# def get_distance_to_unload_area(cls):
# return cls.distance_to_unload_area
#
# def get_distance_to_excavator(cls):
# return cls.distance_to_excavator
#
# def get_distance_to_dump(cls):
# return cls.distance_to_dump
#
# def get_distance_park_to_load_area(cls):
# return cls.distance_park_to_load_area
#
# def get_distance_park_to_excavator(cls):
# return cls.distance_park_to_excavator
def
reset
(
self
):
@classmethod
def
reset
(
cls
):
# dynamic_excavator_num
# dynamic_dump_num
# park_num
# 路网真实距离
self
.
walk_time_to_excavator
=
np
.
full
(
cls
.
walk_time_to_excavator
=
np
.
full
(
(
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
self
.
walk_time_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
self
.
walk_time_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
self
.
walk_time_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
cls
.
walk_time_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
cls
.
walk_time_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
cls
.
walk_time_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
cls
.
walk_time_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
cls
.
walk_time_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
# 路网行驶时间
self
.
distance_to_excavator
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
distance_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
self
.
distance_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
self
.
distance_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
self
.
distance_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
self
.
distance_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
cls
.
distance_to_excavator
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
cls
.
distance_to_dump
=
np
.
full
((
dynamic_dump_num
,
dynamic_excavator_num
),
M
)
cls
.
distance_park_to_excavator
=
np
.
full
((
park_num
,
dynamic_excavator_num
),
M
)
cls
.
distance_park_to_load_area
=
np
.
full
((
park_num
,
load_area_num
),
M
)
cls
.
distance_to_load_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
cls
.
distance_to_unload_area
=
np
.
full
((
unload_area_num
,
load_area_num
),
M
)
def
period_walk_para_update
(
self
):
@classmethod
def
period_walk_para_update
(
cls
):
self
.
reset
()
cls
.
reset
()
self
.
period_map_para_update
()
cls
.
period_map_para_update
()
# 计算路网距离及行走时间
try
:
...
...
@@ -309,16 +337,16 @@ class WalkManage(DeviceMap):
unload_area
=
str
(
item
.
unload_area_id
)
load_area_index
=
load_area_uuid_to_index_dict
[
load_area
]
unload_area_index
=
unload_area_uuid_to_index_dict
[
unload_area
]
self
.
distance_to_load_area
[
unload_area_index
][
load_area_index
]
=
float
(
cls
.
distance_to_load_area
[
unload_area_index
][
load_area_index
]
=
float
(
item
.
to_load_distance
)
self
.
walk_time_to_load_area
[
unload_area_index
][
load_area_index
]
=
float
(
cls
.
walk_time_to_load_area
[
unload_area_index
][
load_area_index
]
=
float
(
60
/
1000
*
item
.
to_load_distance
/
empty_speed
)
self
.
distance_to_unload_area
[
unload_area_index
][
cls
.
distance_to_unload_area
[
unload_area_index
][
load_area_index
]
=
float
(
item
.
to_unload_distance
)
self
.
walk_time_to_unload_area
[
unload_area_index
][
cls
.
walk_time_to_unload_area
[
unload_area_index
][
load_area_index
]
=
float
(
60
/
1000
*
item
.
to_unload_distance
/
heavy_speed
)
except
Exception
as
es
:
...
...
@@ -329,18 +357,18 @@ class WalkManage(DeviceMap):
try
:
for
i
in
range
(
dynamic_dump_num
):
for
j
in
range
(
dynamic_excavator_num
):
self
.
distance_to_excavator
[
i
][
j
]
=
self
.
distance_to_load_area
[
self
.
dump_index_to_unload_area_index_dict
[
i
]
][
self
.
excavator_index_to_load_area_index_dict
[
j
]]
self
.
walk_time_to_excavator
[
i
][
j
]
=
self
.
walk_time_to_load_area
[
self
.
dump_index_to_unload_area_index_dict
[
i
]
][
self
.
excavator_index_to_load_area_index_dict
[
j
]]
self
.
distance_to_dump
[
i
][
j
]
=
self
.
distance_to_unload_area
[
self
.
dump_index_to_unload_area_index_dict
[
i
]
][
self
.
excavator_index_to_load_area_index_dict
[
j
]]
self
.
walk_time_to_dump
[
i
][
j
]
=
self
.
walk_time_to_unload_area
[
self
.
dump_index_to_unload_area_index_dict
[
i
]
][
self
.
excavator_index_to_load_area_index_dict
[
j
]]
cls
.
distance_to_excavator
[
i
][
j
]
=
cls
.
distance_to_load_area
[
cls
.
dump_index_to_unload_area_index_dict
[
i
]
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]]
cls
.
walk_time_to_excavator
[
i
][
j
]
=
cls
.
walk_time_to_load_area
[
cls
.
dump_index_to_unload_area_index_dict
[
i
]
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]]
cls
.
distance_to_dump
[
i
][
j
]
=
cls
.
distance_to_unload_area
[
cls
.
dump_index_to_unload_area_index_dict
[
i
]
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]]
cls
.
walk_time_to_dump
[
i
][
j
]
=
cls
.
walk_time_to_unload_area
[
cls
.
dump_index_to_unload_area_index_dict
[
i
]
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]]
except
Exception
as
es
:
logger
.
error
(
"设备路网信息异常异常"
)
logger
.
error
(
es
)
...
...
@@ -351,10 +379,10 @@ class WalkManage(DeviceMap):
park_area
=
str
(
item
.
park_area_id
)
load_area_index
=
load_area_uuid_to_index_dict
[
load_area
]
park_index
=
park_uuid_to_index_dict
[
park_area
]
self
.
distance_park_to_load_area
[
park_index
][
load_area_index
]
=
float
(
cls
.
distance_park_to_load_area
[
park_index
][
load_area_index
]
=
float
(
item
.
park_load_distance
)
self
.
walk_time_park_to_load_area
[
park_index
][
load_area_index
]
=
float
(
cls
.
walk_time_park_to_load_area
[
park_index
][
load_area_index
]
=
float
(
60
/
1000
*
item
.
park_load_distance
/
empty_speed
)
except
Exception
as
es
:
...
...
@@ -363,52 +391,23 @@ class WalkManage(DeviceMap):
try
:
for
i
in
range
(
park_num
):
for
j
in
range
(
dynamic_excavator_num
):
self
.
distance_park_to_excavator
[
i
][
j
]
=
self
.
distance_park_to_load_area
[
cls
.
distance_park_to_excavator
[
i
][
j
]
=
cls
.
distance_park_to_load_area
[
i
][
self
.
excavator_index_to_load_area_index_dict
[
j
]]
self
.
walk_time_park_to_excavator
[
i
][
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]]
cls
.
walk_time_park_to_excavator
[
i
][
j
]
=
self
.
walk_time_park_to_load_area
[
i
][
self
.
excavator_index_to_load_area_index_dict
[
j
]
]
=
cls
.
walk_time_park_to_load_area
[
i
][
cls
.
excavator_index_to_load_area_index_dict
[
j
]
]
except
Exception
as
es
:
logger
.
error
(
"备停区设备路网信息异常"
)
logger
.
error
(
es
)
logger
.
info
(
"distance_park_to_excavator"
)
logger
.
info
(
self
.
distance_park_to_excavator
)
def
period_walk_para_load
(
self
):
# 装载路网信息
self
.
distance_to_load_area
=
walk_manage
.
distance_to_load_area
self
.
distance_to_unload_area
=
walk_manage
.
distance_to_unload_area
self
.
distance_park_to_load_area
=
walk_manage
.
distance_park_to_load_area
self
.
distance_to_excavator
=
walk_manage
.
distance_to_excavator
self
.
distance_to_dump
=
walk_manage
.
distance_to_dump
self
.
distance_park_to_excavator
=
walk_manage
.
distance_park_to_excavator
self
.
walk_time_to_excavator
=
walk_manage
.
walk_time_to_excavator
self
.
walk_time_to_dump
=
walk_manage
.
walk_time_to_dump
self
.
walk_time_park_to_excavator
=
walk_manage
.
walk_time_park_to_excavator
self
.
walk_time_to_load_area
=
walk_manage
.
walk_time_to_load_area
self
.
walk_time_to_unload_area
=
walk_manage
.
walk_time_to_unload_area
self
.
walk_time_park_to_load_area
=
walk_manage
.
walk_time_park_to_load_area
logger
.
info
(
cls
.
distance_park_to_excavator
)
device_map
=
DeviceMap
()
walk_manage
=
WalkManage
()
device_map
.
period_map_para_update
()
walk_manage
.
period_map_para_load
()
walk_manage
.
period_walk_para_update
()
def
period_para_update
():
def
global_period_para_update
():
global
load_area_uuid_to_index_dict
,
load_area_index_to_uuid_dict
global
unload_area_uuid_to_index_dict
,
unload_area_index_to_uuid_dict
global
load_area_num
,
unload_area_num
,
park_num
...
...
@@ -471,9 +470,13 @@ def period_para_update():
dynamic_dump_set
=
set
(
update_autodisp_dump
())
dynamic_dump_num
=
len
(
dynamic_dump_set
)
device_map
.
period_map_para_update
()
DeviceMap
.
reset
()
DeviceMap
.
period_map_para_update
()
WalkManage
.
reset
()
walk_m
anage
.
period_walk_para_update
()
WalkM
anage
.
period_walk_para_update
()
global_dict
[
"dynamic_truck_set"
]
=
dynamic_truck_set
global_dict
[
"dynamic_truck_num"
]
=
dynamic_truck_num
...
...
@@ -493,9 +496,9 @@ def period_para_update():
global_dict
[
"park_uuid_to_index_dict"
]
=
park_uuid_to_index_dict
global_dict
[
"park_index_to_uuid_dict"
]
=
park_index_to_uuid_dict
global_dict
[
"distance_to_excavator"
]
=
walk_m
anage
.
distance_to_excavator
global_dict
[
"distance_park_to_excavator"
]
=
walk_m
anage
.
distance_park_to_excavator
global_dict
[
"distance_to_dump"
]
=
walk_m
anage
.
distance_to_dump
global_dict
[
"distance_to_excavator"
]
=
WalkM
anage
.
distance_to_excavator
global_dict
[
"distance_park_to_excavator"
]
=
WalkM
anage
.
distance_park_to_excavator
global_dict
[
"distance_to_dump"
]
=
WalkM
anage
.
distance_to_dump
# logger.info("walk_manage_para")
# logger.info("distance_to_excavator")
...
...
@@ -515,522 +518,3 @@ def period_para_update():
# logger.info(walk_manage.truck_index_to_uuid_dict)
# logger.info("walk_manage.dynamic_truck_set")
# logger.info(dynamic_truck_set)
# # 全局参数设定
#
# # 空载任务集合
# empty_task_set = [0, 1, 5]
#
# # 重载任务集合
# heavy_task_set = [2, 3, 4]
#
# # # 空载矿卡速度,单位(km/h)
# # global empty_speed
# #
# # empty_speed = 25
# #
# # # 重载矿卡速度,单位(km/h)
# # global heavy_speed
# #
# # heavy_speed = 22
# #
# # # 卸载设备目标卸载量
# # dump_target_mass = 5000
# #
# # # 挖机目标装载量
# # excavator_target_mass = 5000
#
# # 任务集合
# task_set = [-2, 0, 1, 2, 3, 4, 5]
#
# #
# # truck = TruckInfo()
# # excavator = ExcavatorInfo()
# # dump = DumpInfo()
#
# # Big integer
# M = 100000000
#
# # 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# # (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
# (
# load_area_uuid_to_index_dict,
# unload_area_uuid_to_index_dict,
# load_area_index_to_uuid_dict,
# unload_area_index_to_uuid_dict,
# ) = build_work_area_uuid_index_map()
#
# load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(
# unload_area_uuid_to_index_dict
# )
#
# park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
#
# park_num = len(park_uuid_to_index_dict)
#
# truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
#
# # 矿卡集合
# truck_set = set(update_total_truck())
#
# # 固定派车矿卡集合
# fixed_truck_set = set(update_fixdisp_truck())
#
# # 动态派车矿卡集合
# # dynamic_truck_set = truck_set.difference(fixed_truck_set)
# dynamic_truck_set = update_dynamic_truck()
#
# dynamic_truck_num = len(dynamic_truck_set)
#
# logger.info("可用于动态派车的矿卡:")
# logger.info(dynamic_truck_set)
#
# # 用于动态调度的挖机及卸载设备
# dynamic_excavator_set = set(update_autodisp_excavator())
# dynamic_excavator_num = len(dynamic_excavator_set)
#
# dynamic_dump_set = set(update_autodisp_dump())
# dynamic_dump_num = len(dynamic_dump_set)
#
# global global_dict
#
# global_dict = {}
#
# global_dict["dynamic_truck_set"] = dynamic_truck_set
# global_dict["dynamic_truck_num"] = dynamic_truck_num
# global_dict["dynamic_excavator_set"] = dynamic_excavator_set
# global_dict["dynamic_excavator_num"] = dynamic_excavator_num
# global_dict["dynamic_dump_set"] = dynamic_dump_set
# global_dict["dynamic_dump_num"] = dynamic_dump_num
# global_dict["park_num"] = park_num
#
#
# def get_value(name):
# return global_dict[name]
#
# # 设备映射类, 存储除工作区以外的映射关系
# # 其余设备类继承该类
# class DeviceMap:
# def __init__(self):
# self.excavator_uuid_to_index_dict = {}
# self.dump_uuid_to_index_dict = {}
# self.excavator_index_to_uuid_dict = {}
# self.dump_index_to_uuid_dict = {}
#
# self.dump_uuid_to_unload_area_uuid_dict = {}
# self.excavator_uuid_to_load_area_uuid_dict = {}
# self.excavator_index_to_load_area_index_dict = {}
# self.dump_index_to_unload_area_index_dict = {}
#
# self.truck_uuid_to_index_dict = {}
# self.truck_index_to_uuid_dict = {}
#
# def get_excavator_uuid_to_index_dict(self):
# return self.excavator_uuid_to_index_dict
#
# def get_dump_uuid_to_index_dict(self):
# return self.dump_uuid_to_index_dict
#
# def get_excavator_index_to_uuid_dict(self):
# return self.excavator_index_to_uuid_dict
#
# def get_dump_index_to_uuid_dict(self):
# return self.dump_index_to_uuid_dict
#
# def get_dump_uuid_to_unload_area_uuid_dict(self):
# return self.dump_uuid_to_unload_area_uuid_dict
#
# def get_excavator_uuid_to_load_area_uuid_dict(self):
# return self.excavator_uuid_to_load_area_uuid_dict
#
# def get_excavator_index_to_load_area_index_dict(self):
# return self.excavator_index_to_load_area_index_dict
#
# def get_dump_index_to_unload_area_index_dict(self):
# return self.dump_index_to_unload_area_index_dict
#
# def get_truck_uuid_to_index_dict(self):
# return self.truck_uuid_to_index_dict
#
# def get_truck_index_to_uuid_dict(self):
# return self.truck_index_to_uuid_dict
#
# def reset(self):
# self.excavator_uuid_to_index_dict = {}
# self.dump_uuid_to_index_dict = {}
# self.excavator_index_to_uuid_dict = {}
# self.dump_index_to_uuid_dict = {}
#
# self.dump_uuid_to_unload_area_uuid_dict = {}
# self.excavator_uuid_to_load_area_uuid_dict = {}
# self.excavator_index_to_load_area_index_dict = {}
# self.dump_index_to_unload_area_index_dict = {}
#
# self.truck_uuid_to_index_dict = {}
# self.truck_index_to_uuid_dict = {}
#
# def period_map_para_update(self):
#
# self.reset()
#
# device_map_dict = update_deveices_map(
# unload_area_uuid_to_index_dict, load_area_uuid_to_index_dict
# )
#
# self.excavator_uuid_to_index_dict = device_map_dict[
# "excavator_uuid_to_index_dict"
# ]
#
# print("device.dump_uuid_to_index_dict")
# print(self.dump_uuid_to_index_dict)
#
# self.dump_uuid_to_index_dict = device_map_dict["dump_uuid_to_index_dict"]
# self.excavator_index_to_uuid_dict = device_map_dict[
# "excavator_index_to_uuid_dict"
# ]
# self.dump_index_to_uuid_dict = device_map_dict["dump_index_to_uuid_dict"]
#
# self.dump_uuid_to_unload_area_uuid_dict = device_map_dict[
# "dump_uuid_to_unload_area_uuid_dict"
# ]
# self.excavator_uuid_to_load_area_uuid_dict = device_map_dict[
# "excavator_uuid_to_load_area_uuid_dict"
# ]
# self.excavator_index_to_load_area_index_dict = device_map_dict[
# "excavator_index_to_load_area_index_dict"
# ]
# self.dump_index_to_unload_area_index_dict = device_map_dict[
# "dump_index_to_unload_area_index_dict"
# ]
#
# truck_map_dict = update_truck_uuid_index_map(get_value("dynamic_truck_set"))
#
# self.truck_uuid_to_index_dict = truck_map_dict["truck_uuid_to_index_dict"]
#
# self.truck_index_to_uuid_dict = truck_map_dict["truck_index_to_uuid_dict"]
#
# def period_map_para_load(self):
# # 装载关系映射
# self.excavator_uuid_to_index_dict = device_map.excavator_uuid_to_index_dict
# self.dump_uuid_to_index_dict = device_map.dump_uuid_to_index_dict
# self.excavator_index_to_uuid_dict = device_map.excavator_index_to_uuid_dict
# self.dump_index_to_uuid_dict = device_map.dump_index_to_uuid_dict
#
# self.dump_uuid_to_unload_area_uuid_dict = (
# device_map.dump_uuid_to_unload_area_uuid_dict
# )
# self.excavator_uuid_to_load_area_uuid_dict = (
# device_map.excavator_uuid_to_load_area_uuid_dict
# )
# self.excavator_index_to_load_area_index_dict = (
# device_map.excavator_index_to_load_area_index_dict
# )
# self.dump_index_to_unload_area_index_dict = (
# device_map.dump_index_to_unload_area_index_dict
# )
#
# self.truck_uuid_to_index_dict = device_map.truck_uuid_to_index_dict
# self.truck_index_to_uuid_dict = device_map.truck_index_to_uuid_dict
#
#
# # 路网信息类
# class WalkManage(DeviceMap):
# def __init__(self):
# # # 工作区和设备不具备一一对应关系, 为方便就计算, 算法维护两套路网: 面向路网和面向设备
#
# # 路网真实距离
# self.walk_time_to_excavator = np.full(
# (dynamic_dump_num, dynamic_excavator_num), M
# )
# self.walk_time_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
# self.walk_time_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
# self.walk_time_park_to_load_area = np.full((park_num, load_area_num), M)
# self.walk_time_to_load_area = np.full((unload_area_num, load_area_num), M)
# self.walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M)
#
# # 路网行驶时间
# self.distance_to_excavator = np.full(
# (dynamic_dump_num, dynamic_excavator_num), M
# )
# self.distance_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
# self.distance_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
# self.distance_park_to_load_area = np.full((park_num, load_area_num), M)
# self.distance_to_load_area = np.full((unload_area_num, load_area_num), M)
# self.distance_to_unload_area = np.full((unload_area_num, load_area_num), M)
#
# def get_walk_time_to_load_area(self):
# return self.walk_time_to_load_area
#
# def get_walk_time_to_unload_area(self):
# return self.walk_time_to_unload_area
#
# def get_walk_time_to_excavator(self):
# return self.walk_time_to_excavator
#
# def get_walk_time_to_dump(self):
# return self.walk_time_to_dump
#
# def get_walk_time_park_to_load_area(self):
# return self.walk_time_park_to_load_area
#
# def get_walk_time_park_to_excavator(self):
# return self.walk_time_park_to_excavator
#
# def get_distance_to_load_area(self):
# return self.distance_to_load_area
#
# def get_distance_to_unload_area(self):
# return self.distance_to_unload_area
#
# def get_distance_to_excavator(self):
# return self.distance_to_excavator
#
# def get_distance_to_dump(self):
# return self.distance_to_dump
#
# def get_distance_park_to_load_area(self):
# return self.distance_park_to_load_area
#
# def get_distance_park_to_excavator(self):
# return self.distance_park_to_excavator
#
# def reset(self):
#
# # dynamic_excavator_num
# # dynamic_dump_num
# # park_num
#
# # 路网真实距离
# self.walk_time_to_excavator = np.full(
# (dynamic_dump_num, dynamic_excavator_num), M
# )
# self.walk_time_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
# self.walk_time_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
# self.walk_time_park_to_load_area = np.full((park_num, load_area_num), M)
# self.walk_time_to_load_area = np.full((unload_area_num, load_area_num), M)
# self.walk_time_to_unload_area = np.full((unload_area_num, load_area_num), M)
#
# # 路网行驶时间
# self.distance_to_excavator = np.full(
# (dynamic_dump_num, dynamic_excavator_num), M
# )
# self.distance_to_dump = np.full((dynamic_dump_num, dynamic_excavator_num), M)
# self.distance_park_to_excavator = np.full((park_num, dynamic_excavator_num), M)
# self.distance_park_to_load_area = np.full((park_num, load_area_num), M)
# self.distance_to_load_area = np.full((unload_area_num, load_area_num), M)
# self.distance_to_unload_area = np.full((unload_area_num, load_area_num), M)
#
# def period_walk_para_update(self):
#
# self.reset()
#
# self.period_map_para_update()
#
# # 计算路网距离及行走时间
# try:
# # 处理距离
# for item in session_postgre.query(WalkTime).all():
# load_area = str(item.load_area_id)
# unload_area = str(item.unload_area_id)
# load_area_index = load_area_uuid_to_index_dict[load_area]
# unload_area_index = unload_area_uuid_to_index_dict[unload_area]
# self.distance_to_load_area[unload_area_index][load_area_index] = float(
# item.to_load_distance
# )
# self.walk_time_to_load_area[unload_area_index][load_area_index] = float(
# 60 / 1000 * item.to_load_distance / empty_speed
# )
# self.distance_to_unload_area[unload_area_index][
# load_area_index
# ] = float(item.to_unload_distance)
# self.walk_time_to_unload_area[unload_area_index][
# load_area_index
# ] = float(60 / 1000 * item.to_unload_distance / heavy_speed)
# except Exception as es:
# logger.error("路网信息异常")
# logger.error(es)
#
# # 计算设备路网距离及行走时间
# try:
# for i in range(dynamic_dump_num):
# for j in range(dynamic_excavator_num):
# self.distance_to_excavator[i][j] = self.distance_to_load_area[
# self.dump_index_to_unload_area_index_dict[i]
# ][self.excavator_index_to_load_area_index_dict[j]]
# self.walk_time_to_excavator[i][j] = self.walk_time_to_load_area[
# self.dump_index_to_unload_area_index_dict[i]
# ][self.excavator_index_to_load_area_index_dict[j]]
# self.distance_to_dump[i][j] = self.distance_to_unload_area[
# self.dump_index_to_unload_area_index_dict[i]
# ][self.excavator_index_to_load_area_index_dict[j]]
# self.walk_time_to_dump[i][j] = self.walk_time_to_unload_area[
# self.dump_index_to_unload_area_index_dict[i]
# ][self.excavator_index_to_load_area_index_dict[j]]
# except Exception as es:
# logger.error("设备路网信息异常异常")
# logger.error(es)
#
# try:
# for item in session_postgre.query(WalkTimePark).all():
# load_area = str(item.load_area_id)
# park_area = str(item.park_area_id)
# load_area_index = load_area_uuid_to_index_dict[load_area]
# park_index = park_uuid_to_index_dict[park_area]
# self.distance_park_to_load_area[park_index][load_area_index] = float(
# item.park_load_distance
# )
# self.walk_time_park_to_load_area[park_index][load_area_index] = float(
# 60 / 1000 * item.park_load_distance / empty_speed
# )
# except Exception as es:
# logger.error("备停区路网信息异常")
# logger.error(es)
# try:
# for i in range(park_num):
# for j in range(dynamic_excavator_num):
# self.distance_park_to_excavator[i][j] = self.distance_park_to_load_area[
# i
# ][self.excavator_index_to_load_area_index_dict[j]]
# self.walk_time_park_to_excavator[i][
# j
# ] = self.walk_time_park_to_load_area[i][
# self.excavator_index_to_load_area_index_dict[j]
# ]
# except Exception as es:
# logger.error("备停区设备路网信息异常")
# logger.error(es)
#
# def period_walk_para_load(self):
# # 装载路网信息
# self.distance_to_load_area = walk_manage.distance_to_load_area
# self.distance_to_unload_area = walk_manage.distance_to_unload_area
# self.distance_park_to_load_area = walk_manage.distance_park_to_load_area
#
# self.distance_to_excavator = walk_manage.distance_to_excavator
# self.distance_to_dump = walk_manage.distance_to_dump
# self.distance_park_to_excavator = walk_manage.distance_park_to_excavator
#
# self.walk_time_to_excavator = walk_manage.walk_time_to_excavator
# self.walk_time_to_dump = walk_manage.walk_time_to_dump
# self.walk_time_park_to_excavator = walk_manage.walk_time_park_to_excavator
#
# self.walk_time_to_load_area = walk_manage.walk_time_to_load_area
# self.walk_time_to_unload_area = walk_manage.walk_time_to_unload_area
# self.walk_time_park_to_load_area = walk_manage.walk_time_park_to_load_area
#
#
# device_map = DeviceMap()
#
# walk_manage = WalkManage()
#
# device_map.period_map_para_update()
#
# walk_manage.period_map_para_load()
#
# walk_manage.period_walk_para_update()
#
#
# def period_para_update():
# global load_area_uuid_to_index_dict, load_area_index_to_uuid_dict
# global unload_area_uuid_to_index_dict, unload_area_index_to_uuid_dict
# global load_area_num, unload_area_num, park_num
# global park_uuid_to_index_dict, park_index_to_uuid_dict
# global truck_uuid_to_name_dict, truck_name_to_uuid_dict
# global dynamic_truck_num, dynamic_excavator_num, dynamic_dump_num
#
# # 清空数据库缓存
# session_mysql.commit()
# session_mysql.flush()
#
# # 装载区、卸载区、备停区在调度算法运行器件默认不发生改变,提前计算部分参量
# # (uuid,index(id)映射关系, 装载区数量, 卸载区数量, 备停区数量, 以及初次统计动态调度矿卡)
# (
# load_area_uuid_to_index_dict,
# unload_area_uuid_to_index_dict,
# load_area_index_to_uuid_dict,
# unload_area_index_to_uuid_dict,
# ) = build_work_area_uuid_index_map()
#
# load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(
# unload_area_uuid_to_index_dict
# )
#
# park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
#
# park_num = len(park_uuid_to_index_dict)
#
# truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
#
# # 矿卡集合
# truck_set = set(update_total_truck())
#
# logger.info("truck_set")
# logger.info(truck_set)
#
# # 固定派车矿卡集合
# fixed_truck_set = set(update_fixdisp_truck())
#
# logger.info("fixed_truck_set")
# logger.info(fixed_truck_set)
#
# # 动态派车矿卡集合
# # dynamic_truck_set = truck_set.difference(fixed_truck_set)
# dynamic_truck_set = update_dynamic_truck()
#
# dynamic_truck_num = len(dynamic_truck_set)
#
# logger.info("可用于动态派车的矿卡:")
# logger.info(dynamic_truck_num)
# logger.info(dynamic_truck_set)
#
# # 用于动态调度的挖机及卸载设备
# dynamic_excavator_set = set(update_autodisp_excavator())
# dynamic_excavator_num = len(dynamic_excavator_set)
#
# dynamic_dump_set = set(update_autodisp_dump())
# dynamic_dump_num = len(dynamic_dump_set)
#
# device_map.period_map_para_update()
#
# walk_manage.period_walk_para_update()
#
# global_dict["dynamic_truck_set"] = dynamic_truck_set
# global_dict["dynamic_truck_num"] = dynamic_truck_num
# global_dict["dynamic_excavator_set"] = dynamic_excavator_set
# global_dict["dynamic_excavator_num"] = dynamic_excavator_num
# global_dict["dynamic_dump_set"] = dynamic_dump_set
# global_dict["dynamic_dump_num"] = dynamic_dump_num
# global_dict["park_num"] = park_num
#
# print("walk_manage.distance_to_excavator")
# print(dynamic_dump_num, dynamic_excavator_num)
# print(walk_manage.distance_to_excavator)
#
# print("walk_manage.excavator_dict")
# print(walk_manage.excavator_uuid_to_index_dict)
# print("walk_manage.dump_dict")
# print(walk_manage.dump_uuid_to_index_dict)
#
# global_dict["distance_to_excavator"] = walk_manage.distance_to_excavator
# global_dict["distance_park_to_excavator"] = walk_manage.distance_park_to_excavator
# global_dict["distance_to_dump"] = walk_manage.distance_to_dump
#
# logger.info("walk_manage_para")
# logger.info("distance_to_excavator")
# logger.info(walk_manage.distance_to_excavator)
# logger.info("distance_park_to_excavator")
# logger.info(walk_manage.distance_park_to_excavator)
# logger.info("distance_to_dump")
# logger.info(walk_manage.distance_to_dump)
# logger.info("excavator_uuid_to_index_dict")
# 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)
#
# logger.info("walk_manage.truck_index_to_uuid_dict")
# logger.info(walk_manage.truck_index_to_uuid_dict)
# logger.info("walk_manage.dynamic_truck_set")
# logger.info(dynamic_truck_set)
path_plan/path_plannner.py
View file @
49054843
...
...
@@ -69,9 +69,9 @@ class PathPlanner(WalkManage):
# weighted_distance = weighted_walk_cost()
# 修正因子
weight
=
6
0
weight
=
1
0
# 阻塞成本权重
alpha
=
1
alpha
=
0
# 距离成本权重
beta
=
1
...
...
@@ -87,9 +87,11 @@ class PathPlanner(WalkManage):
if
rule2
.
disabled
==
0
:
alpha
=
rule2
.
rule_weight
beta
/=
beta
alpha
=
alpha
/
beta
*
weight
if
alpha
>
0
:
beta
/=
(
beta
+
0.001
)
alpha
=
alpha
/
beta
*
weight
else
:
beta
=
1
try
:
...
...
@@ -153,18 +155,14 @@ class PathPlanner(WalkManage):
def
walk_cost_cal
(
self
):
self
.
excavator
.
para_period_update
()
self
.
excavator
.
excavator_
para_period_update
()
self
.
dump
.
para_period_update
()
self
.
dump
.
dump_
para_period_update
()
self
.
truck
.
para_period_update
(
self
.
dump
,
self
.
excavator
)
self
.
truck
.
truck_
para_period_update
(
self
.
dump
,
self
.
excavator
)
self
.
truck
.
state_period_update
()
self
.
period_walk_para_load
()
self
.
period_map_para_load
()
# self.controller.period_update(self.dump, self.excavator, self.truck)
# 计算行驶成本前,更新路网速度信息
...
...
@@ -186,6 +184,9 @@ class PathPlanner(WalkManage):
load_area_index
=
load_area_uuid_to_index_dict
[
str
(
walk_time_park
.
load_area_id
)]
self
.
cost_park_to_load_area
[
park_area_index
][
load_area_index
],
_
=
\
self
.
path_cost_generate
(
str
(
walk_time_park
.
load_area_id
),
str
(
walk_time_park
.
park_area_id
),
True
)
logger
.
info
(
self
.
cost_park_to_load_area
)
logger
.
info
(
self
.
distance_park_to_excavator
)
except
Exception
as
es
:
logger
.
error
(
'路网信息计成本计算异常'
)
logger
.
error
(
es
)
...
...
@@ -233,6 +234,7 @@ class PathPlanner(WalkManage):
for
j
in
range
(
get_value
(
"dynamic_excavator_num"
)):
load_area_index
=
self
.
excavator_index_to_load_area_index_dict
[
j
]
self
.
cost_park_to_excavator
[
0
][
j
]
=
self
.
cost_park_to_load_area
[
0
][
load_area_index
]
/
park_walk_weight
[
0
][
j
]
print
()
logger
.
info
(
"真实路网距离-驶往挖机:"
)
logger
.
info
(
self
.
distance_to_excavator
)
...
...
@@ -283,25 +285,25 @@ class LaneInfo:
def
update_truck_loacate
(
self
):
# 读取矿卡所在路段信息
try
:
truck_locate_dict
=
{}
device_name_set
=
redis2
.
keys
()
for
item
in
device_name_set
:
item
=
item
.
decode
(
encoding
=
'utf-8'
)
# json_value = json.loads(redis2.get(item))
key_value_dict
=
redis2
.
hgetall
(
item
)
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
is_online
=
key_value_dict
[
str_to_byte
(
'online'
)]
key_set
=
key_value_dict
.
keys
()
if
(
device_type
==
str_to_byte
(
"1"
))
\
and
(
str_to_byte
(
'online'
)
in
key_set
)
\
and
(
bytes
.
decode
(
is_online
)
in
[
"true"
or
"True"
])
\
and
(
str_to_byte
(
'laneId'
)
in
key_set
):
truck_locate
=
key_value_dict
[
str_to_byte
(
'laneId'
)]
truck_locate_dict
[
truck_name_to_uuid_dict
[
item
]]
=
eval
(
truck_locate
)
except
Exception
as
es
:
logger
.
error
(
f
'矿卡{item}所在路段信息读取异常'
)
logger
.
error
(
es
)
#
try:
truck_locate_dict
=
{}
device_name_set
=
redis2
.
keys
()
for
item
in
device_name_set
:
item
=
item
.
decode
(
encoding
=
'utf-8'
)
# json_value = json.loads(redis2.get(item))
key_value_dict
=
redis2
.
hgetall
(
item
)
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
is_online
=
key_value_dict
[
str_to_byte
(
'online'
)]
key_set
=
key_value_dict
.
keys
()
if
(
device_type
==
str_to_byte
(
"1"
))
\
and
(
str_to_byte
(
'online'
)
in
key_set
)
\
and
(
bytes
.
decode
(
is_online
)
in
[
"true"
or
"True"
])
\
and
(
str_to_byte
(
'laneId'
)
in
key_set
):
truck_locate
=
key_value_dict
[
str_to_byte
(
'laneId'
)]
truck_locate_dict
[
truck_name_to_uuid_dict
[
item
]]
=
eval
(
truck_locate
)
#
except Exception as es:
#
logger.error(f'矿卡{item}所在路段信息读取异常')
#
logger.error(es)
print
(
"truck_locate_dict"
)
print
(
truck_locate_dict
)
...
...
@@ -347,47 +349,45 @@ class LaneInfo:
# used lane, 存在行驶矿卡的路段
tmp_lane_set
=
[]
try
:
# 初始化
for
lane_id
in
lane_set
:
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
0
lane_trucks_dict
[
str
(
lane_id
)]
=
0
# 对于各路段信息
print
(
"truck_locate_dict"
)
print
(
truck_locate_dict
.
keys
())
for
truck
in
truck_locate_dict
.
keys
():
lane_id
=
truck_locate_dict
[
truck
]
logger
.
info
(
"lane_speed_generate-lane_id"
)
logger
.
info
(
lane_id
)
if
lane_id
in
lane_set
:
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
=
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
+
\
truck_speed_dict
[
truck
]
# 该路段矿卡数量加一
lane_trucks_dict
[
truck_locate_dict
[
truck
]]
=
lane_trucks_dict
[
truck_locate_dict
[
truck
]]
+
1
# 记录存在行驶矿卡的路段
tmp_lane_set
.
append
(
lane_id
)
# 存在矿卡的路段
print
(
"存在矿卡的路段:"
)
print
(
tmp_lane_set
)
logger
.
info
(
"存在矿卡的路段:"
)
logger
.
info
(
tmp_lane_set
)
# 对不存在的矿卡路段,实时速度设置为最高
for
lane_id
in
lane_set
:
if
lane_id
not
in
tmp_lane_set
:
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
session_postgre
.
query
(
Lane
)
.
filter_by
(
Id
=
lane_id
)
.
first
()
.
MaxSpeed
lane_trucks_dict
[
str
(
lane_id
)]
=
1
# 各路段实时速度取平均
for
lane
in
lane_trucks_dict
:
self
.
lane_speed_dict
[
lane
]
=
self
.
lane_speed_dict
[
lane
]
/
lane_trucks_dict
[
lane
]
# try:
# 初始化
for
lane_id
in
lane_set
:
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
0
lane_trucks_dict
[
str
(
lane_id
)]
=
0
except
Exception
as
es
:
logger
.
error
(
"路段实时速度计算异常"
)
logger
.
error
(
es
)
# 对于各路段信息
print
(
"truck_locate_dict"
)
print
(
truck_locate_dict
.
keys
())
for
truck
in
truck_locate_dict
.
keys
():
lane_id
=
truck_locate_dict
[
truck
]
logger
.
info
(
"lane_speed_generate-lane_id"
)
logger
.
info
(
lane_id
)
if
lane_id
in
lane_set
and
truck
in
truck_speed_dict
and
truck
in
truck_locate_dict
:
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
=
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
+
\
truck_speed_dict
[
truck
]
# 该路段矿卡数量加一
lane_trucks_dict
[
truck_locate_dict
[
truck
]]
=
lane_trucks_dict
[
truck_locate_dict
[
truck
]]
+
1
# 记录存在行驶矿卡的路段
tmp_lane_set
.
append
(
lane_id
)
# 存在矿卡的路段
logger
.
info
(
"存在矿卡的路段:"
)
logger
.
info
(
tmp_lane_set
)
# 对不存在的矿卡路段,实时速度设置为最高
for
lane_id
in
lane_set
:
if
lane_id
not
in
tmp_lane_set
:
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
session_postgre
.
query
(
Lane
)
.
filter_by
(
Id
=
lane_id
)
.
first
()
.
MaxSpeed
lane_trucks_dict
[
str
(
lane_id
)]
=
1
# 各路段实时速度取平均
for
lane
in
lane_trucks_dict
:
self
.
lane_speed_dict
[
lane
]
=
self
.
lane_speed_dict
[
lane
]
/
lane_trucks_dict
[
lane
]
# except Exception as es:
# logger.error("路段实时速度计算异常")
# logger.error(es)
return
self
.
lane_speed_dict
...
...
path_plan/priority_control.py
View file @
49054843
...
...
@@ -72,7 +72,7 @@ class PriorityController():
park_walk_weight
=
park_walk_weight
-
(
park_walk_weight
.
min
()
-
1
)
except
Exception
as
es
:
self
.
logger
.
err
ro
(
es
)
self
.
logger
.
err
or
(
es
)
self
.
logger
.
error
(
"优先级归一化异常"
)
return
walk_to_excavator_weight
,
walk_to_dump_weight
,
park_walk_weight
...
...
@@ -148,11 +148,9 @@ class PriorityController():
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
walk_available
=
np
.
ones
((
dynamic_dump_num
,
dynamic_excavator_num
))
walk_manage
.
period_walk_para_update
()
for
dump_index
in
range
(
dynamic_dump_num
):
for
excavator_index
in
range
(
dynamic_excavator_num
):
if
walk_m
anage
.
distance_to_excavator
[
dump_index
][
excavator_index
]
>
M
/
2
:
if
WalkM
anage
.
distance_to_excavator
[
dump_index
][
excavator_index
]
>
M
/
2
:
walk_available
[
dump_index
][
excavator_index
]
=
0
return
walk_available
realtime_dispatch.py
View file @
49054843
...
...
@@ -8,8 +8,6 @@
# 实时调度模块
from
traffic_flow.traffic_flow_planner
import
*
from
para_config
import
*
from
equipment.truck
import
TruckInfo
from
equipment.excavator
import
ExcavatorInfo
...
...
@@ -21,43 +19,42 @@ from dispatcher import Dispatcher, PreSchedule
def
process
(
dispatcher
):
try
:
# 更新周期参数
logger
.
info
(
"#####################################周期更新开始#####################################"
)
#
try:
# 更新周期参数
logger
.
info
(
"#####################################周期更新开始#####################################"
)
period_para_update
()
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
raise
Exception
(
"无动态派车计划可用"
)
return
if
get_value
(
"dynamic_truck_num"
)
==
0
:
raise
Exception
(
"无动态派车可用矿卡"
)
return
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
raise
Exception
(
"无动态派车计划可用"
)
return
if
get_value
(
"dynamic_truck_num"
)
==
0
:
raise
Exception
(
"无动态派车可用矿卡"
)
return
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
# 周期更新
dispatcher
.
dispatcher_period_update
()
# 周期更新
dispatcher
.
dispatcher_period_update
()
# try:
# try:
# 调度计算
dispatcher
.
schedule_construct
()
# 调度计算
dispatcher
.
schedule_construct
()
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger
.
info
(
"#####################################周期更新结束#####################################"
)
logger
.
info
(
"#####################################周期更新结束#####################################"
)
except
Exception
as
es
:
logger
.
error
(
"最外层异常捕获"
)
logger
.
error
(
es
)
#
except Exception as es:
#
logger.error("最外层异常捕获")
#
logger.error(es)
def
perform
(
inc
,
dispatcher
):
...
...
@@ -90,7 +87,7 @@ if __name__ == "__main__":
logger
=
get_logger
(
"zxt.main"
)
# 全局参数更新
period_para_update
()
global_
period_para_update
()
# 实例化设备对象
dump
=
DumpInfo
()
...
...
@@ -109,4 +106,4 @@ if __name__ == "__main__":
logger
.
info
(
" "
)
logger
.
info
(
"调度系统启动"
)
main
(
1
0
,
dispatcher
)
main
(
3
0
,
dispatcher
)
settings.py
View file @
49054843
...
...
@@ -67,8 +67,8 @@ def set_log():
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
log_path
+
"/dispatch.log"
,
maxBytes
=
3
*
1024
*
1024
,
backupCount
=
10
)
#
filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10)
#
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10)
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
"./Logs/dispatch.log"
,
maxBytes
=
3
*
1024
*
1024
,
backupCount
=
10
)
# 设置后缀名称,跟strftime的格式一样
filehandler
.
suffix
=
"
%
Y-
%
m-
%
d_
%
H-
%
M.log"
...
...
tables.py
View file @
49054843
...
...
@@ -25,7 +25,7 @@ with open(json_file) as f:
with
open
(
json_file
)
as
f
:
postgre_config
=
json
.
load
(
f
)[
"postgresql"
]
logger
=
get_logger
(
"zxt.tables"
)
#
logger = get_logger("zxt.tables")
# # 创建对象的基类:
# Base = declarative_base()
...
...
@@ -107,8 +107,9 @@ try:
session_postgre
.
expire_on_commit
=
False
except
Exception
as
es
:
logger
.
error
(
"数据库连接失败"
)
logger
.
error
(
es
)
# logger.error("数据库连接失败")
# logger.error(es)
pass
# 定义对象:
...
...
traffic_flow/traffic_flow_info.py
View file @
49054843
...
...
@@ -52,11 +52,6 @@ class Traffic_flow(WalkManage):
# 更新实际交通流
def
update_actual_traffic_flow
(
self
):
# 装载周期参数
self
.
period_map_para_load
()
self
.
period_walk_para_load
()
loading_task_time
=
self
.
excavator
.
get_loading_task_time
()
unloading_task_time
=
self
.
dump
.
get_unloading_task_time
()
...
...
@@ -228,6 +223,10 @@ class Traffic_para(WalkManage):
rule4
=
session_mysql
.
query
(
DispatchRule
)
.
filter_by
(
id
=
4
)
.
first
()
if
not
rule4
.
disabled
:
for
excavator_index
in
range
(
len
(
self
.
excavator_index_to_uuid_dict
)):
logger
.
debug
(
"extract_excavator_info-excavator_index"
)
logger
.
debug
(
excavator_index
)
logger
.
debug
(
"extract_excavator_info-excavator_id"
)
logger
.
debug
(
self
.
excavator_index_to_uuid_dict
[
excavator_index
])
load_ability
=
session_mysql
.
query
(
EquipmentSpec
.
mining_abililty
)
.
\
join
(
Equipment
,
Equipment
.
equipment_spec
==
EquipmentSpec
.
id
)
.
\
filter
(
Equipment
.
id
==
self
.
excavator_index_to_uuid_dict
[
excavator_index
])
.
first
()
...
...
@@ -316,10 +315,6 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
tra_para
=
Traffic_para
(
num_of_load_area
,
num_of_unload_area
,
num_of_excavator
,
num_of_dump
,
truck
)
tra_para
.
period_map_para_load
()
tra_para
.
period_walk_para_load
()
tra_para
.
extract_excavator_info
()
tra_para
.
extract_dump_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