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
Show whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
339 additions
and
106 deletions
+339
-106
excavator.py
equipment/excavator.py
+11
-8
truck.py
equipment/truck.py
+103
-19
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
+18
-0
realtime_dispatch.py
realtime_dispatch.py
+136
-71
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,6 +523,8 @@ class TruckInfo(WalkManage):
def
update_truck_material
(
self
):
try
:
self
.
truck_material_bind
=
{}
self
.
update_truck_excavator_bind
()
self
.
update_truck_dump_area_bind
()
...
...
@@ -540,6 +565,9 @@ class TruckInfo(WalkManage):
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
)
logger
.
info
(
"车流规划规则"
)
logger
.
info
(
rule3
or
rule4
)
if
rule1
:
logger
.
info
(
"距离成本规则未启用"
)
else
:
logger
.
info
(
"距离成本规则启用"
)
logger
.
info
(
"生产组织规则"
)
logger
.
info
(
rule5
)
if
rule2
:
logger
.
info
(
"拥堵成本规则未启用"
)
else
:
logger
.
info
(
"拥堵成本规则启用"
)
logger
.
info
(
"设备优先级规则"
)
logger
.
info
(
rule6
)
if
rule3
or
rule4
:
logger
.
info
(
"车流规划规则未启用"
)
else
:
logger
.
info
(
"车流规划规则启用"
)
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
(
"设备优先级规则启用"
)
# # 更新矿卡group
# self.update_truck_group(
)
if
rule7
:
logger
.
info
(
"物料优先级规则未启用"
)
else
:
# 更新矿卡物料类型
self
.
update_truck_material
()
logger
.
info
(
"物料优先级规则启用"
)
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
try
:
walk_weight
=
walk_weight
-
(
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
))
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,10 +810,10 @@ class Dispatcher(WalkManage):
print
(
"self.cur_truck_ava_time"
,
self
.
cur_truck_ava_time
)
#
try:
try
:
# 读取所需信息
trucks
=
truck
.
get_truck_num
(
)
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
()
...
...
@@ -823,7 +828,7 @@ class Dispatcher(WalkManage):
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
)]
Seq
=
[[
truck_current_trip
[
i
][
1
],
-
1
]
for
i
in
range
(
dynamic_truck_num
)]
# 根据矿卡最早可用时间顺序进行规划
print
(
self
.
cur_truck_ava_time
)
...
...
@@ -832,7 +837,7 @@ class Dispatcher(WalkManage):
try
:
# 没有启动的矿卡加上一个很大的值,降低其优先级
for
i
in
range
(
trucks
):
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
...
...
@@ -847,7 +852,7 @@ class Dispatcher(WalkManage):
for
truck_index
in
index
:
if
len
(
Seq
[
truck_index
])
>
0
:
#
try:
try
:
# 获取矿卡id
truck_id
=
truck
.
truck_index_to_uuid_dict
[
truck_index
]
...
...
@@ -873,9 +878,10 @@ class Dispatcher(WalkManage):
logger
.
error
(
"非动态调度矿卡"
)
logger
.
error
(
es
)
#
except Exception as es:
except
Exception
as
es
:
# logger.error(f'矿卡 {truck_uuid_to_name_dict[self.truck_index_to_uuid_dict[truck_index]]} 派车计划计算异常')
# logger.error(es)
logger
.
error
(
f
'矿卡派车计划计算异常'
)
logger
.
error
(
es
)
try
:
...
...
@@ -911,7 +917,7 @@ class Dispatcher(WalkManage):
logger
.
error
(
es
)
for
i
in
range
(
len
(
Seq
)):
#
try:
try
:
truck_id
=
truck
.
truck_index_to_uuid_dict
[
i
]
group_id
=
self
.
group
.
dispatch_truck_group
[
truck_id
]
...
...
@@ -970,19 +976,17 @@ class Dispatcher(WalkManage):
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)
except
Exception
as
es
:
logger
.
error
(
"调度结果写入异常-redis写入异常"
)
logger
.
error
(
f
"调度结果:{Seq}"
)
logger
.
error
(
es
)
for
i
in
range
(
trucks
):
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("更新不及时")
# logger.error(es)
logger
.
info
(
"#####################################周期更新结束#####################################"
)
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
():
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,7 +1113,7 @@ class Group(WalkManage):
walk_to_excavator_cost
,
walk_to_dump_cost
,
park_to_excavator_cost
=
self
.
path
.
walk_cost
()
#
try:
try
:
for
group_id
in
self
.
group_set
:
dump_group
=
self
.
device_group
[
group_id
][
0
]
...
...
@@ -1106,6 +1125,8 @@ class Group(WalkManage):
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
]]
...
...
@@ -1121,8 +1142,9 @@ class Group(WalkManage):
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)
except
Exception
as
es
:
logger
.
info
(
es
)
logger
.
info
(
"error-11"
)
def
update_group_device_map
(
self
):
# 更新调度分组内设备映射
...
...
@@ -1162,6 +1184,16 @@ class Group(WalkManage):
logger
.
info
(
self
.
group_excavator_uuid_to_index_dict
)
def
update_modify
(
self
):
try
:
dynamic_truck_set
=
get_value
(
"dynamic_truck_set"
)
print
(
"update_modify"
)
print
(
dynamic_truck_set
)
print
(
"self.dispatch_truck_group"
)
print
(
self
.
dispatch_truck_group
)
self
.
group_excavator_exclude_modify
=
{}
self
.
group_excavator_material_bind_modify
=
{}
self
.
group_dump_material_bind_modify
=
{}
...
...
@@ -1191,6 +1223,9 @@ class Group(WalkManage):
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,27 +1270,68 @@ class Group(WalkManage):
self
.
group_dump_material_bind_modify
=
{}
def
para_process
(
dispatcher
):
logger
.
info
(
"papa_process!"
)
# 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)
# 清空数据库缓存
session_mysql
.
commit
()
session_mysql
.
flush
()
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
# 周期更新
dispatcher
.
para_period_update
()
def
state_process
(
dispatcher
):
# 下面三个函数保证程序定期执行,不用管他
def
process
(
dispatcher
):
print
(
"state_process!"
)
try
:
# 更新周期参数
logger
.
info
(
"#####################################周期更新开始#####################################"
)
logger
.
info
(
"state_process!"
)
period_para_update
()
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
raise
Exception
(
"无动态派车计划可用"
)
return
if
get_value
(
"dynamic_truck_num"
)
==
0
:
raise
Exception
(
"无动态派车可用矿卡"
)
return
# para_process(dispatcher)
#
# state_process(dispatcher)
# 清空数据库缓存
session_mysql
.
commit
()
...
...
@@ -1264,9 +1340,12 @@ def state_process(dispatcher):
# 清空数据库缓存
session_postgre
.
commit
()
session_postgre
.
flush
()
#
# # 周期更新
# dispatcher.para_period_update()
# 周期更新
dispatcher
.
state
_period_update
()
dispatcher
.
dispatcher
_period_update
()
# 参数重置
dispatcher
.
sim_para_reset
()
...
...
@@ -1280,21 +1359,7 @@ def state_process(dispatcher):
# logger.error("更新不及时")
# logger.error(es)
# 下面三个函数保证程序定期执行,不用管他
def
process
(
dispatcher
):
try
:
# 更新周期参数
period_para_update
()
if
get_value
(
"dynamic_dump_num"
)
*
get_value
(
"dynamic_excavator_num"
)
==
0
:
raise
Exception
(
"无动态派车计划可用"
)
return
if
get_value
(
"dynamic_truck_num"
)
==
0
:
raise
Exception
(
"无动态派车可用矿卡"
)
return
para_process
(
dispatcher
)
state_process
(
dispatcher
)
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