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
a9d69a45
Commit
a9d69a45
authored
Jan 25, 2024
by
Allvey
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
穿越装载区优化-独立分支
parent
1aba9343
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
44 additions
and
68 deletions
+44
-68
config.json
config.json
+3
-3
group.py
core/group.py
+0
-0
excavator.py
equipment/excavator.py
+1
-1
truck.py
equipment/truck.py
+1
-1
settings.py
settings.py
+2
-2
area_analysis.py
util/area_analysis.py
+37
-61
No files found.
config.json
View file @
a9d69a45
{
"para"
:
{
"log_path"
:
"/Users/guoao/Desktop/Log"
,
"empty_speed"
:
1
5
,
"heavy_speed"
:
1
5
,
"empty_speed"
:
1
0
,
"heavy_speed"
:
1
0
,
"dump_target_mass"
:
5000
,
"excavator_target_mass"
:
5000
},
...
...
@@ -27,6 +27,6 @@
"gothrough"
:
{
"closer_area_name"
:
"装-2"
,
"further_area_name"
:
"装1"
,
"factor"
:
"0.
4
"
"factor"
:
"0.
2
"
}
}
core/group.py
View file @
a9d69a45
This diff is collapsed.
Click to expand it.
equipment/excavator.py
View file @
a9d69a45
...
...
@@ -83,7 +83,7 @@ class ExcavatorInfo(WalkManage):
self
.
logger
.
info
(
self
.
loading_time
)
self
.
logger
.
info
(
"excavator_uuid_to_index_dict"
)
self
.
logger
.
info
(
self
.
excavator_uuid_to_index_dict
)
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
3
0
.00
self
.
loading_time
[
self
.
excavator_uuid_to_index_dict
[
excavator_id
]]
=
3.00
# 更新挖机设备出入时间
def
update_excavator_entrance_exit_time
(
self
):
...
...
equipment/truck.py
View file @
a9d69a45
...
...
@@ -937,7 +937,7 @@ class TruckInfo(WalkManage):
# 更新卡车当前任务
self
.
update_truck_current_task
()
self
.
update_truck_is_temp
()
#
self.update_truck_is_temp()
# 更新卡车最后一次装载/卸载时间
self
.
update_truck_last_leave_time
()
...
...
settings.py
View file @
a9d69a45
...
...
@@ -69,8 +69,8 @@ def set_log():
# timefilehandler = logging.handlers.TimedRotatingFileHandler(log_path + "/dispatch.log", when='M', interval=1, backupCount=60)
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
log_path
+
"/dispatch.log"
,
maxBytes
=
30
*
1024
*
1024
,
backupCount
=
10
,
encoding
=
"utf-8"
)
#
filehandler = logging.handlers.RotatingFileHandler("./Logs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10, encoding="utf-8")
#
filehandler = logging.handlers.RotatingFileHandler(log_path + "/dispatch.log", maxBytes=30*1024*1024, backupCount=10, encoding="utf-8")
filehandler
=
logging
.
handlers
.
RotatingFileHandler
(
"./Logs/dispatch.log"
,
maxBytes
=
3
*
1024
*
1024
,
backupCount
=
10
,
encoding
=
"utf-8"
)
# 设置后缀名称,跟strftime的格式一样
filehandler
.
suffix
=
"
%
Y-
%
m-
%
d_
%
H-
%
M.log"
...
...
util/area_analysis.py
View file @
a9d69a45
...
...
@@ -13,10 +13,18 @@ import json
import
random
def
area_choose
(
excavators_id
,
closer_area_id
,
further_area_id
,
further_lane_set
,
closer_lane_set
,
logger
,
truck
,
truck_locates_dict
,
closer_excavator_state
,
further_excavator_state
):
def
area_choose
(
request_truck_id
,
excavators_id
,
closer_area_id
,
further_area_id
,
further_lane_set
,
closer_lane_set
,
logger
,
truck
,
truck_locates_dict
,
closer_excavator_state
,
further_excavator_state
,
sys_start_time
,
loading_time
):
"""
两装载区均不空闲,执行二次调度
装载区选择
:param sys_start_time:
:param closer_lane_set:
:param further_excavator_state:
:param further_lane_set:
:param request_truck_id:
:param loading_time:
:param closer_excavator_state:
:param excavators_id: 挖机集合
:param closer_area_id: 近端装载区id
:param further_area_id: 远端装载区id
...
...
@@ -53,100 +61,68 @@ def area_choose(excavators_id, closer_area_id, further_area_id, further_lane_set
logger
.
info
(
arrival_truck_list
)
logger
.
info
(
f
"输入的closer_lane_set{closer_lane_set}"
)
closer_lane_set_nearest
=
[
closer_lane_set
[
0
]]
closer_lane_two
=
closer_lane_set
[:
2
]
# 前往装载的车的数量
arrival_truck_num
=
len
(
arrival_truck_set
)
# 统计不同状态车辆数量
goto_closer_area_num
=
0
goto_further_area_num
=
0
before_cross_num
=
0
lane_two_num
=
0
# 统计车辆剩余行驶时间
closer_remaining_trip_time
=
0
further_remaining_trip_time
=
0
# 当前相对时间
relative_now_time
=
max
(
0.0
,
float
((
datetime
.
now
()
-
sys_start_time
)
/
timedelta
(
hours
=
0
,
minutes
=
1
,
seconds
=
0
)))
for
truck_id
,
reach_time
in
arrival_truck_list
:
if
truck_id
==
request_truck_id
:
continue
if
truck_id
in
truck_locates_dict
:
truck_lane_id
=
truck_locates_dict
[
truck_id
]
# 车辆已经经过近端装载区
if
truck_lane_id
in
further_lane_set
:
# 前往远端装载区车辆数加1
goto_further_area_num
+=
1
# 车辆未经过近端装载区
if
truck_lane_id
in
closer_lane_two
:
# 在装载区外2个车道
lane_two_num
+=
1
# 车辆未经过近端装载区
if
truck_lane_id
in
closer_lane_set_nearest
:
further_remaining_trip_time
+=
(
max
(
0
,
max
(
0.0
,
float
(
reach_time
-
relative_now_time
)))
+
loading_time
)
elif
truck_lane_id
in
closer_lane_set
:
# 前往近端或近端装载区车辆数加1
goto_closer_area_num
+=
1
else
:
before_cross_num
+=
1
closer_remaining_trip_time
+=
(
max
(
0
,
max
(
0.0
,
float
(
reach_time
-
relative_now_time
)))
+
loading_time
)
else
:
continue
import
datetime
# 获取当前时间
current_time
=
datetime
.
datetime
.
now
()
current_time
=
datetime
.
now
()
# 打印当前时间
logger
.
info
(
f
"近端挖机状态{closer_excavator_state} 当前时间{current_time}"
)
logger
.
info
(
f
"
近端装载区外第一路段等待
车辆数{goto_closer_area_num}"
)
logger
.
info
(
f
"
已经前往近端的
车辆数{goto_closer_area_num}"
)
logger
.
info
(
f
"远端挖机状态{further_excavator_state}"
)
logger
.
info
(
f
"远端挖机状态{further_excavator_state}
当前时间{current_time}
"
)
logger
.
info
(
f
"已经前往远端的车辆数{goto_further_area_num}"
)
logger
.
info
(
before_cross_num
)
# # 近端挖机空闲
# if closer_excavator_state == 0 and goto_closer_area_num == 0:
# logger.info("近端挖机空闲, 调度车辆前往近端装载区")
# target_excavator = DispatchInfo.load_excavator_dict[closer_area_id]
# # truck_dispatch_to_redis(request_truck_id, group_id, DispatchInfo.load_excavator_dict[closer_area_id])
# # 远端挖机空闲
# elif further_excavator_state == 0 and goto_further_area_num == 0:
# logger.info("远端挖机空闲, 调度车辆前往远端装载区")
# target_excavator = DispatchInfo.load_excavator_dict[further_area_id]
# # truck_dispatch_to_redis(request_truck_id, group_id, DispatchInfo.load_excavator_dict[further_area_id])
# # 两挖机均不空闲
# else:
# # goto_further_area_num -= 1
# logger.info("goto_further_area_num-goto_closer_area_num")
# logger.info(goto_further_area_num)
# logger.info(goto_closer_area_num)
# # 默认当前请调车辆与近端装载点前没有车辆,因此前往近端装载区的车辆仅其本身
# # goto_closer_area_num = 1
# # 在远处排队等待的车辆更少
# if goto_closer_area_num + before_cross_num > goto_further_area_num:
# logger.info("远端挖机排队时间短, 调度车辆前往")
# target_excavator = DispatchInfo.load_excavator_dict[further_area_id]
# # truck_dispatch_to_redis(request_truck_id, group_id, DispatchInfo.load_excavator_dict[further_area_id])
# else:
# logger.info("近端挖机排队时间短, 调度车辆前往")
# target_excavator = DispatchInfo.load_excavator_dict[closer_area_id]
# # truck_dispatch_to_redis(request_truck_id, group_id, DispatchInfo.load_excavator_dict[closer_area_id])
try
:
with
open
(
json_file
,
encoding
=
'UTF-8'
)
as
f
:
load_value
=
json
.
load
(
f
)
gothrough_config_area
=
load_value
[
"gothrough"
]
dispatch_factor
=
float
(
gothrough_config_area
[
"factor"
])
logger
.
info
(
f
'closer_remaining_time: {closer_remaining_trip_time}, further_remaining_time: {further_remaining_trip_time}'
)
# 近端挖机空闲
if
closer_excavator_state
==
0
:
logger
.
info
(
f
"穿越调度:近端挖机空闲, 调度车辆前往近端装载区,远端派车数量{goto_further_area_num},空载车总数{arrival_truck_num}"
)
target_excavator
=
DispatchInfo
.
load_excavator_dict
[
closer_area_id
]
# 远端挖机空闲
# if further_excavator_state == 0 and goto_further_area_num == 0:
elif
goto_further_area_num
==
0
:
elif
goto_further_area_num
==
0
and
further_excavator_state
==
0
:
logger
.
info
(
f
"穿越调度:远端挖机空闲, 调度车辆前往远端装载区,远端派车数量{goto_further_area_num},空载车总数{arrival_truck_num}"
)
target_excavator
=
DispatchInfo
.
load_excavator_dict
[
further_area_id
]
# elif closer_excavator_state == 0 and lane_two_num <= 1:
# logger.info(f"穿越调度:近端挖机空闲, 调度车辆前往近端装载区,远端派车数量{goto_further_area_num},空载车总数{arrival_truck_num}")
# target_excavator = DispatchInfo.load_excavator_dict[closer_area_id]
# 远端挖机已满载
elif
goto_further_area_num
>=
int
(
dispatch_factor
*
arrival_truck_num
)
:
elif
further_remaining_trip_time
>=
closer_remaining_trip_time
:
logger
.
info
(
f
"穿越调度:远端挖机满载, 调度车辆前往近端装载区,远端派车数量{goto_further_area_num},空载车总数{arrival_truck_num}"
)
target_excavator
=
DispatchInfo
.
load_excavator_dict
[
closer_area_id
]
# 近端挖机已满载
...
...
@@ -404,9 +380,9 @@ def get_excavator_prise_location(excavator_id):
logger
.
info
(
f
"正在获取的挖机id:{excavator_id}"
)
device_name
=
session_mysql
.
query
(
Equipment
)
.
filter_by
(
id
=
excavator_id
,
device_type
=
2
)
.
first
()
.
device_name
are_entrance_key
=
str
(
"Area_"
+
device_name
)
key_value_dict
=
json
.
loads
(
byte_to_str
(
redis0
.
get
(
are_entrance_key
)))
loc_str
=
key_value_dict
[
'Entrance'
]
.
split
(
","
)
are
a
_entrance_key
=
str
(
"Area_"
+
device_name
)
key_value_dict
=
json
.
loads
(
byte_to_str
(
redis0
.
get
(
are
a
_entrance_key
)))
loc_str
=
key_value_dict
[
'Entrance'
]
.
split
(
","
)
longitude
=
float
(
loc_str
[
0
])
latitude
=
float
(
loc_str
[
1
])
...
...
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