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
8d18fe04
Unverified
Commit
8d18fe04
authored
Jul 25, 2022
by
Allvey
Committed by
GitHub
Jul 25, 2022
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #5 from Allvey/SplitRatio
合并分流配比模块
parents
e12cb5f8
3031349b
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
188 additions
and
6 deletions
+188
-6
algorithm.py
alg/algorithm.py
+74
-0
group.py
core/group.py
+44
-3
dispatchInfo.py
data/dispatchInfo.py
+64
-0
tables.py
tables.py
+6
-3
No files found.
alg/algorithm.py
View file @
8d18fe04
...
...
@@ -320,3 +320,77 @@ class ExpectedTime(AlgorithmBase):
return
transport_value
class
DistributionRatio
(
object
):
"""
@date:2022/7/19 8:49
@author:maqc
@para:
truck_id:分流配比模式下,对应的卡车id
excavator_id:该卡车对应的电铲id
@return:{truck_id:unload_area_id}
@desc:计算分流配比模式下,卡车与卸载区的对应关系
"""
def
__init__
(
self
,
exactor_id
):
self
.
exactor_id
=
exactor_id
self
.
exactor_truck_num
=
DispatchInfo
.
get_exactor_truck_nums
(
exactor_id
)
# 获取该电铲下的卡车数量
self
.
exactor_unload_match
=
DispatchInfo
.
get_exactor_unload_match
(
exactor_id
)
# 获取电铲对应的所有卸载区id
self
.
unload_ratio
=
{}
self
.
logger
=
get_logger
(
"mqc.DistributionRatio"
)
def
get_unload_ratio
(
self
):
"""
@date:2022/7/19 15:21
@author:maqc
@desc:初始化卸载区的比值
"""
ratio
=
0
for
value
in
self
.
exactor_unload_match
:
ratio
+=
DispatchInfo
.
unload_rate_dict
[
value
]
for
item
in
self
.
exactor_unload_match
:
self
.
unload_ratio
[
item
]
=
DispatchInfo
.
unload_rate_dict
[
item
]
/
ratio
def
get_unload_truck_num
(
self
,
unload_area_id
):
"""
@date:2022/7/19 16:12
@author:maqc
@desc:计算正在派往当前卸载区的卡车数量
"""
item
=
session_mysql
.
query
(
EquipmentPair
)
.
filter_by
(
unload_area_id
=
unload_area_id
,
isdeleted
=
0
)
.
all
()
return
len
(
item
)
def
get_next_unload_id
(
self
):
"""
@date:2022/7/19 15:39
@author:maqc
@desc:计算卡车与下一个卸载区的对应关系
"""
# 无论当前卡车是否在备停区,下一个卸载区选择比值最大值对应的区域
try
:
temp
=
list
(
self
.
unload_ratio
.
values
())
next_unload_id
=
list
(
self
.
unload_ratio
.
keys
())[
temp
.
index
(
max
(
temp
))]
# 更新卸载区对应的比例值
self
.
logger
.
info
(
f
"下一个卸载区对应的id:{next_unload_id}"
)
self
.
unload_ratio
[
next_unload_id
]
-=
self
.
get_unload_truck_num
(
next_unload_id
)
/
self
.
exactor_truck_num
self
.
logger
.
info
(
f
"当前卸载区对应的比值:{self.unload_ratio[next_unload_id]}"
)
except
Exception
as
es
:
self
.
logger
.
error
(
"卡车与下一个卸载区的配对关系异常"
)
self
.
logger
.
error
(
es
)
return
next_unload_id
def
ratio_main
(
self
):
"""
@date:2022/7/19 9:10
@author:maqc
@desc:分流配比模式类函数主入口
"""
try
:
self
.
get_unload_ratio
()
next_unload_area_id
=
self
.
get_next_unload_id
()
self
.
logger
.
info
(
f
'当前卡车对应的卸载区:{next_unload_area_id}'
)
except
Exception
as
es
:
self
.
logger
.
error
(
"分流配比主函数异常"
)
self
.
logger
.
error
(
es
)
return
next_unload_area_id
core/group.py
View file @
8d18fe04
...
...
@@ -17,7 +17,7 @@
from
data.dispatchInfo
import
*
from
bidict
import
bidict
from
alg.algorithm
import
AlgorithmBase
from
alg.algorithm
import
AlgorithmBase
,
DistributionRatio
import
numpy
as
np
# from settings import get_logger
from
para_config
import
get_value
...
...
@@ -262,9 +262,50 @@ class Group:
self
.
logger
.
error
(
"固定派车-计算异常"
)
self
.
logger
.
error
(
es
)
# 分流配比模式
elif
self
.
group_mode
==
4
:
pass
next_exactor_id
=
DispatchInfo
.
get_truck_exactor
(
i
)
# 获取该卡车对应的exactor_id
self
.
logger
.
info
(
f
"分流配比模式,对应的卡车:{i}"
)
self
.
logger
.
info
(
f
"矿卡对应的铲车:{next_exactor_id}"
)
next_unload_area_id
=
None
if
truck_task
==
-
2
:
next_unload_area_id
=
"Park"
# 空载模式下,计算下一次卸载区的位置,按照分流配比的模式进行计算
elif
truck_task
in
[
0
,
1
,
2
]:
try
:
next_unload_area_id
=
DistributionRatio
(
next_exactor_id
)
.
ratio_main
()
except
Exception
as
es
:
self
.
logger
.
error
(
"分流配比模式-->>空载车辆计算异常"
)
self
.
logger
.
error
(
es
)
# 重载模式下,按照固定派车进行计算
elif
truck_task
in
[
3
,
4
,
5
]:
try
:
next_unload_area_id
=
DispatchInfo
.
get_truck_match
(
i
)[
1
]
except
Exception
as
es
:
self
.
logger
.
error
(
"分流配比模式-->>重载车辆计算异常"
)
self
.
logger
.
error
(
es
)
truck_dispatch
[
i
]
=
[
next_exactor_id
,
next_unload_area_id
]
# return dispatch plan
return
truck_dispatch
data/dispatchInfo.py
View file @
8d18fe04
...
...
@@ -57,6 +57,17 @@ class DispatchInfo:
dump_unload_area_dict
=
{}
unload_area_dump_dict
=
{}
# 获取电铲与卡车的双映射 -->> exactor_id <-> truck_id
exactor_truck_dict
=
{}
truck_exactor_dict
=
{}
# 获取电铲与卸载区的双映射 -->> exactor_id <-> unload_area_id
exactor_unload_dict
=
{}
unload_exactor_dict
=
{}
# 获取卸载区与rate之间的关系 -->> unload_area_id -> rate
unload_rate_dict
=
{}
@classmethod
def
reset
(
cls
):
"""
...
...
@@ -91,6 +102,14 @@ class DispatchInfo:
cls
.
dump_unload_area_dict
=
{}
cls
.
unload_area_dump_dict
=
{}
cls
.
exactor_truck_dict
=
{}
cls
.
truck_exactor_dict
=
{}
cls
.
exactor_unload_dict
=
{}
cls
.
unload_exactor_dict
=
{}
cls
.
unload_rate_dict
=
{}
# cls.group_unload_area_dict = {} # cls.group_unload_area_dict.keys() 相当于所有的team_id
# cls.unload_area_group_dict = {} # cls.unload_area_group_dict.keys() 相当于所有的卸载区 unload_area_id
# cls.group_excavator_dict = {}
...
...
@@ -137,6 +156,39 @@ class DispatchInfo:
session_postgre
.
rollback
()
session_mysql
.
rollback
()
# update exactor_id <-> truck_id
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
all
():
if
item
.
exactor_id
not
in
cls
.
exactor_truck_dict
.
keys
():
cls
.
exactor_truck_dict
[
item
.
exactor_id
]
=
[
item
.
truck_id
]
else
:
if
item
.
truck_id
not
in
cls
.
exactor_truck_dict
[
item
.
exactor_id
]:
cls
.
exactor_truck_dict
[
item
.
exactor_id
]
.
append
(
item
.
truck_id
)
cls
.
truck_exactor_dict
[
item
.
truck_id
]
=
item
.
exactor_id
except
Exception
as
es
:
logger
.
error
(
"电铲和卡车的映射关系更新异常"
)
logger
.
error
(
es
)
# update exactor_id <-> unload_area_id
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
all
():
if
item
.
exactor_id
not
in
cls
.
exactor_unload_dict
.
keys
():
cls
.
exactor_unload_dict
[
item
.
exactor_id
]
=
[
item
.
unload_area_id
]
else
:
if
item
.
unload_area_id
not
in
cls
.
exactor_unload_dict
[
item
.
exactor_id
]:
cls
.
exactor_unload_dict
[
item
.
exactor_id
]
.
append
(
item
.
unload_area_id
)
except
Exception
as
es
:
logger
.
error
(
"电铲和卸载区的映射关系更新异常"
)
logger
.
error
(
es
)
# update unload_area_id -> rate
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
all
():
cls
.
unload_rate_dict
[
item
.
unload_area_id
]
=
item
.
rate
except
Exception
as
es
:
logger
.
error
(
"卸载区和比例值关系更新异常"
)
logger
.
error
(
es
)
# update excavator_id <-> group_id && unload_area_id <-> group_id && truck_id <-> group_id
try
:
for
item
in
session_mysql
.
query
(
DispatchSetting
)
.
all
():
...
...
@@ -370,6 +422,18 @@ class DispatchInfo:
session_mysql
.
rollback
()
return
park_matrix
@classmethod
def
get_truck_exactor
(
cls
,
truck_id
):
return
cls
.
truck_exactor_dict
[
truck_id
]
@classmethod
def
get_exactor_truck_nums
(
cls
,
exactor_id
):
return
len
(
cls
.
exactor_truck_dict
[
exactor_id
])
@classmethod
def
get_exactor_unload_match
(
cls
,
exactor_id
):
return
cls
.
exactor_unload_dict
[
exactor_id
]
# #!E:\Pycharm Projects\Waytous
# # -*- coding: utf-8 -*-
...
...
tables.py
View file @
8d18fe04
...
...
@@ -350,12 +350,14 @@ class DispatchSetting(Base):
truck_id
=
Column
(
VARCHAR
(
36
))
team_id
=
Column
(
VARCHAR
(
36
))
isdeleted
=
Column
(
BOOLEAN
)
rate
=
Column
(
Integer
)
proportion_id
=
Column
(
VARCHAR
(
36
))
def
__init__
(
self
,
id
,
mode_name
,
mode_code
,
group_name
,
group_id
,
group_code
,
group_type
,
load_area_id
,
exactor_id
,
unload_area_id
,
dump_id
,
isauto
,
truck_id
,
remark
,
proportion_id
):
def
__init__
(
self
,
id
,
mode_name
,
mode_code
,
group_name
,
group_id
,
group_code
,
group_type
,
load_area_id
,
exactor_id
,
unload_area_id
,
dump_id
,
isauto
,
truck_id
,
remark
,
proportion_id
,
rate
):
self
.
id
=
id
self
.
mode_name
self
.
mode_code
self
.
mode_name
=
mode_name
self
.
mode_code
=
mode_code
self
.
group_name
=
group_name
self
.
group_id
=
group_id
self
.
group_code
=
group_code
...
...
@@ -368,6 +370,7 @@ class DispatchSetting(Base):
self
.
truck_id
=
truck_id
self
.
proportion_id
=
proportion_id
self
.
remark
=
remark
self
.
rate
=
rate
class
WalkTimePark
(
Base
):
...
...
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