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
2da8eccd
Commit
2da8eccd
authored
Jun 12, 2022
by
z5335534 Ao Guo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
group层修改
parent
6621a5c0
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
100 additions
and
28 deletions
+100
-28
dispatcher.cpython-37.pyc
core/__pycache__/dispatcher.cpython-37.pyc
+0
-0
group.cpython-37.pyc
core/__pycache__/group.cpython-37.pyc
+0
-0
dispatcher.py
core/dispatcher.py
+8
-0
group.py
core/group.py
+29
-19
dispatchInfo.cpython-37.pyc
data/__pycache__/dispatchInfo.cpython-37.pyc
+0
-0
dispatchInfo.py
data/dispatchInfo.py
+15
-5
realtime_dispatch.py
realtime_dispatch.py
+45
-3
test.py
test.py
+3
-1
No files found.
core/__pycache__/dispatcher.cpython-37.pyc
View file @
2da8eccd
No preview for this file type
core/__pycache__/group.cpython-37.pyc
View file @
2da8eccd
No preview for this file type
core/dispatcher.py
View file @
2da8eccd
...
@@ -52,6 +52,14 @@ class Dispatcher:
...
@@ -52,6 +52,14 @@ class Dispatcher:
group
=
Group
(
group_id
,
self
.
truck
)
group
=
Group
(
group_id
,
self
.
truck
)
self
.
group_list
.
append
(
group
)
self
.
group_list
.
append
(
group
)
def
group_info_update
(
self
):
"""
Update group information.
:return: None
"""
for
group
in
self
.
group_list
:
group
.
info_update
()
def
group_dispatch
(
self
):
def
group_dispatch
(
self
):
"""
"""
Group dispatching logic.
Group dispatching logic.
...
...
core/group.py
View file @
2da8eccd
...
@@ -36,8 +36,8 @@ class Group:
...
@@ -36,8 +36,8 @@ class Group:
self
.
truck
=
truck
self
.
truck
=
truck
# group devices
# group devices
self
.
excavator
_dict
=
{}
# excavator_id -> unload_area_id
self
.
excavator
=
{}
# excavator_id -> unload_area_id
self
.
dump
_dict
=
{}
# dump_id -> load_area_id
self
.
dump
=
{}
# dump_id -> load_area_id
self
.
truck_set
=
set
()
# truck_id
self
.
truck_set
=
set
()
# truck_id
# road network info.
# road network info.
...
@@ -71,8 +71,8 @@ class Group:
...
@@ -71,8 +71,8 @@ class Group:
"""
"""
# update group devices
# update group devices
# DispatchInfo.update_device_group_structure()
# DispatchInfo.update_device_group_structure()
self
.
excavator
_dict
=
DispatchInfo
.
get_excavator_dict
(
self
.
group_id
)
self
.
excavator
=
DispatchInfo
.
get_excavator
(
self
.
group_id
)
self
.
dump
_dict
=
DispatchInfo
.
get_dump_dict
(
self
.
group_id
)
self
.
dump
=
DispatchInfo
.
get_dump
(
self
.
group_id
)
self
.
truck_set
=
DispatchInfo
.
get_truck_set
(
self
.
group_id
)
self
.
truck_set
=
DispatchInfo
.
get_truck_set
(
self
.
group_id
)
def
update_group_road_network
(
self
):
def
update_group_road_network
(
self
):
...
@@ -92,17 +92,16 @@ class Group:
...
@@ -92,17 +92,16 @@ class Group:
:return:
:return:
"""
"""
# update device map
# update device map
excavator_index
=
0
#
excavator_index = 0
for
i
in
self
.
excavator_dict
.
keys
(
):
for
i
in
range
(
len
(
self
.
excavator
)
):
self
.
excavator_uuid_index_dict
[
i
]
=
excavator_index
+
1
self
.
excavator_uuid_index_dict
[
self
.
excavator
[
i
]]
=
i
dump_index
=
0
for
i
in
range
(
len
(
self
.
dump
)):
for
i
in
self
.
dump_dict
.
keys
():
self
.
dump_uuid_index_dict
[
self
.
dump
[
i
]]
=
i
self
.
dump_uuid_index_dict
[
i
]
=
dump_index
+
1
for
i
in
range
(
len
(
self
.
truck_set
)):
self
.
truck_uuid_index_dict
[
list
(
self
.
truck_set
)[
i
]]
=
i
truck_index
=
0
for
i
in
self
.
truck_set
:
self
.
truck_uuid_index_dict
[
i
]
=
truck_index
+
1
self
.
truck_uuid_index_dict
=
bidict
(
self
.
truck_uuid_index_dict
)
self
.
truck_uuid_index_dict
=
bidict
(
self
.
truck_uuid_index_dict
)
self
.
excavator_uuid_index_dict
=
bidict
(
self
.
excavator_uuid_index_dict
)
self
.
excavator_uuid_index_dict
=
bidict
(
self
.
excavator_uuid_index_dict
)
...
@@ -110,6 +109,16 @@ class Group:
...
@@ -110,6 +109,16 @@ class Group:
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
# group_excavator_dict = {group_1: {excavator_1: load_area_1}, group_2: {excavator_2: load_area_2}}
def
info_update
(
self
):
"""
update group info.
:return:
"""
self
.
update_group_mode
()
self
.
update_group_device
()
self
.
update_group_road_network
()
self
.
update_group_device_map
()
def
group_dispatch
(
self
,
solver
:
object
):
def
group_dispatch
(
self
,
solver
:
object
):
"""
"""
Receive a alg obj. and output dispatch plan for trucks in this group.
Receive a alg obj. and output dispatch plan for trucks in this group.
...
@@ -123,20 +132,21 @@ class Group:
...
@@ -123,20 +132,21 @@ class Group:
s
=
solver
(
self
)
# algorithm init
s
=
solver
(
self
)
# algorithm init
# update truck task type
# update truck task type
for
i
in
self
.
truck_set
:
for
i
in
list
(
self
.
truck_set
)
:
truck_trip
=
self
.
truck
.
get_truck_current_trip
(
i
)
truck_trip
=
self
.
truck
.
get_truck_current_trip
(
)[
self
.
truck_uuid_index_dict
[
i
]]
truck_task
=
self
.
truck
.
get_truck_current_task
(
i
)
truck_task
=
self
.
truck
.
get_truck_current_task
(
)[
self
.
truck_uuid_index_dict
[
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
))
+
1
min_index
=
next_excavator_list
.
index
(
min
(
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
]
if
truck_task
in
[
0
,
1
]:
if
truck_task
in
[
0
,
1
]:
next_dump_list
=
s
.
solve
(
i
)
next_dump_list
=
s
.
solve
(
i
)
min_index
=
next_dump_list
.
index
(
min
(
next_dump_list
))
+
1
min_index
=
next_dump_list
.
index
(
min
(
next_dump_list
))
next_dump_id
=
self
.
dump_uuid_index_dict
.
inverse
[
min_index
]
next_dump_id
=
self
.
dump_uuid_index_dict
.
inverse
[
min_index
]
next_excavator_id
=
truck_trip
[
-
1
]
next_excavator_id
=
truck_trip
[
-
1
]
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_dump_id
]
truck_dispatch
[
i
]
=
[
next_excavator_id
,
next_dump_id
]
...
@@ -165,7 +175,7 @@ class Group:
...
@@ -165,7 +175,7 @@ class Group:
#
#
# # group devices
# # group devices
# self.excavator_dict = {} # excavator_id -> unload_area_id
# self.excavator_dict = {} # excavator_id -> unload_area_id
# self.dump
_dict
= {} # dump_id -> load_area_id
# self.dump = {} # dump_id -> load_area_id
# self.truck_set = set() # truck_id
# self.truck_set = set() # truck_id
#
#
# # road network info.
# # road network info.
...
...
data/__pycache__/dispatchInfo.cpython-37.pyc
View file @
2da8eccd
No preview for this file type
data/dispatchInfo.py
View file @
2da8eccd
...
@@ -46,6 +46,8 @@ class DispatchInfo:
...
@@ -46,6 +46,8 @@ class DispatchInfo:
@author:maqc
@author:maqc
@desc:实例化对象,可直接访问
@desc:实例化对象,可直接访问
"""
"""
cls
.
group_set
=
set
()
cls
.
load_excavator_dict
=
{}
cls
.
load_excavator_dict
=
{}
cls
.
excavator_load_dict
=
{}
cls
.
excavator_load_dict
=
{}
...
@@ -82,8 +84,10 @@ class DispatchInfo:
...
@@ -82,8 +84,10 @@ class DispatchInfo:
@author:maqc
@author:maqc
@desc:分组与卸载区、挖机、矿卡的映射和反映射
@desc:分组与卸载区、挖机、矿卡的映射和反映射
"""
"""
# build excavator group map
logger
=
get_logger
(
"mqc.update_device_group_structure"
)
logger
=
get_logger
(
"mqc.update_device_group_structure"
)
# build excavator group map
try
:
try
:
for
item
in
session_postgre
.
query
(
DiggingWorkArea
)
.
all
():
for
item
in
session_postgre
.
query
(
DiggingWorkArea
)
.
all
():
...
@@ -131,6 +135,12 @@ class DispatchInfo:
...
@@ -131,6 +135,12 @@ class DispatchInfo:
logger
.
error
(
"矿卡与group_id映射更新异常"
)
logger
.
error
(
"矿卡与group_id映射更新异常"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
# update group set
try
:
cls
.
group_set
=
set
(
cls
.
group_excavator_dict
.
keys
())
except
Exception
as
es
:
logger
.
error
(
es
)
# try:
# try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # dump_group_dict = {} # unload_area_id -> team_id
# # dump_group_dict = {} # unload_area_id -> team_id
...
@@ -304,11 +314,11 @@ class DispatchInfo:
...
@@ -304,11 +314,11 @@ class DispatchInfo:
return
cls
.
group_mode
[
group_id
]
return
cls
.
group_mode
[
group_id
]
@classmethod
@classmethod
def
get_excavator
_dict
(
cls
,
group_id
):
def
get_excavator
(
cls
,
group_id
):
return
cls
.
group_excavator_dict
[
group_id
]
return
cls
.
group_excavator_dict
[
group_id
]
@classmethod
@classmethod
def
get_dump
_dict
(
cls
,
group_id
):
def
get_dump
(
cls
,
group_id
):
return
cls
.
group_dump_dict
[
group_id
]
return
cls
.
group_dump_dict
[
group_id
]
@classmethod
@classmethod
...
@@ -332,9 +342,9 @@ class DispatchInfo:
...
@@ -332,9 +342,9 @@ class DispatchInfo:
def
get_park_to_excavator_distance
(
cls
,
group_id
):
def
get_park_to_excavator_distance
(
cls
,
group_id
):
excavators
=
cls
.
group_excavator_dict
[
group_id
]
excavators
=
cls
.
group_excavator_dict
[
group_id
]
park_matrix
=
np
.
zeros
((
1
,
len
(
excavators
)))
park_matrix
=
np
.
zeros
((
1
,
len
(
excavators
)))
for
i
in
range
(
excavators
):
for
i
in
range
(
len
(
excavators
)
):
load_area_id
=
cls
.
excavator_load_dict
[
excavators
[
i
]]
load_area_id
=
cls
.
excavator_load_dict
[
excavators
[
i
]]
distance
=
session_postgre
.
query
(
WalkTimePark
)
.
filter_by
(
load_area_id
=
load_area_id
)
.
first
()
distance
=
session_postgre
.
query
(
WalkTimePark
)
.
filter_by
(
load_area_id
=
load_area_id
)
.
first
()
.
park_load_distance
park_matrix
[
0
][
i
]
=
distance
park_matrix
[
0
][
i
]
=
distance
return
park_matrix
return
park_matrix
...
...
realtime_dispatch.py
View file @
2da8eccd
...
@@ -18,7 +18,6 @@ from core.dispatcher import Dispatcher
...
@@ -18,7 +18,6 @@ from core.dispatcher import Dispatcher
from
core.schedule
import
PreSchedule
from
core.schedule
import
PreSchedule
from
data.dispatchInfo
import
DispatchInfo
from
data.dispatchInfo
import
DispatchInfo
def
process
(
dispatcher
):
def
process
(
dispatcher
):
"""
"""
周期调度进程
周期调度进程
...
@@ -57,15 +56,58 @@ def process(dispatcher):
...
@@ -57,15 +56,58 @@ def process(dispatcher):
DispatchInfo
.
update_group_mode
()
DispatchInfo
.
update_group_mode
()
# logger.info
# group_set = set()
#
# # device group structure
# load_excavator_dict = {} # 装载区id-->>电铲编号的映射
# excavator_load_dict = {} # 电铲编号->>装载区id的映射
#
# group_excavator_dict = {} # team_id -> dict {[excavator_id, excavator_id], ...}
# excavator_group_dict = {} # excavator_id -> team_id 问题:多个key值对应一个value值
#
# group_dump_dict = {} # team_id -> dict {unload_area_id, unload_area_id, ...}
# dump_group_dict = {} # unload_area_id -> team_id
#
# group_truck_dict = {} # team_id -> dict # {group_id:[truck_id,truck_id],...}
# truck_group_dict = {} # truck_id -> team_id
#
# # group feature
# group_mode = {} # 数据格式: {team_id:mode_code}
#
# # route_distance(路网距离)
# load_distance = {}
# unload_distance = {}
logger
.
info
(
"Dispatchinfo,更新后信息"
)
logger
.
info
(
DispatchInfo
.
group_set
)
logger
.
info
(
DispatchInfo
.
group_excavator_dict
)
logger
.
info
(
DispatchInfo
.
group_dump_dict
)
logger
.
info
(
DispatchInfo
.
group_truck_dict
)
logger
.
info
(
DispatchInfo
.
group_mode
)
logger
.
info
(
DispatchInfo
.
load_distance
)
logger
.
info
(
DispatchInfo
.
unload_distance
)
logger
.
info
(
DispatchInfo
.
load_excavator_dict
)
logger
.
info
(
DispatchInfo
.
excavator_load_dict
)
logger
.
info
(
DispatchInfo
.
excavator_group_dict
)
logger
.
info
(
DispatchInfo
.
dump_group_dict
)
logger
.
info
(
DispatchInfo
.
truck_group_dict
)
# 调度生成
# 调度生成
dispatcher
.
period_update
()
dispatcher
.
period_update
()
dispatcher
.
group_generate
()
dispatcher
.
group_generate
()
dispatcher
.
group_info_update
()
dispatcher
.
group_dispatch
()
dispatcher
.
group_dispatch
()
#
logger.info("#####################################周期更新结束#####################################")
logger
.
info
(
"#####################################周期更新结束#####################################"
)
#
# except Exception as es:
# except Exception as es:
# logger.error("最外层异常捕获")
# logger.error("最外层异常捕获")
# logger.error(es)
# logger.error(es)
...
...
test.py
View file @
2da8eccd
...
@@ -27,7 +27,7 @@ if __name__ == '__main__':
...
@@ -27,7 +27,7 @@ if __name__ == '__main__':
DispatchInfo
.
update_device_group_structure
()
DispatchInfo
.
update_device_group_structure
()
DispatchInfo
.
update_route_distance
()
DispatchInfo
.
update_route_distance
()
#
DispatchInfo
.
update_group_mode
()
DispatchInfo
.
update_group_mode
()
a
=
DispatchInfo
.
get_group_mode
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
a
=
DispatchInfo
.
get_group_mode
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
...
@@ -50,3 +50,5 @@ if __name__ == '__main__':
...
@@ -50,3 +50,5 @@ if __name__ == '__main__':
# load = DispatchInfo.get_load_area(i)
# load = DispatchInfo.get_load_area(i)
# print(load)
# print(load)
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