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
0
Merge Requests
0
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
75c11dc1
Commit
75c11dc1
authored
Dec 07, 2021
by
张晓彤
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
BUG修复12-5
parent
d7bb65c7
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
71 additions
and
49 deletions
+71
-49
path_plannner.py
path_plan/path_plannner.py
+16
-8
realtime_dispatch.py
realtime_dispatch.py
+20
-6
settings.py
settings.py
+4
-4
traffic_flow_info.py
traffic_flow/traffic_flow_info.py
+9
-15
traffic_flow_planner.py
traffic_flow/traffic_flow_planner.py
+22
-16
No files found.
path_plan/path_plannner.py
View file @
75c11dc1
...
@@ -265,13 +265,16 @@ class LaneInfo:
...
@@ -265,13 +265,16 @@ class LaneInfo:
# json_value = json.loads(redis2.get(item))
# json_value = json.loads(redis2.get(item))
key_value_dict
=
redis2
.
hgetall
(
item
)
key_value_dict
=
redis2
.
hgetall
(
item
)
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
if
device_type
==
1
and
str_to_byte
(
'speed'
)
in
key_value_dict
.
keys
():
if
device_type
==
str_to_byte
(
"1"
)
and
str_to_byte
(
'speed'
)
in
key_value_dict
.
keys
():
truck_speed
=
key_value_dict
[
str_to_byte
(
'speed'
)]
truck_speed
=
float
(
key_value_dict
[
str_to_byte
(
'speed'
)])
truck_speed_dict
[
truck_name_to_uuid_dict
[
item
]]
=
truck_speed
truck_speed_dict
[
truck_name_to_uuid_dict
[
item
]]
=
truck_speed
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
error
(
f
'矿卡{item}实时速度读取异常'
)
logger
.
error
(
f
'矿卡{item}实时速度读取异常'
)
logger
.
error
(
es
)
logger
.
error
(
es
)
print
(
"truck_speed_dict"
)
print
(
truck_speed_dict
)
return
truck_speed_dict
return
truck_speed_dict
def
update_truck_loacate
(
self
):
def
update_truck_loacate
(
self
):
...
@@ -286,13 +289,16 @@ class LaneInfo:
...
@@ -286,13 +289,16 @@ class LaneInfo:
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
device_type
=
key_value_dict
[
str_to_byte
(
'type'
)]
# is_online = key_value_dict[str_to_byte('online')]
# is_online = key_value_dict[str_to_byte('online')]
key_set
=
key_value_dict
.
keys
()
key_set
=
key_value_dict
.
keys
()
if
device_type
==
1
and
str_to_byte
(
'online'
)
in
key_set
and
str_to_byte
(
'laneId'
)
in
key_set
:
if
device_type
==
str_to_byte
(
"1"
)
and
str_to_byte
(
'online'
)
in
key_set
and
str_to_byte
(
'laneId'
)
in
key_set
:
truck_locate
=
key_value_dict
[
str_to_byte
(
'laneId'
)]
truck_locate
=
key_value_dict
[
str_to_byte
(
'laneId'
)]
truck_locate_dict
[
truck_name_to_uuid_dict
[
item
]]
=
truck_locate
truck_locate_dict
[
truck_name_to_uuid_dict
[
item
]]
=
eval
(
truck_locate
)
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
error
(
f
'矿卡{item}所在路段信息读取异常'
)
logger
.
error
(
f
'矿卡{item}所在路段信息读取异常'
)
logger
.
error
(
es
)
logger
.
error
(
es
)
print
(
"truck_locate_dict"
)
print
(
truck_locate_dict
)
return
truck_locate_dict
return
truck_locate_dict
def
lane_speed_generate
(
self
):
def
lane_speed_generate
(
self
):
...
@@ -335,15 +341,18 @@ class LaneInfo:
...
@@ -335,15 +341,18 @@ class LaneInfo:
tmp_lane_set
=
[]
tmp_lane_set
=
[]
try
:
try
:
# 初始化
# 初始化
for
lane_id
in
lane_set
:
for
lane_id
in
lane_set
:
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
0
self
.
lane_speed_dict
[
str
(
lane_id
)]
=
0
lane_trucks_dict
[
str
(
lane_id
)]
=
0
lane_trucks_dict
[
str
(
lane_id
)]
=
0
# 对于各路段信息
# 对于各路段信息
print
(
"truck_locate_dict"
)
print
(
truck_locate_dict
.
keys
())
for
truck
in
truck_locate_dict
.
keys
():
for
truck
in
truck_locate_dict
.
keys
():
lane_id
=
truck_locate_dict
[
truck
]
lane_id
=
truck_locate_dict
[
truck
]
logger
.
info
(
"lane_speed_generate-lane_id"
)
logger
.
info
(
lane_id
)
if
lane_id
in
lane_set
:
if
lane_id
in
lane_set
:
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
=
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
+
\
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
=
self
.
lane_speed_dict
[
truck_locate_dict
[
truck
]]
+
\
truck_speed_dict
[
truck
]
truck_speed_dict
[
truck
]
...
@@ -353,9 +362,8 @@ class LaneInfo:
...
@@ -353,9 +362,8 @@ class LaneInfo:
tmp_lane_set
.
append
(
lane_id
)
tmp_lane_set
.
append
(
lane_id
)
# 存在矿卡的路段
# 存在矿卡的路段
# print("存在矿卡的路段:")
print
(
"存在矿卡的路段:"
)
# print(tmp_lane_set)
print
(
tmp_lane_set
)
logger
.
info
(
"存在矿卡的路段:"
)
logger
.
info
(
"存在矿卡的路段:"
)
logger
.
info
(
tmp_lane_set
)
logger
.
info
(
tmp_lane_set
)
...
...
realtime_dispatch.py
View file @
75c11dc1
...
@@ -329,10 +329,11 @@ class Dispatcher(WalkManage):
...
@@ -329,10 +329,11 @@ class Dispatcher(WalkManage):
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
logger
.
error
(
f
"矿卡{truck_id}状态不匹配"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
# 矿卡是否存在绑定挖机
try
:
try
:
# 1. 矿卡是否存在绑定挖机
if
truck_id
in
truck
.
truck_excavator_bind
:
if
truck_id
in
truck
.
truck_excavator_bind
:
target
=
excavator
.
excavator_uuid_to_index_dict
[
truck
.
truck_excavator_bind
[
truck_id
]]
target
=
excavator
.
excavator_uuid_to_index_dict
[
truck
.
truck_excavator_bind
[
truck_id
]]
# 2. 正常调度
elif
not
rule_ex
:
elif
not
rule_ex
:
transport_value
=
self
.
group
.
group_park_to_excavator
[
group_id
]
transport_value
=
self
.
group
.
group_park_to_excavator
[
group_id
]
...
@@ -347,6 +348,7 @@ class Dispatcher(WalkManage):
...
@@ -347,6 +348,7 @@ class Dispatcher(WalkManage):
+
excavator_exclude_modify
)
+
excavator_exclude_modify
)
# + excavator_material_bind_modify)
# + excavator_material_bind_modify)
target
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
target
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
# 3. 启用饱和度调度
else
:
else
:
actual_flow_to_excavator
=
truck
.
excavator_hold_truck_num
*
truck
.
payload
/
self
.
group
.
group_park_to_excavator
[
group_id
]
.
reshape
(
1
,
-
1
)
actual_flow_to_excavator
=
truck
.
excavator_hold_truck_num
*
truck
.
payload
/
self
.
group
.
group_park_to_excavator
[
group_id
]
.
reshape
(
1
,
-
1
)
...
@@ -414,13 +416,14 @@ class Dispatcher(WalkManage):
...
@@ -414,13 +416,14 @@ class Dispatcher(WalkManage):
logger
.
info
(
"车流及修正因子"
)
logger
.
info
(
"车流及修正因子"
)
logger
.
info
(
es
)
logger
.
info
(
es
)
# 1. 绑定调度
if
truck_id
in
truck
.
truck_dump_bind
:
if
truck_id
in
truck
.
truck_dump_bind
:
bind_unload_area_id
=
truck
.
truck_dump_bind
[
truck_id
]
bind_unload_area_id
=
truck
.
truck_dump_bind
[
truck_id
]
for
key
,
value
in
dump
.
dump_index_to_unload_area_index_dict
.
items
():
for
key
,
value
in
dump
.
dump_index_to_unload_area_index_dict
.
items
():
if
value
==
unload_area_uuid_to_index_dict
[
bind_unload_area_id
]:
if
value
==
unload_area_uuid_to_index_dict
[
bind_unload_area_id
]:
target
=
key
target
=
key
break
break
# 2. 正常调度
elif
not
rule_ex
:
elif
not
rule_ex
:
try
:
try
:
excavator_index
=
int
(
trip
[
1
])
excavator_index
=
int
(
trip
[
1
])
...
@@ -429,7 +432,7 @@ class Dispatcher(WalkManage):
...
@@ -429,7 +432,7 @@ class Dispatcher(WalkManage):
print
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
])
print
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
])
group_excavator_index
=
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
group_excavator_index
=
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
]
# 2.1 正常调度
if
rule3
and
rule4
:
if
rule3
and
rule4
:
try
:
try
:
# ga changed
# ga changed
...
@@ -449,6 +452,7 @@ class Dispatcher(WalkManage):
...
@@ -449,6 +452,7 @@ class Dispatcher(WalkManage):
logger
.
error
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
])
logger
.
error
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
][
excavator_id
])
logger
.
error
(
"self.group.group_excavator_uuid_to_index_dict[group_id]"
)
logger
.
error
(
"self.group.group_excavator_uuid_to_index_dict[group_id]"
)
logger
.
error
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
])
logger
.
error
(
self
.
group
.
group_excavator_uuid_to_index_dict
[
group_id
])
# 2.2 车流规划
else
:
else
:
try
:
try
:
...
@@ -518,15 +522,18 @@ class Dispatcher(WalkManage):
...
@@ -518,15 +522,18 @@ class Dispatcher(WalkManage):
except
Exception
as
es
:
except
Exception
as
es
:
logger
.
error
(
"error06"
)
logger
.
error
(
"error06"
)
logger
.
error
(
es
)
logger
.
error
(
es
)
# 3. 饱和度调度
else
:
else
:
excavator_index
=
int
(
trip
[
1
])
excavator_index
=
int
(
trip
[
1
])
transport_value
=
self
.
group
.
group_walk_to_dump_cost
[
group_id
][:,
excavator_index
]
.
reshape
(
1
,
-
1
)
actual_flow_to_dump
=
truck
.
dump_hold_truck_num
*
truck
.
payload
/
\
actual_flow_to_dump
=
truck
.
dump_hold_truck_num
*
truck
.
payload
/
\
self
.
group
.
group_walk_to_dump_cost
[
group_id
][:,
excavator_index
]
.
reshape
(
1
,
self
.
group
.
group_walk_to_dump_cost
[
group_id
][:,
excavator_index
]
.
reshape
(
1
,
-
1
)
-
1
)
allow_flow_to_dump
=
dump
.
dump_strength
allow_flow_to_dump
=
dump
.
dump_strength
target
=
np
.
argm
in
(
actual_flow_to_dump
/
allow_flow_to_dump
)
target
=
np
.
argm
ax
((
1
-
actual_flow_to_dump
/
allow_flow_to_dump
)
/
transport_value
)
target
=
dump
.
dump_uuid_to_index_dict
[
target
=
dump
.
dump_uuid_to_index_dict
[
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
self
.
group
.
group_dump_index_to_uuid_dict
[
group_id
][
target
]]
...
@@ -589,19 +596,22 @@ class Dispatcher(WalkManage):
...
@@ -589,19 +596,22 @@ class Dispatcher(WalkManage):
# 计算目的地
# 计算目的地
try
:
try
:
# 1. 绑定调度
if
truck_id
in
truck
.
truck_excavator_bind
:
if
truck_id
in
truck
.
truck_excavator_bind
:
target
=
excavator
.
excavator_uuid_to_index_dict
[
truck
.
truck_excavator_bind
[
truck_id
]]
target
=
excavator
.
excavator_uuid_to_index_dict
[
truck
.
truck_excavator_bind
[
truck_id
]]
logger
.
info
(
"矿卡已绑定挖机"
)
logger
.
info
(
"矿卡已绑定挖机"
)
# 2. 正常调度
elif
not
rule_ex
:
elif
not
rule_ex
:
logger
.
info
(
"cost_to_excavator"
)
logger
.
info
(
"cost_to_excavator"
)
logger
.
info
(
self
.
cost_to_excavator
)
logger
.
info
(
self
.
cost_to_excavator
)
dump_index
=
int
(
trip
[
1
])
dump_index
=
int
(
trip
[
1
])
dump_id
=
dump
.
dump_uuid_to_index_dict
[
dump_index
]
dump_id
=
dump
.
dump_uuid_to_index_dict
[
dump_index
]
# 2.1 正常调度
if
rule3
and
rule4
:
if
rule3
and
rule4
:
# transport_value = self.cost_to_excavator[int(trip[1]), :]
# transport_value = self.cost_to_excavator[int(trip[1]), :]
transport_value
=
self
.
group
.
group_walk_to_excavator_cost
[
group_id
][
dump_index
,
:]
transport_value
=
self
.
group
.
group_walk_to_excavator_cost
[
group_id
][
dump_index
,
:]
# 2.2 车流规划
else
:
else
:
group_dump_index
=
self
.
group
.
group_dump_uuid_to_index_dict
[
group_id
][
dump_id
]
group_dump_index
=
self
.
group
.
group_dump_uuid_to_index_dict
[
group_id
][
dump_id
]
...
@@ -641,16 +651,20 @@ class Dispatcher(WalkManage):
...
@@ -641,16 +651,20 @@ class Dispatcher(WalkManage):
# + excavator_material_bind_modify)
# + excavator_material_bind_modify)
target
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
target
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
# 3. 饱和度调度
else
:
else
:
dump_index
=
int
(
trip
[
1
])
dump_index
=
int
(
trip
[
1
])
transport_value
=
self
.
group
.
group_walk_to_excavator_cost
[
group_id
][
dump_index
,
:]
.
reshape
(
1
,
-
1
)
actual_flow_to_excavator
=
truck
.
excavator_hold_truck_num
*
truck
.
payload
/
\
actual_flow_to_excavator
=
truck
.
excavator_hold_truck_num
*
truck
.
payload
/
\
self
.
group
.
group_walk_to_excavator_cost
[
group_id
][
dump_index
,
:]
.
reshape
(
self
.
group
.
group_walk_to_excavator_cost
[
group_id
][
dump_index
,
:]
.
reshape
(
1
,
-
1
)
1
,
-
1
)
allow_flow_to_excavator
=
excavator
.
excavator_strength
allow_flow_to_excavator
=
excavator
.
excavator_strength
target
=
np
.
argm
in
(
actual_flow_to_excavator
/
allow_flow_to_excavator
)
target
=
np
.
argm
ax
((
1
-
actual_flow_to_excavator
/
allow_flow_to_excavator
)
/
transport_value
)
target
=
excavator
.
excavator_uuid_to_index_dict
[
target
=
excavator
.
excavator_uuid_to_index_dict
[
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
self
.
group
.
group_excavator_index_to_uuid_dict
[
group_id
][
target
]]
...
...
settings.py
View file @
75c11dc1
...
@@ -55,8 +55,8 @@ log_path = para_config["log_path"]
...
@@ -55,8 +55,8 @@ log_path = para_config["log_path"]
# 创建日志目录
# 创建日志目录
if
not
os
.
path
.
exists
(
log_path
):
#
if not os.path.exists(log_path):
os
.
mkdir
(
log_path
)
#
os.mkdir(log_path)
# logging初始化工作
# logging初始化工作
logging
.
basicConfig
()
logging
.
basicConfig
()
...
@@ -65,8 +65,8 @@ logger.setLevel(logging.INFO)
...
@@ -65,8 +65,8 @@ logger.setLevel(logging.INFO)
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
log_path
+
"/dispatch.log"
,
maxBytes
=
3
*
1024
*
1024
,
backupCount
=
10
)
#
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=3*1024*1024, backupCount=10)
#
filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10)
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
"./Logs/dispatch.log"
,
maxBytes
=
3
*
1024
*
1024
,
backupCount
=
10
)
# 设置后缀名称,跟strftime的格式一样
# 设置后缀名称,跟strftime的格式一样
filehandler
.
suffix
=
"
%
Y-
%
m-
%
d_
%
H-
%
M.log"
filehandler
.
suffix
=
"
%
Y-
%
m-
%
d_
%
H-
%
M.log"
...
...
traffic_flow/traffic_flow_info.py
View file @
75c11dc1
...
@@ -82,12 +82,6 @@ class Traffic_flow(WalkManage):
...
@@ -82,12 +82,6 @@ class Traffic_flow(WalkManage):
logger
.
info
(
"dynamic_truck_num"
)
logger
.
info
(
"dynamic_truck_num"
)
logger
.
info
(
dynamic_truck_num
)
logger
.
info
(
dynamic_truck_num
)
print
(
"truck.truck_index_to_uuid_dict"
)
print
(
self
.
truck
.
truck_index_to_uuid_dict
)
print
(
"truck_current_task"
)
print
(
truck_current_task
)
for
i
in
range
(
dynamic_truck_num
):
for
i
in
range
(
dynamic_truck_num
):
task
=
truck_current_task
[
self
.
truck
.
truck_index_to_uuid_dict
[
i
]]
task
=
truck_current_task
[
self
.
truck
.
truck_index_to_uuid_dict
[
i
]]
end_area_index
=
truck_current_trip
[
i
][
1
]
end_area_index
=
truck_current_trip
[
i
][
1
]
...
@@ -193,7 +187,7 @@ class Traffic_para(WalkManage):
...
@@ -193,7 +187,7 @@ class Traffic_para(WalkManage):
logger
.
warning
(
"矿卡速度设置为默认值"
)
logger
.
warning
(
"矿卡速度设置为默认值"
)
logger
.
warning
(
es
)
logger
.
warning
(
es
)
self
.
min_throughout
=
1000
# 最小产量约束
self
.
min_throughout
=
np
.
full
((
1
,
num_of_dump
),
100
)
# 最小产量约束
self
.
truck_total_num
=
0
self
.
truck_total_num
=
0
self
.
excavator_strength
=
np
.
zeros
(
num_of_excavator
)
# 用于保存电铲的工作强度,单位是t/h
self
.
excavator_strength
=
np
.
zeros
(
num_of_excavator
)
# 用于保存电铲的工作强度,单位是t/h
...
@@ -306,13 +300,13 @@ class Traffic_para(WalkManage):
...
@@ -306,13 +300,13 @@ class Traffic_para(WalkManage):
try
:
try
:
# 车流规划部分矩阵格式与其余两个模块不同
# 车流规划部分矩阵格式与其余两个模块不同
cost_to_dump
=
self
.
path_planner
.
cost_to_dump
self
.
cost_to_dump
=
self
.
path_planner
.
cost_to_dump
cost_to_excavator
=
self
.
path_planner
.
cost_to_excavator
self
.
cost_to_excavator
=
self
.
path_planner
.
cost_to_excavator
logger
.
info
(
"cost_to_dump"
)
logger
.
info
(
"cost_to_dump"
)
logger
.
info
(
cost_to_dump
)
logger
.
info
(
self
.
cost_to_dump
)
logger
.
info
(
"cost_to_excavator"
)
logger
.
info
(
"cost_to_excavator"
)
logger
.
info
(
cost_to_excavator
)
logger
.
info
(
self
.
cost_to_excavator
)
logger
.
info
(
"self.goto_excavator_factor"
)
logger
.
info
(
"self.goto_excavator_factor"
)
logger
.
info
(
self
.
goto_excavator_factor
)
logger
.
info
(
self
.
goto_excavator_factor
)
logger
.
info
(
"self.goto_dump_factor"
)
logger
.
info
(
"self.goto_dump_factor"
)
...
@@ -323,13 +317,13 @@ class Traffic_para(WalkManage):
...
@@ -323,13 +317,13 @@ class Traffic_para(WalkManage):
logger
.
info
(
get_value
(
"dynamic_excavator_num"
))
logger
.
info
(
get_value
(
"dynamic_excavator_num"
))
# ga
# ga
# 路网信息读取
# 路网信息读取
for
dump_index
in
range
(
get_value
(
"dynamic_dump_num"
)
-
1
):
for
dump_index
in
range
(
get_value
(
"dynamic_dump_num"
)):
for
excavator_index
in
range
(
get_value
(
"dynamic_excavator_num"
)
-
1
):
for
excavator_index
in
range
(
get_value
(
"dynamic_excavator_num"
)):
self
.
goto_excavator_factor
[
dump_index
][
excavator_index
]
=
\
self
.
goto_excavator_factor
[
dump_index
][
excavator_index
]
=
\
(
cost_to_excavator
[
dump_index
][
excavator_index
]
/
(
empty_speed
*
1000
))
/
self
.
payload
(
self
.
cost_to_excavator
[
dump_index
][
excavator_index
]
/
(
empty_speed
*
1000
))
/
self
.
payload
self
.
goto_dump_factor
[
excavator_index
][
dump_index
]
=
\
self
.
goto_dump_factor
[
excavator_index
][
dump_index
]
=
\
(
cost_to_dump
[
excavator_index
][
dump
_index
]
/
(
heavy_speed
*
1000
))
/
self
.
payload
(
self
.
cost_to_dump
[
dump_index
][
excavator
_index
]
/
(
heavy_speed
*
1000
))
/
self
.
payload
# logger.info("self.goto_dump_factor")
# logger.info("self.goto_dump_factor")
# logger.info(self.goto_dump_factor)
# logger.info(self.goto_dump_factor)
...
...
traffic_flow/traffic_flow_planner.py
View file @
75c11dc1
...
@@ -37,7 +37,10 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
...
@@ -37,7 +37,10 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
if
max_unload_weigh_alg_flag
==
True
:
if
max_unload_weigh_alg_flag
==
True
:
prob
=
pulp
.
LpProblem
(
'Transportation Problem'
,
sense
=
pulp
.
LpMaximize
)
prob
=
pulp
.
LpProblem
(
'Transportation Problem'
,
sense
=
pulp
.
LpMaximize
)
# 得到目标函数,目标函数是使得系统的运输量最大
# 得到目标函数,目标函数是使得系统的运输量最大
prob
+=
(
pulp
.
lpDot
(
flatten
(
var_x
),
coefficient_goto_dump
.
flatten
()))
# prob += (pulp.lpDot(flatten(var_x), coefficient_goto_dump.flatten()))
prob
+=
(
pulp
.
lpDot
(
flatten
(
var_x
),
coefficient_goto_dump
.
flatten
())
+
pulp
.
lpDot
(
flatten
(
var_y
),
coefficient_goto_excavator
.
flatten
()))
else
:
else
:
prob
=
pulp
.
LpProblem
(
'Transportation Problem'
,
sense
=
pulp
.
LpMinimize
)
prob
=
pulp
.
LpProblem
(
'Transportation Problem'
,
sense
=
pulp
.
LpMinimize
)
goto_excavator_cost
=
var_y
*
walk_time_to_excavator
goto_excavator_cost
=
var_y
*
walk_time_to_excavator
...
@@ -47,8 +50,8 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
...
@@ -47,8 +50,8 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
# 定义约束条件
# 定义约束条件
# 最小产量约束,仅在最小化成本模式下成立
# 最小产量约束,仅在最小化成本模式下成立
if
max_unload_weigh_alg_flag
==
False
:
if
max_unload_weigh_alg_flag
==
False
:
for
i
in
range
(
col
):
for
j
in
range
(
col
):
prob
+=
pulp
.
lpSum
(
var_y
[
i
])
>=
min_throughout
[
i
]
prob
+=
pulp
.
lpSum
(
var_y
[
j
])
>=
min_throughout
[
j
]
logger
.
info
(
"road_factor"
)
logger
.
info
(
"road_factor"
)
logger
.
info
(
w_ij
)
logger
.
info
(
w_ij
)
...
@@ -60,8 +63,12 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
...
@@ -60,8 +63,12 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
# 通过矩阵按元素相乘得到每条装载道路上的车辆个数
# 通过矩阵按元素相乘得到每条装载道路上的车辆个数
load_truck_totla_num_array
=
s_ij
*
var_y
load_truck_totla_num_array
=
s_ij
*
var_y
# 装载的矿卡数和卸载的矿卡数需要小于矿卡总数
# 装载的矿卡数和卸载的矿卡数需要小于矿卡总数
prob
+=
(
pulp
.
lpSum
(
unload_truck_total_num_array
)
+
# prob += (pulp.lpSum(unload_truck_total_num_array) +
pulp
.
lpSum
(
load_truck_totla_num_array
)
<=
truck_total_num
)
# pulp.lpSum(load_truck_totla_num_array) <= truck_total_num)
prob
+=
(
pulp
.
lpSum
(
unload_truck_total_num_array
)
<=
truck_total_num
)
prob
+=
(
pulp
.
lpSum
(
load_truck_totla_num_array
)
<=
truck_total_num
)
# 约束一:最大工作强度约束
# 约束一:最大工作强度约束
# 约束每个挖机的工作强度
# 约束每个挖机的工作强度
...
@@ -111,12 +118,12 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
...
@@ -111,12 +118,12 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
for
i
in
range
(
row
):
for
i
in
range
(
row
):
print
(
"excavator_hold_truck_num"
)
print
(
"excavator_hold_truck_num"
)
print
(
excavator_hold_truck_num
,
i
)
print
(
excavator_hold_truck_num
,
i
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_x
))[
i
])
<=
excavator_hold_truck_num
[
i
]
*
22
0
+
0.001
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_x
))[
i
])
<=
excavator_hold_truck_num
[
i
]
*
1000
0
+
0.001
)
for
j
in
range
(
col
):
for
j
in
range
(
col
):
print
(
dump_hold_truck_num
)
print
(
dump_hold_truck_num
)
print
(
dump_hold_truck_num
,
j
)
print
(
dump_hold_truck_num
,
j
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_y
))[
j
])
<=
dump_hold_truck_num
[
j
]
*
22
0
+
0.001
)
prob
+=
(
pulp
.
lpSum
((
np
.
array
(
var_y
))[
j
])
<=
dump_hold_truck_num
[
j
]
*
1000
0
+
0.001
)
# 约束五:非负约束
# 约束五:非负约束
...
@@ -165,8 +172,6 @@ def traffic_flow_plan(truck):
...
@@ -165,8 +172,6 @@ def traffic_flow_plan(truck):
dump_num
=
get_value
(
"dynamic_dump_num"
)
dump_num
=
get_value
(
"dynamic_dump_num"
)
print
(
"here5"
)
print
(
dump_num
)
excavator_num
=
get_value
(
"dynamic_excavator_num"
)
excavator_num
=
get_value
(
"dynamic_excavator_num"
)
...
@@ -188,8 +193,8 @@ def traffic_flow_plan(truck):
...
@@ -188,8 +193,8 @@ def traffic_flow_plan(truck):
coefficient_goto_dump
=
traffic_programme_para
.
priority_coefficient_goto_dump
coefficient_goto_dump
=
traffic_programme_para
.
priority_coefficient_goto_dump
coefficient_goto_excavator
=
traffic_programme_para
.
priority_coefficient_goto_excavator
coefficient_goto_excavator
=
traffic_programme_para
.
priority_coefficient_goto_excavator
w_ij
=
traffic_programme_para
.
goto_dump_factor
w_ij
=
traffic_programme_para
.
goto_dump_factor
*
100
s_ij
=
traffic_programme_para
.
goto_excavator_factor
s_ij
=
traffic_programme_para
.
goto_excavator_factor
*
100
b_excavator
=
traffic_programme_para
.
excavator_strength
b_excavator
=
traffic_programme_para
.
excavator_strength
b_dump
=
traffic_programme_para
.
dump_strength
b_dump
=
traffic_programme_para
.
dump_strength
grade_loading_array
=
traffic_programme_para
.
grade_loading_array
grade_loading_array
=
traffic_programme_para
.
grade_loading_array
...
@@ -199,17 +204,18 @@ def traffic_flow_plan(truck):
...
@@ -199,17 +204,18 @@ def traffic_flow_plan(truck):
walk_time_to_excavator
=
traffic_programme_para
.
walk_time_to_excavator
walk_time_to_excavator
=
traffic_programme_para
.
walk_time_to_excavator
walk_time_to_dump
=
traffic_programme_para
.
walk_time_to_dump
walk_time_to_dump
=
traffic_programme_para
.
walk_time_to_dump
truck_total_num
=
traffic_programme_para
.
truck_total_num
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
dump_hold_truck_num
=
traffic_programme_para
.
dump_hold_truck_num
excavator_hold_truck_num
=
traffic_programme_para
.
excavator_hold_truck_num
excavator_hold_truck_num
=
traffic_programme_para
.
excavator_hold_truck_num
print
(
w_ij
,
s_ij
,
b_excavator
,
b_dump
)
cost_to_excavator
=
traffic_programme_para
.
cost_to_excavator
cost_to_dump
=
traffic_programme_para
.
cost_to_dump
logger
.
info
(
"车流规划参数"
)
logger
.
info
(
" "
)
res
=
transportation_problem_slove
(
coefficient_goto_dump
,
coefficient_goto_excavator
,
w_ij
,
s_ij
,
b_excavator
,
b_dump
,
res
=
transportation_problem_slove
(
coefficient_goto_dump
,
coefficient_goto_excavator
,
w_ij
,
s_ij
,
b_excavator
,
b_dump
,
grade_loading_array
,
max_unload_weigh_alg_flag
,
truck_total_num
,
grade_loading_array
,
max_unload_weigh_alg_flag
,
truck_total_num
,
walk_time_to_excavator
,
walk_time
_to_dump
,
min_throughout
,
cost_to_excavator
,
cost
_to_dump
,
min_throughout
,
grade_upper_dump_array
,
grade_lower_dump_array
,
grade_upper_dump_array
,
grade_lower_dump_array
,
dump_hold_truck_num
,
excavator_hold_truck_num
)
dump_hold_truck_num
,
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