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
66ff835d
Commit
66ff835d
authored
Jun 12, 2022
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.alg 传入 pre_sch truck obj, 2. group truck_task 读取修复 3. value 取最值 4. 读动态派车集合更新
parent
2da8eccd
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
64 additions
and
40 deletions
+64
-40
algorithm.py
alg/algorithm.py
+31
-27
dispatcher.py
core/dispatcher.py
+4
-2
group.py
core/group.py
+7
-6
truck.py
equipment/truck.py
+3
-1
realtime_dispatch.py
realtime_dispatch.py
+1
-1
static_data_process.py
static_data_process.py
+18
-3
No files found.
alg/algorithm.py
View file @
66ff835d
...
@@ -32,9 +32,11 @@ class Congestion(AlgorithmBase):
...
@@ -32,9 +32,11 @@ class Congestion(AlgorithmBase):
class for congestion alg.
class for congestion alg.
"""
"""
def
__init__
(
self
,
group
):
def
__init__
(
self
,
group
,
truck
,
pre_sch
):
super
()
.
__init__
()
super
()
.
__init__
()
self
.
group
=
group
self
.
group
=
group
self
.
truck
=
truck
self
.
pre_sch
=
pre_sch
self
.
logger
=
get_logger
(
"zxt.algorithm.congestion"
)
self
.
logger
=
get_logger
(
"zxt.algorithm.congestion"
)
def
solve
(
self
,
truck_id
):
def
solve
(
self
,
truck_id
):
...
@@ -46,15 +48,15 @@ class Congestion(AlgorithmBase):
...
@@ -46,15 +48,15 @@ class Congestion(AlgorithmBase):
try
:
try
:
truck_index
=
truck
.
truck_uuid_to_index_dict
[
truck_id
]
truck_index
=
self
.
truck
.
truck_uuid_to_index_dict
[
truck_id
]
trip
=
truck
.
get_truck_current_trip
()[
truck_index
]
trip
=
self
.
truck
.
get_truck_current_trip
()[
truck_index
]
task
=
truck
.
get_truck_current_task
()[
truck_id
]
task
=
self
.
truck
.
get_truck_current_task
()[
truck_id
]
group_dynamic_excavator_num
=
len
(
self
.
group
.
dump
_dict
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
dump
)
group_dynamic_dump_num
=
len
(
self
.
group
.
excavator
_dict
)
group_dynamic_dump_num
=
len
(
self
.
group
.
excavator
)
except
Exception
as
es
:
except
Exception
as
es
:
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
...
@@ -130,10 +132,12 @@ class ExpectedTime(AlgorithmBase):
...
@@ -130,10 +132,12 @@ class ExpectedTime(AlgorithmBase):
class for expected traveling time alg.
class for expected traveling time alg.
"""
"""
def
__init__
(
self
,
group
):
def
__init__
(
self
,
group
,
truck
,
pre_sch
):
super
()
.
__init__
()
super
()
.
__init__
()
self
.
group
=
group
self
.
group
=
group
self
.
truck
=
truck
self
.
pre_sch
=
pre_sch
self
.
logger
=
get_logger
(
"zxt.algorithm.expected"
)
self
.
logger
=
get_logger
(
"zxt.algorithm.expected"
)
def
solve
(
self
,
truck_id
):
def
solve
(
self
,
truck_id
):
...
@@ -145,17 +149,17 @@ class ExpectedTime(AlgorithmBase):
...
@@ -145,17 +149,17 @@ class ExpectedTime(AlgorithmBase):
try
:
try
:
truck_index
=
truck
.
truck_uuid_to_index_dict
[
truck_id
]
truck_index
=
self
.
truck
.
truck_uuid_to_index_dict
[
truck_id
]
trip
=
truck
.
get_truck_current_trip
()[
truck_index
]
trip
=
self
.
truck
.
get_truck_current_trip
()[
truck_index
]
task
=
truck
.
get_truck_current_task
()[
truck_id
]
task
=
self
.
truck
.
get_truck_current_task
()[
truck_id
]
truck_avl_time
=
pre_sch
.
get_truck_avl_time
(
truck_id
=
truck_id
)
truck_avl_time
=
self
.
pre_sch
.
get_truck_avl_time
(
truck_id
=
truck_id
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
dump
_dict
)
group_dynamic_excavator_num
=
len
(
self
.
group
.
dump
)
group_dynamic_dump_num
=
len
(
self
.
group
.
excavator
_dict
)
group_dynamic_dump_num
=
len
(
self
.
group
.
excavator
)
except
Exception
as
es
:
except
Exception
as
es
:
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
self
.
logger
.
error
(
"车辆调度信息读取异常"
)
...
@@ -171,18 +175,18 @@ class ExpectedTime(AlgorithmBase):
...
@@ -171,18 +175,18 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
self
.
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
self
.
logger
.
error
(
es
)
self
.
logger
.
error
(
es
)
try
:
#
try:
# 挖机可用时间
# 挖机可用时间
excavator_val_time_global
=
pre_sch
.
get_excavator_avl_time
()
excavator_val_time_global
=
self
.
pre_sch
.
get_excavator_avl_time
()
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator_dict
),
0
)
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0
)
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
# 车辆驶往各目的地时间
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
group
.
park_to_excavator_distance
[
0
,
:]
/
1000
/
\
truck_reach_time
=
60
*
self
.
group
.
park_to_excavator_distance
[
0
,
:]
/
1000
/
\
truck
.
empty_speed
[
truck_id
]
+
truck_avl_time
self
.
truck
empty_speed
[
truck_id
]
+
truck_avl_time
# 计算车辆得到服务时间
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_time
)
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_time
)
...
@@ -202,10 +206,10 @@ class ExpectedTime(AlgorithmBase):
...
@@ -202,10 +206,10 @@ class ExpectedTime(AlgorithmBase):
self
.
logger
.
info
(
"expected_travelling_schedule-excavator_val_time"
)
self
.
logger
.
info
(
"expected_travelling_schedule-excavator_val_time"
)
self
.
logger
.
info
(
excavator_val_time
)
self
.
logger
.
info
(
excavator_val_time
)
except
Exception
as
es
:
#
except Exception as es:
self
.
logger
.
error
(
"矿卡启动调度异常"
)
#
self.logger.error("矿卡启动调度异常")
self
.
logger
.
error
(
es
)
#
self.logger.error(es)
transport_value
=
np
.
zeros
(
group_dynamic_excavator_num
)
#
transport_value = np.zeros(group_dynamic_excavator_num)
if
task
in
[
0
,
1
,
2
]:
if
task
in
[
0
,
1
,
2
]:
################################################ 矿卡空载 ###############################################
################################################ 矿卡空载 ###############################################
...
@@ -219,10 +223,10 @@ class ExpectedTime(AlgorithmBase):
...
@@ -219,10 +223,10 @@ class ExpectedTime(AlgorithmBase):
try
:
try
:
# 全局卸点可用时间 dict
# 全局卸点可用时间 dict
dump_val_time_global
=
pre_sch
.
get_dump_avl_time
()
dump_val_time_global
=
self
.
pre_sch
.
get_dump_avl_time
()
# 局部卸点可用时间 list
# 局部卸点可用时间 list
dump_val_time
=
np
.
full
(
len
(
self
.
group
.
dump
_dict
),
0
)
dump_val_time
=
np
.
full
(
len
(
self
.
group
.
dump
),
0
)
for
dump_id
,
dump_index
in
self
.
group
.
dump_uuid_index_dict
.
items
():
for
dump_id
,
dump_index
in
self
.
group
.
dump_uuid_index_dict
.
items
():
dump_val_time
[
dump_index
]
=
dump_val_time_global
[
dump_id
]
dump_val_time
[
dump_index
]
=
dump_val_time_global
[
dump_id
]
...
@@ -234,7 +238,7 @@ class ExpectedTime(AlgorithmBase):
...
@@ -234,7 +238,7 @@ class ExpectedTime(AlgorithmBase):
# 车辆驶往各目的地时间
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
group
.
to_dump_distance
[
excavator_group_index
,
:]
\
truck_reach_time
=
60
*
self
.
group
.
to_dump_distance
[
excavator_group_index
,
:]
\
/
1000
/
truck
.
heavy_speed
[
truck_id
]
+
truck_avl_time
/
1000
/
self
.
truck
.
heavy_speed
[
truck_id
]
+
truck_avl_time
# 车辆得到服务时间
# 车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
dump_val_time
)
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
dump_val_time
)
...
@@ -271,9 +275,9 @@ class ExpectedTime(AlgorithmBase):
...
@@ -271,9 +275,9 @@ class ExpectedTime(AlgorithmBase):
try
:
try
:
# 挖机可用时间
# 挖机可用时间
excavator_val_time_global
=
pre_sch
.
get_excavator_avl_time
()
excavator_val_time_global
=
self
.
pre_sch
.
get_excavator_avl_time
()
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
_dict
),
0
)
excavator_val_time
=
np
.
full
(
len
(
self
.
group
.
excavator
),
0
)
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
for
excavator_id
,
excavator_index
in
self
.
group
.
excavator_uuid_index_dict
.
items
():
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
excavator_val_time
[
excavator_index
]
=
excavator_val_time_global
[
excavator_id
]
...
@@ -286,7 +290,7 @@ class ExpectedTime(AlgorithmBase):
...
@@ -286,7 +290,7 @@ class ExpectedTime(AlgorithmBase):
# 车辆驶往各目的地时间
# 车辆驶往各目的地时间
truck_reach_time
=
60
*
self
.
group
.
to_excavator_distance
[
dump_group_index
,
:]
\
truck_reach_time
=
60
*
self
.
group
.
to_excavator_distance
[
dump_group_index
,
:]
\
/
1000
/
truck
.
empty_speed
[
truck_id
]
+
truck_avl_time
/
1000
/
self
.
truck
.
empty_speed
[
truck_id
]
+
truck_avl_time
# 计算车辆得到服务时间
# 计算车辆得到服务时间
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_time
)
truck_service_time
=
np
.
maximum
(
truck_reach_time
,
excavator_val_time
)
...
...
core/dispatcher.py
View file @
66ff835d
...
@@ -28,6 +28,8 @@ class Dispatcher:
...
@@ -28,6 +28,8 @@ class Dispatcher:
self
.
truck
=
truck
self
.
truck
=
truck
self
.
dump
=
dump
self
.
dump
=
dump
self
.
excavator
=
excavator
self
.
excavator
=
excavator
self
.
pre_sch
=
pre_sch
self
.
request_mode
=
request_mode
self
.
submission
=
DispatchSubmission
(
dump
,
excavator
,
truck
)
self
.
submission
=
DispatchSubmission
(
dump
,
excavator
,
truck
)
def
period_update
(
self
):
def
period_update
(
self
):
...
@@ -49,7 +51,7 @@ class Dispatcher:
...
@@ -49,7 +51,7 @@ class Dispatcher:
:return: None
:return: None
"""
"""
for
group_id
in
DispatchInfo
.
group_dump_dict
.
keys
():
for
group_id
in
DispatchInfo
.
group_dump_dict
.
keys
():
group
=
Group
(
group_id
,
self
.
truck
)
group
=
Group
(
group_id
,
self
.
truck
,
self
.
pre_sch
)
self
.
group_list
.
append
(
group
)
self
.
group_list
.
append
(
group
)
def
group_info_update
(
self
):
def
group_info_update
(
self
):
...
@@ -228,6 +230,6 @@ class DispatchSubmission:
...
@@ -228,6 +230,6 @@ class DispatchSubmission:
:param dispatch_plan_dict: (Dict)
:param dispatch_plan_dict: (Dict)
:return: None
:return: None
"""
"""
for
truck_id
,
dispatch_plan
in
dispatch_plan_dict
:
for
truck_id
,
dispatch_plan
in
dispatch_plan_dict
.
items
()
:
self
.
truck_dispatch_to_redis
(
truck_id
,
dispatch_plan
)
self
.
truck_dispatch_to_redis
(
truck_id
,
dispatch_plan
)
core/group.py
View file @
66ff835d
...
@@ -18,15 +18,14 @@
...
@@ -18,15 +18,14 @@
from
data.dispatchInfo
import
DispatchInfo
from
data.dispatchInfo
import
DispatchInfo
from
bidict
import
bidict
from
bidict
import
bidict
from
alg.algorithm
import
AlgorithmBase
from
alg.algorithm
import
AlgorithmBase
import
numpy
as
np
class
Group
:
class
Group
:
"""
"""
class for group instance.
class for group instance.
"""
"""
def
__init__
(
self
,
group_id
,
truck
):
def
__init__
(
self
,
group_id
,
truck
,
pre_sch
):
""" Generate a group obj.
""" Generate a group obj.
:param group_id: (uuid) group_id
:param group_id: (uuid) group_id
"""
"""
...
@@ -34,6 +33,7 @@ class Group:
...
@@ -34,6 +33,7 @@ class Group:
self
.
group_id
=
group_id
self
.
group_id
=
group_id
self
.
group_mode
=
1
self
.
group_mode
=
1
self
.
truck
=
truck
self
.
truck
=
truck
self
.
pre_sch
=
pre_sch
# group devices
# group devices
self
.
excavator
=
{}
# excavator_id -> unload_area_id
self
.
excavator
=
{}
# excavator_id -> unload_area_id
...
@@ -130,16 +130,17 @@ class Group:
...
@@ -130,16 +130,17 @@ class Group:
assert
issubclass
(
solver
,
AlgorithmBase
)
assert
issubclass
(
solver
,
AlgorithmBase
)
s
=
solver
(
self
)
# algorithm init
s
=
solver
(
self
,
self
.
truck
,
self
.
pre_sch
)
# algorithm init
# update truck task type
# update truck task type
for
i
in
list
(
self
.
truck_set
):
for
i
in
list
(
self
.
truck_set
):
truck_trip
=
self
.
truck
.
get_truck_current_trip
()[
self
.
truck_uuid_index_dict
[
i
]]
truck_trip
=
self
.
truck
.
get_truck_current_trip
()[
self
.
truck_uuid_index_dict
[
i
]]
truck_task
=
self
.
truck
.
get_truck_current_task
()[
self
.
truck_uuid_index_dict
[
i
]
]
truck_task
=
self
.
truck
.
get_truck_current_task
()[
i
]
if
truck_task
in
[
-
2
,
3
,
4
]:
if
truck_task
in
[
-
2
,
3
,
4
]:
next_excavator_list
=
s
.
solve
(
i
)
next_excavator_list
=
s
.
solve
(
i
)
min_index
=
next_excavator_list
.
index
(
min
(
next_excavator_list
))
# min_index = next_excavator_list.index(min(next_excavator_list))
min_index
=
np
.
argmin
(
next_excavator_list
)
next_excavator_id
=
self
.
excavator_uuid_index_dict
.
inverse
[
min_index
]
next_excavator_id
=
self
.
excavator_uuid_index_dict
.
inverse
[
min_index
]
next_dump_id
=
truck_trip
[
-
1
]
next_dump_id
=
truck_trip
[
-
1
]
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_dump_id
]
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_dump_id
]
...
...
equipment/truck.py
View file @
66ff835d
...
@@ -584,10 +584,12 @@ class TruckInfo(WalkManage):
...
@@ -584,10 +584,12 @@ class TruckInfo(WalkManage):
if
truck_id
in
self
.
truck_dump_bind
:
if
truck_id
in
self
.
truck_dump_bind
:
unload_area_id
=
self
.
truck_dump_bind
[
truck_id
]
unload_area_id
=
self
.
truck_dump_bind
[
truck_id
]
try
:
try
:
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Material
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Material
s
except
Exception
as
es
:
except
Exception
as
es
:
self
.
logger
.
error
(
es
)
session_postgre
.
rollback
()
session_postgre
.
rollback
()
session_mysql
.
rollback
()
session_mysql
.
rollback
()
self
.
truck_material_bind
[
truck_id
]
=
dump_material_id
self
.
truck_material_bind
[
truck_id
]
=
dump_material_id
if
truck_id
in
self
.
truck_excavator_bind
:
if
truck_id
in
self
.
truck_excavator_bind
:
...
...
realtime_dispatch.py
View file @
66ff835d
...
@@ -47,7 +47,7 @@ def process(dispatcher):
...
@@ -47,7 +47,7 @@ def process(dispatcher):
global_period_para_update
()
global_period_para_update
()
# 更新
数据库缓存
# 更新
调度信息
DispatchInfo
.
renew_set
()
DispatchInfo
.
renew_set
()
DispatchInfo
.
update_device_group_structure
()
DispatchInfo
.
update_device_group_structure
()
...
...
static_data_process.py
View file @
66ff835d
...
@@ -262,14 +262,29 @@ def update_total_truck():
...
@@ -262,14 +262,29 @@ def update_total_truck():
def
update_dynamic_truck
():
def
update_dynamic_truck
():
dynamic_truck_list
=
[]
dynamic_truck_list
=
[]
# try:
# query = np.array(
# session_mysql.query(Dispatch).filter_by(isauto=1, isdeleted=0).all()
# )
#
# for item in query:
# if item.truck_id is not None:
# dynamic_truck_list.append(item.truck_id)
#
# except Exception as es:
# logger.error(es)
# logger.error("动态调度矿卡读取异常")
# session_postgre.rollback()
# session_mysql.rollback()
try
:
try
:
query
=
np
.
array
(
query
=
np
.
array
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
isauto
=
1
,
isdeleted
=
0
)
.
all
()
session_mysql
.
query
(
Dispatch
Equipment
)
.
filter_by
(
isdeleted
=
0
)
.
all
()
)
)
for
item
in
query
:
for
item
in
query
:
if
item
.
truck
_id
is
not
None
:
if
item
.
equipment
_id
is
not
None
:
dynamic_truck_list
.
append
(
item
.
truck
_id
)
dynamic_truck_list
.
append
(
item
.
equipment
_id
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
error
(
es
)
logger
.
error
(
es
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment