Commit a9d69a45 authored by Allvey's avatar Allvey

穿越装载区优化-独立分支

parent 1aba9343
{
"para": {
"log_path": "/Users/guoao/Desktop/Log",
"empty_speed": 15,
"heavy_speed": 15,
"empty_speed": 10,
"heavy_speed": 10,
"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"
}
}
This diff is collapsed.
......@@ -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]] = 30.00
self.loading_time[self.excavator_uuid_to_index_dict[excavator_id]] = 3.00
# 更新挖机设备出入时间
def update_excavator_entrance_exit_time(self):
......
......@@ -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()
......
......@@ -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"
......
......@@ -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(",")
area_entrance_key = str("Area_" + device_name)
key_value_dict = json.loads(byte_to_str(redis0.get(area_entrance_key)))
loc_str = key_value_dict['Entrance'].split(",")
longitude = float(loc_str[0])
latitude = float(loc_str[1])
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment