Commit 2927681e authored by Allvey's avatar Allvey

分流配比改进

parent e3f3cb42
......@@ -394,10 +394,16 @@ class DistributionRatio(object):
# 获取当前正在前往卸载车辆情况
current_heading_to_unload_area_trucks = self.get_current_heading_to_unload_area_truck()
self.logger.info("current_heading_to_unload_area_trucks")
self.logger.info(current_heading_to_unload_area_trucks)
# 计算逻辑累计产量
logic_cumulative_output = {k: recent_unload_area_output[k] + current_heading_to_unload_area_trucks[k]
for k in recent_unload_area_output}
self.logger.info("logic_cumulative_output")
self.logger.info(logic_cumulative_output)
# 获取分流比例
DispatchInfo.get_exactor_unload_match(self.excavator_id)
......@@ -406,6 +412,9 @@ class DistributionRatio(object):
for item in self.group.group_unload_areas:
unload_ratio[item] = DispatchInfo.unload_rate_dict[item]
self.logger.info("unload_ratio")
self.logger.info(unload_ratio)
# 逻辑累计产量与分流比例比值
logic_cumulative_output = {k: float(logic_cumulative_output[k]) / unload_ratio[k] for k in logic_cumulative_output}
......@@ -414,7 +423,6 @@ class DistributionRatio(object):
return target_unload_area
def get_cumulative_production(self):
"""
Get unloading point yield in the past hour.
......@@ -424,8 +432,11 @@ class DistributionRatio(object):
recent_unload_area_output = {}
recent_duration = datetime.now() - timedelta(hours=1)
for unload_area_id in self.group.group_unload_areas:
recent_unload_area_output[unload_area_id] = \
len(session_mysql.query(RecordTruckOutput).filter_by(unload_area_id=unload_area_id).all())
recent_unload_area_output[unload_area_id] = len(session_mysql.query(RecordTruckOutput).
filter(RecordTruckOutput.end_time > recent_duration,
RecordTruckOutput.unload_area_id == unload_area_id).all())
return recent_unload_area_output
def get_current_heading_to_unload_area_truck(self):
......@@ -435,18 +446,17 @@ class DistributionRatio(object):
current_heading_to_unload_area_trucks = {}
for truck_info in self.group.truck_info_list:
trip = truck_info.get_trip()
if trip in [3, 4]:
for unload_area_id in self.group.group_unload_areas:
current_heading_to_unload_area_trucks[unload_area_id] = 0
for truck_info in self.group.truck_info_list.values():
task = truck_info.get_task()
if task in [3, 4]:
heading_unload_area = truck_info.get_combined_unload_area()
current_heading_to_unload_area_trucks[heading_unload_area] += 1
return current_heading_to_unload_area_trucks
def get_unload_ratio(self):
"""
@date:2022/7/19 15:21
......
......@@ -31,10 +31,10 @@ class Dispatcher:
self.request_mode = request_mode
self.logger = get_logger("zxt.dispatcher")
self.redispatch_active = active
# if self.redispatch_active:
# self.topo = Topo()
# self.topo.generate_topo_graph()
# else:
if self.redispatch_active:
self.topo = Topo()
self.topo.generate_topo_graph()
else:
self.topo = None
self.submission = DispatchSubmission(dump, excavator, truck, self.topo)
......
......@@ -419,7 +419,7 @@ class GroupDispatcher:
for truck_id in list(self.group.group_trucks):
try:
# try:
# construct CurrentTruck obj.
current_truck = self.truck_construct(truck_id)
......@@ -451,9 +451,9 @@ class GroupDispatcher:
self.logger.info(
f'============================= 车辆调度结束 {current_truck.get_name()} =============================')
except Exception as es:
self.logger.error("调度调用异常")
self.logger.error(es)
# except Exception as es:
# self.logger.error("调度调用异常")
# self.logger.error(es)
self.logger.info(
f'================================== 分组调度结束 {self.group.group_name} ==================================')
......@@ -462,15 +462,16 @@ class GroupDispatcher:
def ratio_mode(self, i, truck_dispatch, truck_info):
solver = DistributionRatio(self.group, truck_info, truck_info.get_combined_excavator())
# next_excavator_id = truck_info.get_combined_excavator()
next_excavator_id = DispatchInfo.get_truck_exactor(i) # 获取该卡车对应的 excavator_id
solver = DistributionRatio(self.group, truck_info, next_excavator_id)
next_exactor_id = truck_info.get_combined_excavator()
# next_exactor_id = DispatchInfo.get_truck_exactor(i) # 获取该卡车对应的exactor_id
self.logger.info(f"分流配比模式,对应的卡车:{i}")
self.logger.info(f"矿卡对应的铲车:{next_exactor_id}")
self.logger.info(f"矿卡对应的铲车:{next_excavator_id}")
next_unload_area_id = None
truck_task = truck_info.get_trip()
truck_task = truck_info.get_task()
if truck_task == -2:
......@@ -479,7 +480,7 @@ class GroupDispatcher:
# 空载模式下,计算下一次卸载区的位置,按照分流配比的模式进行计算
elif truck_task in [0, 1, 2]:
try:
# try:
if i in self.group.truck.truck_dump_bind:
dump_uuid_to_unload_area_uuid_dict = get_value("dump_uuid_to_unload_area_uuid_dict")
......@@ -490,10 +491,10 @@ class GroupDispatcher:
next_unload_area_id = solver.solve()
except Exception as es:
self.logger.error("分流配比模式-->>空载车辆计算异常")
self.logger.error(es)
# except Exception as es:
#
# self.logger.error("分流配比模式-->>空载车辆计算异常")
# self.logger.error(es)
# 重载模式下,按照固定派车进行计算
elif truck_task in [3, 4, 5]:
......@@ -508,7 +509,10 @@ class GroupDispatcher:
self.logger.error(es)
truck_dispatch[i] = [next_exactor_id, next_unload_area_id]
truck_dispatch[i] = [next_excavator_id, next_unload_area_id]
self.logger.info(f'调度结果 next_excavator_id: '
f'{next_excavator_id} next_unload_area_id: {next_unload_area_id}')
def semi_dynamic_mode(self, i, s, truck_dispatch, truck_info):
# TODO:和全智能调度很像,是否可以合并合;
......
......@@ -504,15 +504,28 @@ class DispatchEquipment(Base):
self.equipment_id = equipment_id
# class RecordTruckOutput(Base):
# __tablename__ = 'record_truck_output'
# end_time = Column(DateTime)
# id = Column(Integer, primary_key=True)
# unload_area_id = Column(VARCHAR(36))
# equipment_id = Column(VARCHAR(36))
#
# def __init__(self, id, unload_area_id, equipment_id, end_time):
# self.id = id
# self.end_time = end_time
# self.unload_area_id = unload_area_id
# self.equipment_id = equipment_id
class RecordTruckOutput(Base):
__tablename__ = 'record_truck_output'
end_dump_time = Column(DateTime)
id = Column(Integer, primary_key=True)
id = Column(VARCHAR(36), primary_key=True)
unload_area_id = Column(VARCHAR(36))
equipment_id = Column(VARCHAR(36))
end_time = Column(DateTime)
def __init__(self, id, unload_area_id, equipment_id, end_dump_time):
def __init__(self, id, unload_area_id, end_time ):
self.id = id
self.end_dump_time = end_dump_time
self.unload_area_id = unload_area_id
self.equipment_id = equipment_id
self.end_time = end_time
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