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
b95e895f
Commit
b95e895f
authored
Nov 11, 2021
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
代码优化
parent
de8e769f
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
581 additions
and
348 deletions
+581
-348
excavator.py
equipment/excavator.py
+11
-8
truck.py
equipment/truck.py
+134
-50
para_config.py
para_config.py
+21
-3
path_plannner.py
path_plan/path_plannner.py
+13
-0
priority_control.py
path_plan/priority_control.py
+26
-8
realtime_dispatch.py
realtime_dispatch.py
+339
-274
static_data_process.py
static_data_process.py
+10
-0
traffic_flow_info.py
traffic_flow/traffic_flow_info.py
+10
-0
traffic_flow_planner.py
traffic_flow/traffic_flow_planner.py
+17
-5
No files found.
equipment/excavator.py
View file @
b95e895f
...
...
@@ -16,9 +16,9 @@ class ExcavatorInfo(WalkManage):
# # 挖机集合
# self.dynamic_excavator_set = set(update_autodisp_excavator())
# 装载设备数量
self
.
dynamic_excavator_num
=
len
(
dynamic_excavator_set
)
self
.
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
# 用于动态调度的卸载设备集合
self
.
dynamic_excavator_set
=
[]
self
.
dynamic_excavator_set
=
get_value
(
"dynamic_excavator_set"
)
# 开始时间
self
.
start_time
=
datetime
.
now
()
# 装载时间
...
...
@@ -141,7 +141,7 @@ class ExcavatorInfo(WalkManage):
logger
.
info
(
"dynamic_excavator_set"
)
logger
.
info
(
self
.
dynamic_excavator_set
)
for
excavator_id
in
self
.
dynamic_excavator_set
:
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
)
:
item
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
)
.
first
()
logger
.
info
(
"excavator_priority_coefficient"
)
logger
.
info
(
self
.
excavator_priority_coefficient
)
...
...
@@ -194,14 +194,17 @@ class ExcavatorInfo(WalkManage):
logger
.
info
(
rule7
)
# 装载周期参数
self
.
period_map_para_
update
()
self
.
period_map_para_
load
()
self
.
period_walk_para_update
()
print
(
"truck.excavator_uuid_index_dict"
)
print
(
self
.
excavator_uuid_to_index_dict
)
# 用于动态调度的挖机设备
self
.
dynamic_excavator_set
=
set
(
update_autodisp_excavator
())
self
.
period_walk_para_load
()
self
.
dynamic_excavator_num
=
len
(
self
.
dynamic_excavator_set
)
# # 用于动态调度的挖机设备
# self.dynamic_excavator_set = set(update_autodisp_excavator())
#
# self.dynamic_excavator_num = len(self.dynamic_excavator_set)
# 计算平均装载时间
self
.
update_excavator_loadtime
()
...
...
equipment/truck.py
View file @
b95e895f
...
...
@@ -132,6 +132,12 @@ class TruckInfo(WalkManage):
self
.
truck_current_task
=
{}
device_name_set
=
redis2
.
keys
()
print
(
"tast_truck_set"
)
print
(
get_value
(
"dynamic_truck_set"
))
## 两个
print
(
self
.
dynamic_truck_set
)
print
(
self
.
truck_uuid_to_index_dict
)
for
item
in
device_name_set
:
try
:
item
=
item
.
decode
(
encoding
=
"utf-8"
)
...
...
@@ -150,6 +156,23 @@ class TruckInfo(WalkManage):
logger
.
info
(
"矿卡当前任务:"
)
logger
.
info
(
self
.
truck_current_task
)
# self.truck_current_task = {}
#
# dynamic_truck_set = get_value("dynamic_truck_set")
#
# for item in dynamic_truck_set:
# # try:
# # item = item.decode(encoding="utf-8")
# key_value_dict = redis2.hgetall(item) # reids str可以自动转为bytes
# currentTask = int(key_value_dict[str_to_byte("currentTask")])
# self.truck_current_task[item] = currentTask
# # except Exception as es:
# # logger.error("读取矿卡任务异常-reids读取异常")
# # logger.error(es)
#
# logger.info("矿卡当前任务:")
# logger.info(self.truck_current_task)
# 更新矿卡最后装载/卸载时间
def
update_truck_last_leave_time
(
self
):
self
.
last_load_time
=
{}
...
...
@@ -500,46 +523,51 @@ class TruckInfo(WalkManage):
def
update_truck_material
(
self
):
self
.
truck_material_bind
=
{}
self
.
update_truck_excavator_bind
()
self
.
update_truck_dump_area_bind
()
try
:
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)),
0
)
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_dump_num"
)),
0
)
self
.
truck_material_bind
=
{}
self
.
update_truck_excavator_bind
()
self
.
update_truck_dump_area_bind
()
for
truck_id
in
self
.
dynamic_truck_set
:
self
.
excavator_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_excavator_num"
)),
0
)
self
.
dump_material_bind_modify
=
np
.
full
((
self
.
dynamic_truck_num
,
get_value
(
"dynamic_dump_num"
)),
0
)
if
truck_id
in
self
.
truck_dump_bind
:
unload_area_id
=
self
.
truck_dump_bind
[
truck_id
]
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Material
self
.
truck_material_bind
[
truck_id
]
=
dump_material_id
for
truck_id
in
self
.
dynamic_truck_set
:
if
truck_id
in
self
.
truck_excavator_bind
:
excavator_id
=
self
.
truck_excavator_bind
[
truck_id
]
# print(self.excavator.excavator_material)
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
self
.
truck_material_bind
[
truck_id
]
=
excavator_material_id
if
truck_id
in
self
.
truck_dump_bind
:
unload_area_id
=
self
.
truck_dump_bind
[
truck_id
]
dump_material_id
=
session_postgre
.
query
(
DumpArea
)
.
filter_by
(
Id
=
unload_area_id
)
.
first
()
.
Material
self
.
truck_material_bind
[
truck_id
]
=
dump_material_id
for
truck_id
in
self
.
dynamic_truck_set
:
if
truck_id
in
self
.
truck_excavator_bind
:
excavator_id
=
self
.
truck_excavator_bind
[
truck_id
]
# print(self.excavator.excavator_material)
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
self
.
truck_material_bind
[
truck_id
]
=
excavator_material_id
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
for
truck_id
in
self
.
dynamic_truck_set
:
if
truck_id
in
self
.
truck_material_bind
:
truck_index
=
self
.
truck_uuid_to_index_dict
[
truck_id
]
material
=
self
.
truck_material_bind
[
truck_id
]
if
truck_id
in
self
.
truck_material_bind
:
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
):
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
excavator_index
=
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
print
(
truck_index
,
excavator_index
)
if
excavator_material_id
!=
material
:
self
.
excavator_material_bind_modify
[
truck_index
][
excavator_index
]
=
1000000
material
=
self
.
truck_material_bind
[
truck_id
]
for
excavator_id
in
get_value
(
"dynamic_excavator_set"
):
excavator_material_id
=
self
.
excavator
.
excavator_material
[
excavator_id
]
excavator_index
=
self
.
excavator_uuid_to_index_dict
[
excavator_id
]
print
(
truck_index
,
excavator_index
)
if
excavator_material_id
!=
material
:
self
.
excavator_material_bind_modify
[
truck_index
][
excavator_index
]
=
1000000
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
dump_material_id
=
self
.
dump
.
dump_material
[
dump_id
]
dump_index
=
self
.
dump_uuid_to_index_dict
[
dump_id
]
if
dump_material_id
!=
material
:
self
.
dump_material_bind_modify
[
truck_index
][
dump_index
]
=
1000000
for
dump_id
in
get_value
(
"dynamic_dump_set"
):
dump_material_id
=
self
.
dump
.
dump_material
[
dump_id
]
dump_index
=
self
.
dump_uuid_to_index_dict
[
dump_id
]
if
dump_material_id
!=
material
:
self
.
dump_material_bind_modify
[
truck_index
][
dump_index
]
=
1000000
except
Exception
as
es
:
logger
.
error
(
es
)
logger
.
error
(
"矿卡物料更新异常"
)
def
update_truck_spec
(
self
):
for
truck_id
in
self
.
dynamic_truck_set
:
...
...
@@ -621,6 +649,54 @@ class TruckInfo(WalkManage):
# 设备优先级启用
rule6
=
session_mysql
.
query
(
DispatchRule
)
.
filter_by
(
id
=
6
)
.
first
()
.
disabled
# logger.info("Para truck update!")
#
# # 装载周期参数
# self.period_map_para_load()
#
# self.period_walk_para_load()
#
# # 更新有效载重
# self.update_truck_payload()
#
# logger.info("距离成本规则")
# logger.info(rule1)
#
# logger.info("拥堵成本规则")
# logger.info(rule2)
#
# logger.info("车流规划规则")
# logger.info(rule3 or rule4)
#
# logger.info("生产组织规则")
# logger.info(rule5)
#
# logger.info("设备优先级规则")
# logger.info(rule6)
#
# if not rule5:
# # 更新绑定关系
# self.update_truck_dump_area_bind()
#
# self.update_truck_excavator_bind()
#
# # 更新禁止关系
# self.update_truck_excavator_exclude()
#
# if not rule6:
# # 更新矿卡调度优先级
# self.update_truck_priority()
#
# # # 更新矿卡group
# # self.update_truck_group()
#
# # 更新矿卡物料类型
# self.update_truck_material()
# 物料优先级启用
rule7
=
session_mysql
.
query
(
DispatchRule
)
.
filter_by
(
id
=
7
)
.
first
()
.
disabled
logger
.
info
(
"Para truck update!"
)
# 装载周期参数
...
...
@@ -631,39 +707,47 @@ class TruckInfo(WalkManage):
# 更新有效载重
self
.
update_truck_payload
()
logger
.
info
(
"距离成本规则"
)
logger
.
info
(
rule1
)
logger
.
info
(
"拥堵成本规则"
)
logger
.
info
(
rule2
)
if
rule1
:
logger
.
info
(
"距离成本规则未启用"
)
else
:
logger
.
info
(
"距离成本规则启用"
)
logger
.
info
(
"车流规划规则"
)
logger
.
info
(
rule3
or
rule4
)
if
rule2
:
logger
.
info
(
"拥堵成本规则未启用"
)
else
:
logger
.
info
(
"拥堵成本规则启用"
)
logger
.
info
(
"生产组织规则"
)
logger
.
info
(
rule5
)
if
rule3
or
rule4
:
logger
.
info
(
"车流规划规则未启用"
)
else
:
logger
.
info
(
"车流规划规则启用"
)
logger
.
info
(
"设备优先级规则"
)
logger
.
info
(
rule6
)
if
not
rule5
:
if
rule5
:
logger
.
info
(
"生产组织规则未启用"
)
else
:
# 更新绑定关系
self
.
update_truck_dump_area_bind
()
self
.
update_truck_excavator_bind
()
# 更新禁止关系
self
.
update_truck_excavator_exclude
()
logger
.
info
(
"生产组织规划规则启用"
)
if
not
rule6
:
if
rule6
:
logger
.
info
(
"设备优先级规则未启用"
)
else
:
# 更新矿卡调度优先级
self
.
update_truck_priority
()
logger
.
info
(
"设备优先级规则启用"
)
if
rule7
:
logger
.
info
(
"物料优先级规则未启用"
)
else
:
# 更新矿卡物料类型
self
.
update_truck_material
()
logger
.
info
(
"物料优先级规则启用"
)
# # 更新矿卡group
# self.update_truck_group()
# 更新矿卡物料类型
self
.
update_truck_material
()
def
state_period_update
(
self
):
...
...
para_config.py
View file @
b95e895f
...
...
@@ -174,6 +174,10 @@ class DeviceMap:
self
.
excavator_uuid_to_index_dict
=
device_map_dict
[
"excavator_uuid_to_index_dict"
]
print
(
"device.dump_uuid_to_index_dict"
)
print
(
self
.
dump_uuid_to_index_dict
)
self
.
dump_uuid_to_index_dict
=
device_map_dict
[
"dump_uuid_to_index_dict"
]
self
.
excavator_index_to_uuid_dict
=
device_map_dict
[
"excavator_index_to_uuid_dict"
...
...
@@ -286,9 +290,9 @@ class WalkManage(DeviceMap):
def
reset
(
self
):
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
dynamic_dump_num
=
get_value
(
"dynamic_dump_num"
)
park_num
=
get_value
(
"park_num"
)
# dynamic_excavator_num
# dynamic_dump_num
# park_num
# 路网真实距离
self
.
walk_time_to_excavator
=
np
.
full
(
...
...
@@ -492,6 +496,15 @@ def period_para_update():
global_dict
[
"dynamic_dump_num"
]
=
dynamic_dump_num
global_dict
[
"park_num"
]
=
park_num
print
(
"walk_manage.distance_to_excavator"
)
print
(
dynamic_dump_num
,
dynamic_excavator_num
)
print
(
walk_manage
.
distance_to_excavator
)
print
(
"walk_manage.excavator_dict"
)
print
(
walk_manage
.
excavator_uuid_to_index_dict
)
print
(
"walk_manage.dump_dict"
)
print
(
walk_manage
.
dump_uuid_to_index_dict
)
global_dict
[
"distance_to_excavator"
]
=
walk_manage
.
distance_to_excavator
global_dict
[
"distance_park_to_excavator"
]
=
walk_manage
.
distance_park_to_excavator
global_dict
[
"distance_to_dump"
]
=
walk_manage
.
distance_to_dump
...
...
@@ -509,3 +522,8 @@ def period_para_update():
logger
.
info
(
walk_manage
.
dump_uuid_to_index_dict
)
logger
.
info
(
"walk_manage.distance_park_to_excavator"
)
logger
.
info
(
walk_manage
.
distance_park_to_excavator
)
logger
.
info
(
"walk_manage.truck_index_to_uuid_dict"
)
logger
.
info
(
walk_manage
.
truck_index_to_uuid_dict
)
logger
.
info
(
"walk_manage.dynamic_truck_set"
)
logger
.
info
(
dynamic_truck_set
)
path_plan/path_plannner.py
View file @
b95e895f
...
...
@@ -145,10 +145,20 @@ class PathPlanner(WalkManage):
def
walk_cost
(
self
):
self
.
excavator
.
para_period_update
()
self
.
dump
.
para_period_update
()
self
.
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
)
# 计算行驶成本前,更新路网速度信息
self
.
lane
.
lane_speed_generate
()
...
...
@@ -173,6 +183,8 @@ class PathPlanner(WalkManage):
logger
.
error
(
es
)
cost_to_excavator
=
np
.
zeros_like
(
get_value
(
"distance_to_excavator"
))
print
(
"distance_to_excavator"
)
print
(
cost_to_excavator
)
cost_to_dump
=
np
.
zeros_like
(
get_value
(
"distance_to_dump"
))
cost_park_to_excavator
=
np
.
zeros_like
(
get_value
(
"distance_park_to_excavator"
))
...
...
@@ -203,6 +215,7 @@ class PathPlanner(WalkManage):
unload_area_index
=
self
.
dump_index_to_unload_area_index_dict
[
i
]
logger
.
info
(
"cost_to_excavator"
)
logger
.
info
(
cost_to_excavator
)
print
(
i
,
j
)
cost_to_excavator
[
i
][
j
]
=
self
.
cost_to_load_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
+
group_walk_available
[
i
][
j
]
cost_to_dump
[
i
][
j
]
=
self
.
cost_to_unload_area
[
unload_area_index
][
load_area_index
]
/
walk_weight
[
i
][
j
]
+
walk_available
[
i
][
j
]
+
group_walk_available
[
i
][
j
]
...
...
path_plan/priority_control.py
View file @
b95e895f
...
...
@@ -20,6 +20,12 @@ class PriorityController():
self
.
excavator
=
excavator
self
.
truck
=
truck
def
period_update
(
self
,
dump
,
excavator
,
truck
):
# 设备类
self
.
dump
=
dump
self
.
excavator
=
excavator
self
.
truck
=
truck
def
weighted_walk_cost
(
self
):
dynamic_dump_num
=
get_value
(
"dynamic_dump_num"
)
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
...
...
@@ -54,9 +60,13 @@ class PriorityController():
excavator_material_priority
[
excavator_inedx
]
park_walk_weight
=
park_walk_weight
*
self
.
excavator
.
excavator_material_priority
walk_weight
=
walk_weight
-
(
walk_weight
.
min
()
-
1
)
try
:
walk_weight
=
walk_weight
-
(
walk_weight
.
min
()
-
1
)
park_walk_weight
=
park_walk_weight
-
(
park_walk_weight
.
min
()
-
1
)
park_walk_weight
=
park_walk_weight
-
(
park_walk_weight
.
min
()
-
1
)
except
Exception
as
es
:
logger
.
errro
(
es
)
logger
.
error
(
"数值异常"
)
return
walk_weight
,
park_walk_weight
...
...
@@ -67,12 +77,20 @@ class PriorityController():
dynamic_excavator_set
=
get_value
(
"dynamic_excavator_set"
)
walk_weight
=
np
.
zeros
((
dynamic_dump_num
,
dynamic_excavator_num
))
for
dump_id
in
dynamic_dump_set
:
for
excavator_id
in
dynamic_excavator_set
:
dump_index
=
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]
excavator_inedx
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]
if
self
.
excavator
.
excavator_material
[
excavator_id
]
!=
self
.
dump
.
dump_material
[
dump_id
]:
walk_weight
[
dump_index
][
excavator_inedx
]
+=
1000000
print
(
"here"
)
print
(
dynamic_dump_set
)
try
:
for
dump_id
in
dynamic_dump_set
:
for
excavator_id
in
dynamic_excavator_set
:
dump_index
=
self
.
dump
.
dump_uuid_to_index_dict
[
dump_id
]
excavator_inedx
=
self
.
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]
if
self
.
excavator
.
excavator_material
[
excavator_id
]
!=
self
.
dump
.
dump_material
[
dump_id
]:
walk_weight
[
dump_index
][
excavator_inedx
]
+=
1000000
except
Exception
as
es
:
logger
.
info
(
es
)
logger
.
info
(
"error-12"
)
return
walk_weight
...
...
realtime_dispatch.py
View file @
b95e895f
...
...
@@ -226,8 +226,9 @@ class Dispatcher(WalkManage):
truck_current_trip
=
truck
.
get_truck_current_trip
()
payload
=
truck
.
get_payload
()
dynamic_dump_num
=
dump
.
get_dump_num
()
dynamic_excavator_num
=
excavator
.
get_excavator_num
()
dynamic_dump_num
=
get_value
(
"dynamic_dump_num"
)
dynamic_excavator_num
=
get_value
(
"dynamic_excavator_num"
)
dynamic_truck_num
=
get_value
(
"dynamic_truck_num"
)
self
.
goto_dump_truck_num
=
np
.
zeros
((
dynamic_excavator_num
,
dynamic_dump_num
))
self
.
actual_goto_dump_traffic_flow
=
np
.
zeros
(
...
...
@@ -241,6 +242,14 @@ class Dispatcher(WalkManage):
)
# try:
logger
.
info
(
"dynamic_truck_num"
)
logger
.
info
(
dynamic_truck_num
)
print
(
"truck.truck_index_to_uuid_dict"
)
print
(
truck
.
truck_index_to_uuid_dict
)
print
(
"truck_current_task"
)
print
(
truck_current_task
)
for
i
in
range
(
dynamic_truck_num
):
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
i
]]
...
...
@@ -351,12 +360,7 @@ class Dispatcher(WalkManage):
logger
.
info
(
"驶往挖机实际车流"
)
logger
.
info
(
self
.
actual_goto_excavator_traffic_flow
)
def
para_period_update
(
self
):
logger
.
info
(
"#####################################周期更新开始#####################################"
)
# 调度分组更新
self
.
group
.
period_update
()
def
dispatcher_period_update
(
self
):
# 装载映射参数及
self
.
period_map_para_load
()
...
...
@@ -372,11 +376,13 @@ class Dispatcher(WalkManage):
# 更新矿卡对象
truck
.
para_period_update
(
dump
,
excavator
)
def
state_period_update
(
self
):
# try:
truck
.
state_period_update
()
print
(
"test_truck"
)
print
(
truck
.
dynamic_truck_set
)
print
(
truck
.
truck_current_task
)
print
(
truck
.
truck_uuid_to_index_dict
)
# 更新实时车流
self
.
update_actual_traffic_flow
()
...
...
@@ -394,9 +400,8 @@ class Dispatcher(WalkManage):
self
.
cost_to_excavator
,
self
.
cost_to_dump
,
self
.
cost_park_to_excavator
=
self
.
path
.
walk_cost
()
# except Exception as es:
# logger.error("周期更新异常")
# logger.error(es)
# 调度分组更新
self
.
group
.
period_update
()
def
sim_para_reset
(
self
):
...
...
@@ -805,184 +810,183 @@ class Dispatcher(WalkManage):
print
(
"self.cur_truck_ava_time"
,
self
.
cur_truck_ava_time
)
# try:
# 读取所需信息
trucks
=
truck
.
get_truck_num
()
truck_current_trip
=
truck
.
get_truck_current_trip
()
truck_current_task
=
truck
.
get_truck_current_task
()
payload
=
truck
.
get_payload
()
unloading_time
=
dump
.
get_unloading_time
()
loading_time
=
excavator
.
get_loading_time
()
# 出入场时间
loading_task_time
=
excavator
.
get_loading_task_time
()
unloading_task_time
=
dump
.
get_unloading_task_time
()
walk_time_to_unload_area
=
walk_manage
.
get_walk_time_to_unload_area
()
walk_time_to_load_area
=
walk_manage
.
get_walk_time_to_load_area
()
# Seq初始化
Seq
=
[[
truck_current_trip
[
i
][
1
],
-
1
]
for
i
in
range
(
trucks
)]
# 根据矿卡最早可用时间顺序进行规划
print
(
self
.
cur_truck_ava_time
)
print
(
truck
.
truck_priority
)
temp
=
copy
.
deepcopy
(
self
.
cur_truck_ava_time
)
-
truck
.
truck_priority
try
:
# 没有启动的矿卡加上一个很大的值,降低其优先级
for
i
in
range
(
trucks
):
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
i
]]
if
task
==
-
2
:
temp
[
i
]
=
temp
[
i
]
+
M
except
Exception
as
es
:
logger
.
error
(
"矿卡排序启动异常"
)
logger
.
error
(
es
)
index
=
np
.
argsort
(
temp
.
reshape
(
1
,
-
1
))
index
=
index
.
flatten
()
# 对于在线矿卡已经赋予新的派车计划,更新其最早可用时间,及相关设备时间参数
for
truck_index
in
index
:
if
len
(
Seq
[
truck_index
])
>
0
:
# try:
# 获取矿卡id
truck_id
=
truck
.
truck_index_to_uuid_dict
[
truck_index
]
# 读取所需信息
dynamic_truck_num
=
get_value
(
"dynamic_truck_num"
)
truck_current_trip
=
truck
.
get_truck_current_trip
()
truck_current_task
=
truck
.
get_truck_current_task
()
payload
=
truck
.
get_payload
()
unloading_time
=
dump
.
get_unloading_time
()
loading_time
=
excavator
.
get_loading_time
()
# 判断矿卡是否禁用
if
truck_id
in
truck
.
update_truck_disable_list
():
continue
# 出入场时间
loading_task_time
=
excavator
.
get_loading_task_time
()
unloading_task_time
=
dump
.
get_unloading_task_time
()
# 获取矿卡当前任务
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
truck_index
]]
walk_time_to_unload_area
=
walk_manage
.
get_walk_time_to_unload_area
()
walk_time_to_load_area
=
walk_manage
.
get_walk_time_to_load_area
()
# 矿卡结束当前派车计划后的目的地
end_eq_index
=
truck_current_trip
[
truck_index
][
1
]
# Seq初始化
Seq
=
[[
truck_current_trip
[
i
][
1
],
-
1
]
for
i
in
range
(
dynamic_truck_num
)
]
# 调用调度函数,得到最优目的地序号
target_eq_index
=
self
.
truck_schedule
(
truck
.
truck_index_to_uuid_dict
[
truck_index
])
# 根据矿卡最早可用时间顺序进行规划
print
(
self
.
cur_truck_ava_time
)
print
(
truck
.
truck_priority
)
temp
=
copy
.
deepcopy
(
self
.
cur_truck_ava_time
)
-
truck
.
truck_priority
# 写入Seq序列
Seq
[
truck_index
][
1
]
=
target_eq_index
try
:
# 没有启动的矿卡加上一个很大的值,降低其优先级
for
i
in
range
(
dynamic_truck_num
):
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
i
]]
if
task
==
-
2
:
temp
[
i
]
=
temp
[
i
]
+
M
except
Exception
as
es
:
logger
.
error
(
"矿卡排序启动异常"
)
logger
.
error
(
es
)
index
=
np
.
argsort
(
temp
.
reshape
(
1
,
-
1
))
index
=
index
.
flatten
()
# 对于在线矿卡已经赋予新的派车计划,更新其最早可用时间,及相关设备时间参数
for
truck_index
in
index
:
if
len
(
Seq
[
truck_index
])
>
0
:
try
:
# 获取矿卡id
truck_id
=
truck
.
truck_index_to_uuid_dict
[
truck_index
]
# 判断矿卡是否禁用
if
truck_id
in
truck
.
update_truck_disable_list
():
continue
# 获取矿卡当前任务
task
=
truck_current_task
[
truck
.
truck_index_to_uuid_dict
[
truck_index
]]
# 矿卡结束当前派车计划后的目的地
end_eq_index
=
truck_current_trip
[
truck_index
][
1
]
# 调用调度函数,得到最优目的地序号
target_eq_index
=
self
.
truck_schedule
(
truck
.
truck_index_to_uuid_dict
[
truck_index
])
# 写入Seq序列
Seq
[
truck_index
][
1
]
=
target_eq_index
try
:
group_id
=
self
.
group
.
dispatch_truck_group
[
truck_id
]
except
Exception
as
es
:
logger
.
error
(
"非动态调度矿卡"
)
logger
.
error
(
es
)
except
Exception
as
es
:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck_index]]} 派车计划计算异常')
logger
.
error
(
f
'矿卡派车计划计算异常'
)
logger
.
error
(
es
)
try
:
if
task
in
empty_task_set
:
target_area_index
=
dump
.
dump_index_to_unload_area_index_dict
[
target_eq_index
]
end_area_index
=
excavator
.
excavator_index_to_load_area_index_dict
[
end_eq_index
]
# 更新变量,预计产量更新
self
.
sim_dump_real_mass
[
target_eq_index
]
=
\
(
self
.
sim_dump_real_mass
[
target_eq_index
]
+
payload
[
truck_index
])
# 预计卸载设备可用时间更新
self
.
sim_dump_ava_time
[
target_eq_index
]
=
(
max
(
self
.
sim_dump_ava_time
[
target_eq_index
],
self
.
sim_truck_ava_time
[
truck_index
]
+
\
walk_time_to_unload_area
[
target_area_index
][
end_area_index
],)
+
unloading_task_time
[
target_eq_index
]
)
elif
task
in
heavy_task_set
:
target_area_index
=
(
excavator
.
excavator_index_to_load_area_index_dict
[
target_eq_index
])
end_area_index
=
dump
.
dump_index_to_unload_area_index_dict
[
end_eq_index
]
# 更新变量,预计产量更新
self
.
sim_excavator_real_mass
[
target_eq_index
]
=
(
self
.
sim_excavator_real_mass
[
target_eq_index
]
+
payload
[
truck_index
])
# 预计装载点可用时间更新
self
.
sim_excavator_ava_time
[
target_eq_index
]
=
(
max
(
self
.
sim_excavator_ava_time
[
target_eq_index
],
self
.
sim_truck_ava_time
[
truck_index
]
+
walk_time_to_unload_area
[
end_area_index
][
target_area_index
],)
\
+
loading_task_time
[
target_eq_index
])
else
:
pass
except
Exception
as
es
:
logger
.
error
(
f
"矿卡 {truck_uuid_to_name_dict[truck.truck_index_to_uuid_dict[truck_index]]} 调度状态更新异常"
)
logger
.
error
(
es
)
for
i
in
range
(
len
(
Seq
)):
try
:
group_id
=
self
.
group
.
dispatch_truck_group
[
truck_id
]
except
Exception
as
es
:
logger
.
error
(
"非动态调度矿卡"
)
logger
.
error
(
es
)
# except Exception as es:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck_index]]} 派车计划计算异常')
# logger.error(es)
try
:
truck_id
=
truck
.
truck_index_to_uuid_dict
[
i
]
group_id
=
self
.
group
.
dispatch_truck_group
[
truck_id
]
record
=
{
"truckId"
:
truck
.
truck_index_to_uuid_dict
[
i
]}
task
=
truck
.
get_truck_current_task
()[
truck
.
truck_index_to_uuid_dict
[
i
]]
if
task
in
empty_task_set
:
target_area_index
=
dump
.
dump_index_to_unload_area_index_dict
[
target_eq_index
]
end_area_index
=
excavator
.
excavator_index_to_load_area_index_dict
[
end_eq_index
]
# 更新变量,预计产量更新
self
.
sim_dump_real_mass
[
target_eq_index
]
=
\
(
self
.
sim_dump_real_mass
[
target_eq_index
]
+
payload
[
truck_index
])
# 预计卸载设备可用时间更新
self
.
sim_dump_ava_time
[
target_eq_index
]
=
(
max
(
self
.
sim_dump_ava_time
[
target_eq_index
],
self
.
sim_truck_ava_time
[
truck_index
]
+
\
walk_time_to_unload_area
[
target_area_index
][
end_area_index
],)
+
unloading_task_time
[
target_eq_index
]
)
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
dump_id
=
dump
.
dump_index_to_uuid_dict
[
Seq
[
i
][
1
]],
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
item
.
exactor_id
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
elif
task
in
heavy_task_set
:
target_area_index
=
(
excavator
.
excavator_index_to_load_area_index_dict
[
target_eq_index
])
end_area_index
=
dump
.
dump_index_to_unload_area_index_dict
[
end_eq_index
]
# 更新变量,预计产量更新
self
.
sim_excavator_real_mass
[
target_eq_index
]
=
(
self
.
sim_excavator_real_mass
[
target_eq_index
]
+
payload
[
truck_index
])
# 预计装载点可用时间更新
self
.
sim_excavator_ava_time
[
target_eq_index
]
=
(
max
(
self
.
sim_excavator_ava_time
[
target_eq_index
],
self
.
sim_truck_ava_time
[
truck_index
]
+
walk_time_to_unload_area
[
end_area_index
][
target_area_index
],)
\
+
loading_task_time
[
target_eq_index
])
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
dump_id
=
dump
.
dump_index_to_unload_area_index_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]]
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
elif
task
==
-
2
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
item
.
exactor_id
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
else
:
pass
redis5
.
set
(
truck
.
truck_index_to_uuid_dict
[
i
],
str
(
json
.
dumps
(
record
)))
except
Exception
as
es
:
logger
.
error
(
f
"矿卡 {truck_uuid_to_name_dict[truck.truck_index_to_uuid_dict[truck_index]]} 调度状态更新异常"
)
logger
.
error
(
"调度结果写入异常-redis写入异常"
)
logger
.
error
(
f
"调度结果:{Seq}"
)
logger
.
error
(
es
)
for
i
in
range
(
len
(
Seq
)):
# try:
truck_id
=
truck
.
truck_index_to_uuid_dict
[
i
]
group_id
=
self
.
group
.
dispatch_truck_group
[
truck_id
]
record
=
{
"truckId"
:
truck
.
truck_index_to_uuid_dict
[
i
]}
task
=
truck
.
get_truck_current_task
()[
truck
.
truck_index_to_uuid_dict
[
i
]]
if
task
in
empty_task_set
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
dump_id
=
dump
.
dump_index_to_uuid_dict
[
Seq
[
i
][
1
]],
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
item
.
exactor_id
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
elif
task
in
heavy_task_set
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
dump_id
=
dump
.
dump_index_to_unload_area_index_dict
[
Seq
[
i
][
0
]],
truck_id
=
truck_id
,
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]]
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
elif
task
==
-
2
:
item
=
(
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
exactor_id
=
excavator
.
excavator_index_to_uuid_dict
[
Seq
[
i
][
1
]],
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
,)
.
first
())
record
[
"exactorId"
]
=
item
.
exactor_id
record
[
"dumpId"
]
=
item
.
dump_id
record
[
"loadAreaId"
]
=
item
.
load_area_id
record
[
"unloadAreaId"
]
=
item
.
unload_area_id
record
[
"dispatchId"
]
=
item
.
id
record
[
"isdeleted"
]
=
False
record
[
"creator"
]
=
item
.
creator
record
[
"createtime"
]
=
item
.
createtime
.
strftime
(
"
%
b
%
d,
%
Y
%
I:
%
M:
%
S
%
p"
)
else
:
pass
redis5
.
set
(
truck
.
truck_index_to_uuid_dict
[
i
],
str
(
json
.
dumps
(
record
)))
# except Exception as es:
# logger.error("调度结果写入异常-redis写入异常")
# logger.error(f"调度结果:{Seq}")
# logger.error(es)
for
i
in
range
(
trucks
):
print
(
"dispatch_setting:"
)
print
(
redis5
.
get
(
truck
.
truck_index_to_uuid_dict
[
i
]))
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger
.
info
(
"#####################################周期更新结束#####################################"
)
for
i
in
range
(
dynamic_truck_num
):
print
(
"dispatch_setting:"
)
print
(
redis5
.
get
(
truck
.
truck_index_to_uuid_dict
[
i
]))
except
Exception
as
es
:
logger
.
error
(
"更新不及时-1"
)
logger
.
error
(
es
)
return
Seq
...
...
@@ -1017,16 +1021,22 @@ class Group(WalkManage):
# 更新矿卡-调度分组隶属关系
self
.
dispatch_truck_group
=
{}
dynamic_truck_set
=
get_value
(
"dynamic_truck_set"
)
print
(
"dispatch_truck_group-dynamic_truck_set"
)
print
(
dynamic_truck_set
)
# 动态派车数量没变,但是此时某条派车计划被删除,dispatch_truck_group 就会缺失矿卡
for
truck_id
in
dynamic_truck_set
:
item
=
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
truck_id
=
truck_id
,
isauto
=
1
,
isdeleted
=
0
)
.
first
()
if
item
is
None
:
print
(
truck_id
)
continue
self
.
dispatch_truck_group
[
truck_id
]
=
item
.
group_id
print
(
self
.
dispatch_truck_group
)
def
update_group_set
(
self
):
# 更新调度组
self
.
group_set
=
set
()
for
item
in
session_mysql
.
query
(
Dispatch
)
.
all
():
for
item
in
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
isauto
=
1
,
isdeleted
=
0
)
.
all
():
if
item
.
group_id
is
not
None
:
self
.
group_set
.
add
(
item
.
group_id
)
self
.
group_num
=
len
(
self
.
group_set
)
...
...
@@ -1035,7 +1045,10 @@ class Group(WalkManage):
# 更新设备分组group_id -> {set(dump_id), set(excavator_id)}
self
.
device_group
=
{}
for
group_id
in
self
.
get_group_set
():
self
.
device_group
[
group_id
]
=
[
set
(),
set
()]
if
group_id
not
in
self
.
device_group
:
self
.
device_group
[
group_id
]
=
[
set
(),
set
()]
else
:
continue
for
item
in
session_mysql
.
query
(
Dispatch
)
.
filter_by
(
group_id
=
group_id
,
isauto
=
1
,
isdeleted
=
0
)
.
all
():
self
.
device_group
[
group_id
][
0
]
.
add
(
item
.
dump_id
)
self
.
device_group
[
group_id
][
1
]
.
add
(
item
.
exactor_id
)
...
...
@@ -1053,9 +1066,15 @@ class Group(WalkManage):
# try:
print
(
"uuid_to_index_dict"
)
print
(
dump
.
dump_uuid_to_index_dict
)
print
(
excavator
.
excavator_uuid_to_index_dict
)
for
group_id
in
self
.
group_set
:
dump_group
=
self
.
device_group
[
group_id
][
0
]
excavator_group
=
self
.
device_group
[
group_id
][
1
]
print
(
"group"
)
print
(
self
.
device_group
)
local_opt_goto_dump_traffic_flow
=
np
.
zeros
((
len
(
excavator_group
),
len
(
dump_group
)))
local_opt_goto_excavator_traffic_flow
=
np
.
zeros
((
len
(
dump_group
),
len
(
excavator_group
)))
local_actual_goto_dump_traffic_flow
=
np
.
zeros
((
len
(
excavator_group
),
len
(
dump_group
)))
...
...
@@ -1065,7 +1084,7 @@ 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
[
dump
.
excavator_uuid_to_index_dict
[
excavator_id
]][
dump
.
dump_uuid_to_index_dict
[
dump_id
]]
opt_goto_dump_traffic_flow
[
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]][
dump
.
dump_uuid_to_index_dict
[
dump_id
]]
local_opt_goto_excavator_traffic_flow
[
dump_group_index
][
excavator_group_index
]
=
\
opt_goto_excavator_traffic_flow
[
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
...
...
@@ -1094,35 +1113,38 @@ class Group(WalkManage):
walk_to_excavator_cost
,
walk_to_dump_cost
,
park_to_excavator_cost
=
self
.
path
.
walk_cost
()
# try:
for
group_id
in
self
.
group_set
:
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_park_to_excavator_cost
=
np
.
zeros
((
park_num
,
len
(
excavator_group
)))
for
excavator_id
in
excavator_group
:
for
dump_id
in
dump_group
:
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_walk_to_excavator_cost
[
dump_group_index
][
excavator_group_index
]
=
\
walk_to_excavator_cost
[
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
local_walk_to_dump_cost
[
dump_group_index
][
excavator_group_index
]
=
\
walk_to_dump_cost
[
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
try
:
for
park_index
in
range
(
park_num
):
for
group_id
in
self
.
group_set
:
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_park_to_excavator_cost
=
np
.
zeros
((
park_num
,
len
(
excavator_group
)))
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
][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
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
self
.
group_park_to_excavator
[
group_id
]
=
local_park_to_excavator_cost
# except Exception as es:
# logger.info(es)
for
dump_id
in
dump_group
:
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
]
print
(
"dump_group"
)
print
(
dump_group
)
local_walk_to_excavator_cost
[
dump_group_index
][
excavator_group_index
]
=
\
walk_to_excavator_cost
[
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
local_walk_to_dump_cost
[
dump_group_index
][
excavator_group_index
]
=
\
walk_to_dump_cost
[
dump
.
dump_uuid_to_index_dict
[
dump_id
]][
excavator
.
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
][
excavator
.
excavator_uuid_to_index_dict
[
excavator_id
]]
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
self
.
group_park_to_excavator
[
group_id
]
=
local_park_to_excavator_cost
except
Exception
as
es
:
logger
.
info
(
es
)
logger
.
info
(
"error-11"
)
def
update_group_device_map
(
self
):
# 更新调度分组内设备映射
...
...
@@ -1162,35 +1184,48 @@ class Group(WalkManage):
logger
.
info
(
self
.
group_excavator_uuid_to_index_dict
)
def
update_modify
(
self
):
self
.
group_excavator_exclude_modify
=
{}
self
.
group_excavator_material_bind_modify
=
{}
self
.
group_dump_material_bind_modify
=
{}
for
truck_id
in
dynamic_truck_set
:
group_id
=
self
.
dispatch_truck_group
[
truck_id
]
group_dump_num
=
len
(
self
.
device_group
[
group_id
][
0
])
group_excavator_num
=
len
(
self
.
device_group
[
group_id
][
1
])
excavator_exclude_modify
=
np
.
zeros
(
group_excavator_num
)
excavator_material_bind_modify
=
np
.
zeros
(
group_excavator_num
)
dump_material_bind_modify
=
np
.
zeros
(
group_dump_num
)
try
:
dynamic_truck_set
=
get_value
(
"dynamic_truck_set"
)
print
(
"update_modify"
)
print
(
dynamic_truck_set
)
truck_index
=
truck
.
truck_uuid_to_index_dict
[
truck_id
]
print
(
"self.dispatch_truck_group"
)
print
(
self
.
dispatch_truck_group
)
for
group_excavator_index
in
range
(
group_excavator_num
):
excavator_index
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group_excavator_index_to_uuid_dict
[
group_id
][
group_excavator_index
]]
excavator_exclude_modify
[
group_excavator_index
]
=
truck
.
excavator_exclude_modify
[
truck_index
][
excavator_index
]
self
.
group_excavator_exclude_modify
=
{}
self
.
group_excavator_material_bind_modify
=
{}
self
.
group_dump_material_bind_modify
=
{}
for
truck_id
in
dynamic_truck_set
:
group_id
=
self
.
dispatch_truck_group
[
truck_id
]
group_dump_num
=
len
(
self
.
device_group
[
group_id
][
0
])
group_excavator_num
=
len
(
self
.
device_group
[
group_id
][
1
])
excavator_exclude_modify
=
np
.
zeros
(
group_excavator_num
)
excavator_material_bind_modify
=
np
.
zeros
(
group_excavator_num
)
dump_material_bind_modify
=
np
.
zeros
(
group_dump_num
)
for
group_excavator_index
in
range
(
group_excavator_num
):
excavator_index
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group_excavator_index_to_uuid_dict
[
group_id
][
group_excavator_index
]]
excavator_material_bind_modify
[
group_excavator_index
]
=
truck
.
excavator_material_bind_modify
[
truck_index
][
excavator_index
]
truck_index
=
truck
.
truck_uuid_to_index_dict
[
truck_id
]
for
group_dump_index
in
range
(
group_dump
_num
):
dump_index
=
dump
.
dump_uuid_to_index_dict
[
self
.
group_dump_index_to_uuid_dict
[
group_id
][
group_dump
_index
]]
dump_material_bind_modify
[
group_dump_index
]
=
truck
.
dump_material_bind_modify
[
truck_index
][
dump
_index
]
for
group_excavator_index
in
range
(
group_excavator
_num
):
excavator_index
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group_excavator_index_to_uuid_dict
[
group_id
][
group_excavator
_index
]]
excavator_exclude_modify
[
group_excavator_index
]
=
truck
.
excavator_exclude_modify
[
truck_index
][
excavator
_index
]
self
.
group_excavator_exclude_modify
[
truck_id
]
=
excavator_exclude_modify
self
.
group_excavator_material_bind_modify
[
truck_id
]
=
excavator_material_bind_modify
self
.
group_dump_material_bind_modify
[
truck_id
]
=
dump_material_bind_modify
for
group_excavator_index
in
range
(
group_excavator_num
):
excavator_index
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group_excavator_index_to_uuid_dict
[
group_id
][
group_excavator_index
]]
excavator_material_bind_modify
[
group_excavator_index
]
=
truck
.
excavator_material_bind_modify
[
truck_index
][
excavator_index
]
for
group_dump_index
in
range
(
group_dump_num
):
dump_index
=
dump
.
dump_uuid_to_index_dict
[
self
.
group_dump_index_to_uuid_dict
[
group_id
][
group_dump_index
]]
dump_material_bind_modify
[
group_dump_index
]
=
truck
.
dump_material_bind_modify
[
truck_index
][
dump_index
]
self
.
group_excavator_exclude_modify
[
truck_id
]
=
excavator_exclude_modify
self
.
group_excavator_material_bind_modify
[
truck_id
]
=
excavator_material_bind_modify
self
.
group_dump_material_bind_modify
[
truck_id
]
=
dump_material_bind_modify
except
Exception
as
es
:
logger
.
error
(
es
)
logger
.
error
(
"modify update 异常"
)
def
period_update
(
self
):
self
.
reset
()
...
...
@@ -1235,56 +1270,58 @@ class Group(WalkManage):
self
.
group_dump_material_bind_modify
=
{}
def
para_process
(
dispatcher
):
logger
.
info
(
"papa_process!"
)
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
# 周期更新
dispatcher
.
para_period_update
()
def
state_process
(
dispatcher
):
print
(
"state_process!"
)
logger
.
info
(
"state_process!"
)
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
# 周期更新
dispatcher
.
state_period_update
()
# 参数重置
dispatcher
.
sim_para_reset
()
# try:
# 调度计算
dispatcher
.
schedule_construct
()
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
#
def para_process(dispatcher):
#
#
logger.info("papa_process!")
#
#
# 清空数据库缓存
#
session_mysql.commit()
#
session_mysql.flush()
#
#
# 清空数据库缓存
#
session_postgre.commit()
#
session_postgre.flush()
#
#
# 周期更新
#
dispatcher.para_period_update()
#
#
#
def state_process(dispatcher):
#
#
print("state_process!")
#
#
logger.info("state_process!")
#
#
# 清空数据库缓存
#
session_mysql.commit()
#
session_mysql.flush()
#
#
# 清空数据库缓存
#
session_postgre.commit()
#
session_postgre.flush()
#
#
# 周期更新
#
dispatcher.state_period_update()
#
#
# 参数重置
#
dispatcher.sim_para_reset()
#
#
# try:
#
#
# 调度计算
#
dispatcher.schedule_construct()
#
#
# except Exception as es:
#
# logger.error("更新不及时")
#
# logger.error(es)
# 下面三个函数保证程序定期执行,不用管他
def
process
(
dispatcher
):
try
:
# 更新周期参数
logger
.
info
(
"#####################################周期更新开始#####################################"
)
period_para_update
()
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
raise
Exception
(
"无动态派车计划可用"
)
...
...
@@ -1292,9 +1329,37 @@ def process(dispatcher):
if
get_value
(
"dynamic_truck_num"
)
==
0
:
raise
Exception
(
"无动态派车可用矿卡"
)
return
para_process
(
dispatcher
)
# para_process(dispatcher)
#
# state_process(dispatcher)
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
state_process
(
dispatcher
)
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
#
# # 周期更新
# dispatcher.para_period_update()
# 周期更新
dispatcher
.
dispatcher_period_update
()
# 参数重置
dispatcher
.
sim_para_reset
()
# try:
# 调度计算
dispatcher
.
schedule_construct
()
# except Exception as es:
# logger.error("更新不及时")
# logger.error(es)
logger
.
info
(
"#####################################周期更新结束#####################################"
)
except
Exception
as
es
:
logger
.
error
(
es
)
...
...
static_data_process.py
View file @
b95e895f
...
...
@@ -138,6 +138,9 @@ def update_deveices_map(unload_area_uuid_to_index_dict, load_area_uuid_to_index_
except
Exception
as
es
:
logger
.
warning
(
es
)
print
(
"static_excavator_uuid_to_index_dict"
)
print
(
excavator_uuid_to_index_dict
)
return
{
"excavator_uuid_to_index_dict"
:
excavator_uuid_to_index_dict
,
"dump_uuid_to_index_dict"
:
dump_uuid_to_index_dict
,
...
...
@@ -161,6 +164,10 @@ def update_truck_uuid_index_map(dynamic_truck_set):
truck_index_to_uuid_dict
[
truck_num
]
=
truck_id
truck_num
=
truck_num
+
1
print
(
dynamic_truck_set
)
print
(
"static-truck_uuid_to_index_dict"
)
print
(
truck_uuid_to_index_dict
)
return
{
"truck_uuid_to_index_dict"
:
truck_uuid_to_index_dict
,
"truck_index_to_uuid_dict"
:
truck_index_to_uuid_dict
,
...
...
@@ -275,6 +282,9 @@ def update_autodisp_dump():
raise
Exception
(
"无动态派车计划可用-动态派车挖机/卸载设备集合读取异常"
)
except
Exception
as
es
:
logger
.
warning
(
es
)
print
(
"here1"
)
print
(
set
(
dynamic_dump_list
))
return
set
(
dynamic_dump_list
)
...
...
traffic_flow/traffic_flow_info.py
View file @
b95e895f
...
...
@@ -180,12 +180,22 @@ def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, nu
# 动态派车矿卡集合
tra_para
.
truck_total_num
=
get_value
(
"dynamic_truck_num"
)
print
(
"truck.get_dump_hold_truck_num"
)
print
(
truck
.
get_dump_hold_truck_num
())
print
(
"truck.get_excavator_hold_truck_num"
)
print
(
truck
.
get_excavator_hold_truck_num
())
# 目的地矿卡数量
tra_para
.
dump_hold_truck_num
=
truck
.
get_dump_hold_truck_num
()
tra_para
.
excavator_hold_truck_num
=
truck
.
get_excavator_hold_truck_num
()
# 计算逻辑道路因子
print
(
"here4"
)
print
(
num_of_dump
)
for
i
in
range
(
num_of_excavator
):
for
j
in
range
(
num_of_dump
):
# 查找挖机绑定的装载区, 卸载设备绑定的卸载区
...
...
traffic_flow/traffic_flow_planner.py
View file @
b95e895f
...
...
@@ -109,11 +109,13 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
# 约束四:车流可行性约束
# 当前车流可行性约束
for
i
in
range
(
row
):
print
(
excavator_hold_truck_num
[
i
])
print
(
"excavator_hold_truck_num"
)
print
(
excavator_hold_truck_num
,
i
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_x
))[
i
])
<=
excavator_hold_truck_num
[
i
]
*
220
+
0.001
)
for
j
in
range
(
col
):
print
(
dump_hold_truck_num
[
j
])
print
(
dump_hold_truck_num
)
print
(
dump_hold_truck_num
,
j
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_y
))[
j
])
<=
dump_hold_truck_num
[
j
]
*
220
+
0.001
)
...
...
@@ -153,14 +155,21 @@ def traffic_flow_plan(truck):
unload_area_set
=
set
(
unload_area_list
)
excavator_num
=
len
(
excavator_set
)
dump_num
=
len
(
dump_set
)
#
excavator_num = len(excavator_set)
#
#
dump_num = len(dump_set)
unload_area_num
=
len
(
unload_area_set
)
load_area_num
=
len
(
load_area_set
)
dump_num
=
get_value
(
"dynamic_dump_num"
)
print
(
"here5"
)
print
(
dump_num
)
excavator_num
=
get_value
(
"dynamic_excavator_num"
)
print
(
"装载区数量:"
,
load_area_num
,
"卸载区数量:"
,
unload_area_num
,
"挖机数量:"
,
excavator_num
,
"卸载设备数量:"
,
dump_num
)
# try:
...
...
@@ -190,6 +199,9 @@ def traffic_flow_plan(truck):
walk_time_to_excavator
=
traffic_programme_para
.
walk_time_to_excavator
walk_time_to_dump
=
traffic_programme_para
.
walk_time_to_dump
truck_total_num
=
traffic_programme_para
.
truck_total_num
print
(
"here1212"
)
print
(
traffic_programme_para
.
dump_hold_truck_num
)
print
(
traffic_programme_para
.
excavator_hold_truck_num
)
dump_hold_truck_num
=
traffic_programme_para
.
dump_hold_truck_num
excavator_hold_truck_num
=
traffic_programme_para
.
excavator_hold_truck_num
...
...
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