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
777a0b16
Commit
777a0b16
authored
Jun 12, 2022
by
z5335534 Ao Guo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
info层再次修改
parent
93958978
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
171 additions
and
71 deletions
+171
-71
tables.cpython-37.pyc
__pycache__/tables.cpython-37.pyc
+0
-0
dispatchInfo.cpython-37.pyc
data/__pycache__/dispatchInfo.cpython-37.pyc
+0
-0
dispatchInfo.py
data/dispatchInfo.py
+108
-66
tables.py
tables.py
+11
-5
test.py
test.py
+52
-0
No files found.
__pycache__/tables.cpython-37.pyc
View file @
777a0b16
No preview for this file type
data/__pycache__/dispatchInfo.cpython-37.pyc
View file @
777a0b16
No preview for this file type
data/dispatchInfo.py
View file @
777a0b16
...
...
@@ -36,8 +36,8 @@ class DispatchInfo:
group_mode
=
{}
# 数据格式: {team_id:mode_code}
# route_distance(路网距离)
load_distance
=
{}
# 装载区-挖机(电铲)的距离 数据格式 -->>{team_id:np.array}
unload_distance
=
{}
# 卸载区-挖机(电铲)的距离 数据格式 -->>{team_id:np.array}
load_distance
=
{}
unload_distance
=
{}
@classmethod
def
renew_set
(
cls
):
...
...
@@ -85,9 +85,11 @@ class DispatchInfo:
# build excavator group map
logger
=
get_logger
(
"mqc.update_device_group_structure"
)
try
:
for
value
in
session_postgre
.
query
(
DiggingWorkArea
)
.
all
():
cls
.
load_excavator_dict
[
value
.
Id
]
=
value
.
ExactorId
cls
.
excavator_load_dict
[
value
.
ExactorId
]
=
value
.
Id
for
item
in
session_postgre
.
query
(
DiggingWorkArea
)
.
all
():
if
item
.
ExactorUuid
is
not
None
:
cls
.
load_excavator_dict
[
str
(
item
.
Id
)]
=
item
.
ExactorUuid
cls
.
excavator_load_dict
[
item
.
ExactorUuid
]
=
str
(
item
.
Id
)
except
Exception
as
es
:
logger
.
error
(
"挖机和装载区映射更新异常"
)
logger
.
error
(
es
)
...
...
@@ -96,17 +98,23 @@ class DispatchInfo:
try
:
for
item
in
session_mysql
.
query
(
DispatchMatch
)
.
filter_by
(
group_type
=
1
)
.
all
():
if
item
.
group_code
not
in
cls
.
group_excavator_dict
.
keys
():
cls
.
group_excavator_dict
[
item
.
group_code
]
=
item
.
excavator_id
else
:
cls
.
group_excavator_dict
[
item
.
group_code
]
.
append
(
item
.
excavator_id
)
cls
.
excavator_group_dict
[
item
.
excavator_id
]
=
item
.
group_code
if
item
.
group_code
not
in
cls
.
group_dump_dict
.
keys
():
cls
.
group_dump_dict
[
item
.
group_code
]
=
item
.
dump_area_id
else
:
cls
.
group_dump_dict
[
item
.
group_code
]
.
append
(
item
.
dump_area_id
)
cls
.
dump_group_dict
[
item
.
dump_area_id
]
=
item
.
group_code
# if item.group_code not in cls.group_excavator_dict.keys():
# cls.group_excavator_dict[item.group_code] = item.excavator_id
# else:
# cls.group_excavator_dict[item.group_code].append(item.excavator_id)
# cls.excavator_group_dict[item.excavator_id] = item.group_code
if
item
.
load_area_id
is
not
None
and
item
.
dump_id
is
not
None
:
if
item
.
group_code
not
in
cls
.
group_excavator_dict
.
keys
():
cls
.
group_excavator_dict
[
item
.
group_code
]
=
[
item
.
exactor_id
]
else
:
cls
.
group_excavator_dict
[
item
.
group_code
]
.
append
(
item
.
exactor_id
)
cls
.
excavator_group_dict
[
item
.
exactor_id
]
=
item
.
group_code
if
item
.
group_code
not
in
cls
.
group_dump_dict
.
keys
():
cls
.
group_dump_dict
[
item
.
group_code
]
=
[
item
.
unload_area_id
]
else
:
cls
.
group_dump_dict
[
item
.
group_code
]
.
append
(
item
.
unload_area_id
)
cls
.
dump_group_dict
[
item
.
unload_area_id
]
=
item
.
group_code
except
Exception
as
es
:
logger
.
error
(
"挖机/卸载区与group_id映射更新异常"
)
logger
.
error
(
es
)
...
...
@@ -115,14 +123,14 @@ class DispatchInfo:
try
:
for
item
in
session_mysql
.
query
(
DispatchEquipment
)
.
filter_by
(
group_type
=
1
)
.
all
():
if
item
.
group_code
not
in
cls
.
group_truck_dict
.
keys
():
cls
.
group_truck_dict
[
item
.
group_code
]
=
item
.
truck_id
cls
.
group_truck_dict
[
item
.
group_code
]
=
[
item
.
equipment_id
]
else
:
cls
.
group_truck_dict
[
item
.
group_code
]
.
append
(
item
.
truck
_id
)
cls
.
truck_group_dict
[
item
.
truck
_id
]
=
item
.
group_code
cls
.
group_truck_dict
[
item
.
group_code
]
.
append
(
item
.
equipment
_id
)
cls
.
truck_group_dict
[
item
.
equipment
_id
]
=
item
.
group_code
except
Exception
as
es
:
logger
.
error
(
"矿卡与group_id映射更新异常"
)
logger
.
error
(
es
)
#
# try:
# # group_dump_dict = {} -->> {team_id:[unload_area_id,unload_area_id],...}
# # dump_group_dict = {} # unload_area_id -> team_id
...
...
@@ -151,7 +159,7 @@ class DispatchInfo:
# else:
# cls.group_truck_dict[key.group_code].append(key.equipment_id)
# cls.truck_group_dict[key.equipment_id] = group_code_dict[key.group_code]
#
# except Exception as es:
# logger.error("分组到卸载区的数据更新异常")
# logger.error(es)
...
...
@@ -215,51 +223,84 @@ class DispatchInfo:
"""
logger
=
get_logger
(
"mqc.update_route_distance"
)
try
:
try
:
df
=
pd
.
DataFrame
()
# 记录装载区与卸载区之间的距离
for
item
in
session_postgre
.
query
(
WalkTime
)
.
all
():
temp
=
str
(
item
.
load_area_id
),
str
(
item
.
unload_area_id
),
item
.
to_load_distance
,
item
.
to_unload_distance
df
=
pd
.
concat
([
df
,
pd
.
DataFrame
([
temp
])],
axis
=
0
,
ignore_index
=
True
)
except
Exception
as
es
:
logger
.
error
(
"路网距离数据更新异常1"
)
logger
.
error
(
es
)
# 距离矩阵
for
team_id
in
list
(
cls
.
group_dump_dict
.
keys
()):
unload_nums
=
list
(
set
(
cls
.
group_dump_dict
[
team_id
]))
# 获取同一个team_id对应的卸载区列表
exactor_nums
=
list
(
set
(
cls
.
group_excavator_dict
[
team_id
]))
# 获取同一个team_id对应的电铲列表
unload_exactor_matrix
=
np
.
zeros
(
(
len
(
unload_nums
),
len
(
exactor_nums
)))
# 初始化距离矩阵,记录从卸载区-->>电铲的距离,即to_load_distance,空车模式
load_exactor_matrix
=
np
.
array
(
unload_exactor_matrix
)
.
T
# 初始化距离矩阵,记录从装载区-->>电铲的距离,即to_unload_distance,重车模式
try
:
for
i
in
range
(
len
(
unload_nums
)):
for
j
in
range
(
len
(
exactor_nums
)):
id
=
set
(
df
.
loc
[
df
[
1
]
==
str
(
unload_nums
[
i
])]
.
index
.
to_list
())
&
set
(
df
.
loc
[
df
[
0
]
==
str
(
cls
.
excavator_load_dict
[
j
])]
.
index
.
to_list
())
# 集合属性
unload_exactor_matrix
[
i
][
j
]
=
df
.
iloc
[
list
(
id
)[
0
]][
2
]
except
Exception
as
es
:
logger
.
error
(
"路网距离数据更新异常2"
)
logger
.
error
(
es
)
try
:
for
m
in
range
(
len
(
exactor_nums
)):
for
n
in
range
(
len
(
unload_nums
)):
id
=
set
(
df
.
loc
[
df
[
0
]
==
str
(
cls
.
excavator_load_dict
[
m
])]
.
index
.
to_list
())
&
set
(
df
.
loc
[
df
[
1
]
==
str
(
unload_nums
[
n
])]
.
index
.
to_list
())
load_exactor_matrix
[
m
][
n
]
=
df
.
iloc
[
list
(
id
)[
0
]][
3
]
except
Exception
as
es
:
logger
.
error
(
"路网距离数据更新异常3"
)
logger
.
error
(
es
)
cls
.
load_distance
[
team_id
]
=
unload_exactor_matrix
cls
.
unload_distance
[
team_id
]
=
load_exactor_matrix
groups
=
cls
.
group_excavator_dict
.
keys
()
for
item
in
groups
:
# 每个组的 excavator_id
excavator_ids
=
cls
.
group_excavator_dict
[
item
]
# 每个组的load_areas
load_areas
=
[]
for
excavator_id
in
excavator_ids
:
load_areas
.
append
(
cls
.
excavator_load_dict
[
excavator_id
])
# 每个组的unload_areas
unload_areas
=
cls
.
group_dump_dict
[
item
]
# unload->load 路网
unload_load_distance
=
np
.
zeros
((
len
(
unload_areas
),
len
(
load_areas
)))
for
i
in
unload_areas
:
for
j
in
load_areas
:
distance
=
int
(
session_postgre
.
query
(
WalkTime
)
.
filter_by
(
unload_area_id
=
i
,
load_area_id
=
j
)
.
first
()
.
to_load_distance
)
unload_load_distance
[
i
][
j
]
=
distance
cls
.
load_distance
[
item
]
=
unload_load_distance
# load->unload 路网
load_unload_distance
=
np
.
zeros
((
len
(
load_areas
),
len
(
unload_areas
)))
for
i
in
load_areas
:
for
j
in
unload_areas
:
distance
=
session_postgre
.
query
(
WalkTime
)
.
filter_by
(
load_area_id
=
i
,
unload_area_id
=
j
)
.
first
()
.
to_unload_distance
load_unload_distance
[
i
][
j
]
=
distance
cls
.
unload_distance
[
item
]
=
load_unload_distance
except
Exception
as
es
:
logger
.
error
(
"路网距离
数据更新异常4
"
)
logger
.
error
(
"路网距离
更新异常
"
)
logger
.
error
(
es
)
# try:
# df = pd.DataFrame() # 记录装载区与卸载区之间的距离
# for item in session_postgre.query(WalkTime).all():
# temp = str(item.load_area_id), str(item.unload_area_id), item.to_load_distance, item.to_unload_distance
# df = pd.concat([df, pd.DataFrame([temp])], axis=0, ignore_index=True)
# except Exception as es:
# logger.error("路网距离数据更新异常1")
# logger.error(es)
#
# # 距离矩阵
# for team_id in list(cls.group_dump_dict.keys()):
# unload_nums = list(set(cls.group_dump_dict[team_id])) # 获取同一个team_id对应的卸载区列表
# exactor_nums = list(set(cls.group_excavator_dict[team_id])) # 获取同一个team_id对应的电铲列表
#
# unload_exactor_matrix = np.zeros(
# (len(unload_nums), len(exactor_nums))) # 初始化距离矩阵,记录从卸载区-->>电铲的距离,即to_load_distance,空车模式
# load_exactor_matrix = np.array(
# unload_exactor_matrix).T # 初始化距离矩阵,记录从装载区-->>电铲的距离,即to_unload_distance,重车模式
#
# try:
# for i in range(len(unload_nums)):
# for j in range(len(exactor_nums)):
# id = set(df.loc[df[1] == str(unload_nums[i])].index.to_list()) & set(
# df.loc[df[0] == str(cls.excavator_load_dict[j])].index.to_list()) # 集合属性
# unload_exactor_matrix[i][j] = df.iloc[list(id)[0]][2]
# except Exception as es:
# logger.error("路网距离数据更新异常2")
# logger.error(es)
#
# try:
# for m in range(len(exactor_nums)):
# for n in range(len(unload_nums)):
# id = set(df.loc[df[0] == str(cls.excavator_load_dict[m])].index.to_list()) & set(
# df.loc[df[1] == str(unload_nums[n])].index.to_list())
# load_exactor_matrix[m][n] = df.iloc[list(id)[0]][3]
# except Exception as es:
# logger.error("路网距离数据更新异常3")
# logger.error(es)
# cls.load_distance[team_id] = unload_exactor_matrix
# cls.unload_distance[team_id] = load_exactor_matrix
#
# except Exception as es:
# logger.error("路网距离数据更新异常4")
# logger.error(es)
@classmethod
def
get_group_mode
(
cls
,
group_id
):
return
cls
.
group_mode
[
group_id
]
...
...
@@ -284,9 +325,9 @@ class DispatchInfo:
def
get_to_dump_distance
(
cls
,
group_id
):
return
cls
.
unload_distance
[
group_id
]
#
@classmethod
# def get_park_to_excavator_distance(cls, group
_id):
# return cls.park_distance[group
_id]
@classmethod
def
get_load_area
(
cls
,
excavator
_id
):
return
cls
.
excavator_load_dict
[
excavator
_id
]
@classmethod
def
get_park_to_excavator_distance
(
cls
,
group_id
):
...
...
@@ -298,6 +339,7 @@ class DispatchInfo:
park_matrix
[
0
][
i
]
=
distance
return
park_matrix
# #!E:\Pycharm Projects\Waytous
# # -*- coding: utf-8 -*-
# # @Time : 2022/5/30 14:45
...
...
tables.py
View file @
777a0b16
...
...
@@ -490,11 +490,13 @@ class DiggingWorkArea(Base):
Id
=
Column
(
VARCHAR
(
50
),
primary_key
=
True
)
Material
=
Column
(
VARCHAR
(
36
))
ExactorId
=
Column
(
VARCHAR
(
36
))
ExactorUuid
=
Column
(
VARCHAR
(
50
))
def
__init__
(
self
,
Id
,
Material
,
ExactorId
):
def
__init__
(
self
,
Id
,
Material
,
ExactorId
,
ExactorUuid
):
self
.
Id
=
Id
self
.
Material
=
Material
self
.
ExactorId
=
ExactorId
self
.
ExactorUuid
=
ExactorUuid
class
DispatchRule
(
Base
):
...
...
@@ -558,18 +560,22 @@ class DispatchMatch(Base):
group_code
=
Column
(
VARCHAR
(
36
))
match_code
=
Column
(
VARCHAR
(
36
))
team_id
=
Column
(
VARCHAR
(
36
))
load_area_id
=
Column
(
VARCHAR
(
36
))
# excavator_id = Column(VARCHAR(36))
dump_id
=
Column
(
VARCHAR
(
36
))
exactor_id
=
Column
(
VARCHAR
(
36
))
unload_area_id
=
Column
(
VARCHAR
(
36
))
excavator_id
=
Column
(
VARCHAR
(
36
))
def
__init__
(
self
,
id
,
group_type
,
group_code
,
match_code
,
team_id
,
unload_area_id
,
excavator
_id
):
def
__init__
(
self
,
id
,
group_type
,
group_code
,
match_code
,
team_id
,
load_area_id
,
dump_id
,
exactor_id
,
unload_area
_id
):
self
.
id
=
id
self
.
group_type
=
group_type
self
.
group_code
=
group_code
self
.
match_code
=
match_code
self
.
team_id
=
team_id
self
.
load_area_id
=
load_area_id
self
.
dump_id
=
dump_id
self
.
exactor_id
=
exactor_id
self
.
unload_area_id
=
unload_area_id
self
.
excavator_id
=
excavator_id
class
DispatchEquipment
(
Base
):
__tablename__
=
'sys_dispatch_equipment'
...
...
test.py
0 → 100644
View file @
777a0b16
from
static_data_process
import
*
from
settings
import
*
import
numpy
as
np
from
data.dispatchInfo
import
DispatchInfo
from
bidict
import
bidict
from
alg.algorithm
import
AlgorithmBase
if
__name__
==
'__main__'
:
# 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)
# dynamic_excavator_list = []
# for item in (
# session_mysql.query(Dispatch).filter_by(isdeleted=0, isauto=1).all()
# ):
# dynamic_excavator_list.append(item.exactor_id)
# if len(dynamic_excavator_list) < 1:
# raise Exception("无动态派车计划可用-动态派车挖机/卸载设备集合读取异常")
# 更新数据库缓存
DispatchInfo
.
renew_set
()
DispatchInfo
.
update_device_group_structure
()
DispatchInfo
.
update_route_distance
()
#
DispatchInfo
.
update_group_mode
()
a
=
DispatchInfo
.
get_group_mode
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
a_excavator
=
DispatchInfo
.
get_excavator_dict
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
a_dump
=
DispatchInfo
.
get_dump_dict
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
a_truck
=
DispatchInfo
.
get_truck_set
(
'9bb14655-4fd5-49da-a31a-13f6ced88d6c'
)
bb
=
DispatchInfo
.
excavator_load_dict
cc
=
DispatchInfo
.
load_excavator_dict
# print(bb)
# print(cc)
hh
=
DispatchInfo
.
group_excavator_dict
print
(
hh
)
# print(a)
# print(a_excavator)
# print(a_dump)
# print(a_truck)
# for i in a_excavator:
# load = DispatchInfo.get_load_area(i)
# 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