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
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
虢奥
integrated-scheduling-v3
Commits
49054843
Commit
49054843
authored
Apr 14, 2022
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
添加等待时间算法,修复部分BUG
parent
11c09e4a
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
375 additions
and
187 deletions
+375
-187
CHANGELOG.txt
CHANGELOG.txt
+10
-0
algorithm.py
algorithm.py
+180
-15
config.json
config.json
+5
-4
dispatcher.py
dispatcher.py
+0
-0
dump.py
equipment/dump.py
+13
-18
excavator.py
equipment/excavator.py
+5
-15
truck.py
equipment/truck.py
+0
-0
group_control.py
group_control/group_control.py
+50
-14
para_config.py
para_config.py
+0
-0
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
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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
This diff is collapsed.
Click to expand it.
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