Commit f9fbad85 authored by 张晓彤's avatar 张晓彤

增加等待时间算法

parent 0568d879
{
"para": {
"log_path": "/Users/guoao/Desktop/work_log/wek33/integrated-scheduling-v3-master/dispatch",
"log_path": "E:\\Pycharm Projects\\Waytous\\",
"empty_speed": 25,
"heavy_speed": 22,
"dump_target_mass": 5000,
......@@ -28,4 +27,4 @@
"host": "192.168.9.152",
"password": "Huituo@123"
}
}
}
\ No newline at end of file
......@@ -170,22 +170,20 @@ class Dispatcher(WalkManage):
"""
def __init__(self, dump, excavator, truck, predict_schedule,topo):
def __init__(self, dump, excavator, truck, predict_schedule):
# 调度开始时间
self.start_time = datetime.now()
# 路径规划对象
self.path = PathPlanner(topo)
# self.path = PathPlanner()
# self.topo = Topo()
self.path = PathPlanner()
# 车流对象
# self.traffic_flow = Traffic_flow(dump, excavator, truck)
self.traffic_flow = None
# 分组控制对象
self.group = Group(dump, excavator, truck, self.traffic_flow, topo)
self.group = Group(dump, excavator, truck, self.traffic_flow)
# 行程预测对象
self.pre_sch = predict_schedule
......@@ -201,7 +199,7 @@ class Dispatcher(WalkManage):
# 获取日志器
self.logger = get_logger("zxt.dispatcher")
def dispatcher_period_update(self,topo):
def dispatcher_period_update(self):
global_period_para_update()
......@@ -223,7 +221,7 @@ class Dispatcher(WalkManage):
self.cost_to_excavator, self.cost_to_dump, self.cost_park_to_excavator = self.path.walk_cost_cal()
# 调度分组更新
self.group.period_update(topo)
self.group.period_update()
def truck_schedule(self, truck_id):
# 规则读取
......
......@@ -38,7 +38,6 @@ class DumpInfo(WalkManage):
# # 参数初始化
# self.dump_para_period_update()
def get_unloading_time(self):
return self.unloading_time
......@@ -203,4 +202,4 @@ class DumpInfo(WalkManage):
self.update_unload_ability()
#
# # 卸载目标产量
# self.dump_target_mass = np.full(self.dynamic_dump_num, dump_target_mass)
# self.dump_target_mass = np.full(self.dynamic_dump_num, dump_target_mass)
\ No newline at end of file
......@@ -53,8 +53,7 @@ class ExcavatorInfo(WalkManage):
# 更新挖机装载时间
def update_excavator_loadtime(self):
load_area_id = {}
dump_area_id = {}
self.loading_time = np.zeros(self.dynamic_excavator_num)
for excavator_id in self.excavator_uuid_to_index_dict.keys():
......
......@@ -8,12 +8,11 @@
from settings import *
from para_config import *
from path_plan.path_planner_2 import *
# from path_plan.path_plannner import *
from path_plan.path_plannner import PathPlanner
from traffic_flow.traffic_flow_planner import traffic_flow_plan
class Group(WalkManage):
def __init__(self, dump, excavator, truck, traffic_flow, topo):
def __init__(self, dump, excavator, truck, traffic_flow):
self.dump = dump
self.excavator = excavator
self.truck = truck
......@@ -41,9 +40,7 @@ class Group(WalkManage):
self.group_excavator_material_bind_modify = {}
self.group_dump_material_bind_modify = {}
self.path = PathPlanner(topo)
# self.path = PathPlanner()
# self.topo = Topo()
self.path = PathPlanner()
def update_dispatch_truck_group(self):
# 更新矿卡-调度分组隶属关系
......@@ -97,11 +94,15 @@ class Group(WalkManage):
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((dynamic_excavator_num, dynamic_dump_num))
self.goto_excavator_truck_num = np.zeros((dynamic_dump_num, dynamic_excavator_num))
self.actual_goto_excavator_traffic_flow = np.zeros((dynamic_dump_num, dynamic_excavator_num))
self.actual_goto_dump_traffic_flow = np.zeros(
(dynamic_excavator_num, dynamic_dump_num)
)
self.goto_excavator_truck_num = np.zeros(
(dynamic_dump_num, dynamic_excavator_num)
)
self.actual_goto_excavator_traffic_flow = np.zeros(
(dynamic_dump_num, dynamic_excavator_num)
)
# try:
logger.info("dynamic_truck_num")
......@@ -147,7 +148,7 @@ class Group(WalkManage):
)
)
def update_group_truck_flow(self, topo):
def update_group_truck_flow(self):
# 更新调度分组内车实时/最佳车流
......@@ -156,7 +157,7 @@ class Group(WalkManage):
actual_goto_excavator_traffic_flow, actual_goto_dump_traffic_flow = \
self.traffic_flow.actual_goto_excavator_traffic_flow, self.traffic_flow.actual_goto_dump_traffic_flow
opt_goto_dump_traffic_flow, opt_goto_excavator_traffic_flow = traffic_flow_plan(self.truck, topo)
opt_goto_dump_traffic_flow, opt_goto_excavator_traffic_flow = traffic_flow_plan(self.truck)
try:
......@@ -171,7 +172,6 @@ class Group(WalkManage):
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)))
local_actual_goto_excavator_traffic_flow = np.zeros((len(dump_group), len(excavator_group)))
for excavator_id in excavator_group:
......@@ -420,13 +420,14 @@ class Group(WalkManage):
return group_allow_flow_to_dump
def period_update(self,topo):
def period_update(self):
self.reset()
self.update_dispatch_truck_group()
self.update_group_set()
self.update_device_group()
self.update_group_device_map()
self.update_group_walk_cost()
# self.update_group_truck_flow()
self.update_modify()
def get_diaptch_truck_group(self):
......@@ -459,4 +460,4 @@ class Group(WalkManage):
self.group_excavator_exclude_modify = {}
self.group_excavator_material_bind_modify = {}
self.group_dump_material_bind_modify = {}
self.group_dump_material_bind_modify = {}
\ No newline at end of file
......@@ -120,11 +120,10 @@ class PathPlanner(WalkManage):
to_unload_cost = alpha * cost_to_unload_blockage + beta * path.to_unload_distance
to_load_cost = alpha * cost_to_load_blockage + beta * path.to_load_distance
print("拥堵因子-挖机")
print(alpha, cost_to_load_blockage)
print("拥堵因子-卸点")
print(alpha, cost_to_unload_blockage)
# print("拥堵因子-挖机")
# print(alpha, cost_to_load_blockage)
# print("拥堵因子-卸点")
# print(alpha, cost_to_unload_blockage)
except Exception as es:
logger.error(f'道路{load_area_id + "-" + unload_area_id}行驶成本计算异常')
logger.error(es)
......
......@@ -11,7 +11,6 @@ from equipment.dump import *
from equipment.excavator import *
from para_config import *
from path_plan.topo_graph import *
class PriorityController():
......@@ -20,7 +19,6 @@ class PriorityController():
self.dump = dump
self.excavator = excavator
self.truck = truck
self.topo = Topo()
# 获取日志器
self.logger = get_logger("zxt.prio")
......@@ -45,7 +43,6 @@ class PriorityController():
dump_material_priority = np.ones(dynamic_dump_num)
park_walk_weight = np.ones((park_num, dynamic_excavator_num))
# 检测设备优先级是否启动
rule6 = session_mysql.query(DispatchRule).filter_by(id=6).first()
if not rule6.disabled:
......@@ -57,7 +54,6 @@ class PriorityController():
walk_to_dump_weight[excavator_inedx][dump_index] += dump_priority[dump_index]
park_walk_weight = park_walk_weight * self.excavator.excavator_priority_coefficient
# 检测物料优先级是否启动
rule7 = session_mysql.query(DispatchRule).filter_by(id=7).first()
if not rule7.disabled:
......
......@@ -14,7 +14,6 @@ from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo
import sched
import time
from path_plan.topo_graph import *
from dispatcher import Dispatcher, PreSchedule
......@@ -76,7 +75,6 @@ def main(inc, dispatcher):
:param dispatcher: (Dispatch Class) 矿卡调度类对象
:return: None
"""
# topo.generate_topo_graph()
scheduler.enter(0, 0, perform, (inc, dispatcher))
scheduler.run()
......@@ -96,14 +94,6 @@ if __name__ == "__main__":
excavator = ExcavatorInfo()
truck = TruckInfo(dump, excavator)
# 实例化拓扑图对象,生成拓扑图
# print('开始')
topo = Topo()
topo.generate_topo_graph()
logger.info('拓扑图已生成')
# print(topo.get_load_G().edges(data=True))
# print(topo.get_unload_G().edges(data=True))
# 实例化程序调度器
scheduler = sched.scheduler(time.time, time.sleep)
......@@ -111,7 +101,7 @@ if __name__ == "__main__":
pre_sch = PreSchedule(truck, excavator, dump)
# 实例化矿卡调度器
dispatcher = Dispatcher(dump, excavator, truck, pre_sch, topo)
dispatcher = Dispatcher(dump, excavator, truck, pre_sch)
logger.info(" ")
logger.info("调度系统启动")
......
......@@ -9,29 +9,29 @@
# 数据库设备, redis设置, 日志设置
from tables import *
# from urllib.parse import quote
# import logging.handlers
# import numpy as np
# import os
# from redis import StrictRedis, ConnectionPool
# import redis
# from datetime import datetime, timedelta
# import copy
# import json
# json_file = "config.json"
#
# with open(json_file) as f:
# para_config = json.load(f)["para"]
#
# with open(json_file) as f:
# mysql_config = json.load(f)["mysql"]
#
# with open(json_file) as f:
# postgre_config = json.load(f)["postgresql"]
#
# with open(json_file) as f:
# redis_config = json.load(f)["redis"]
from urllib.parse import quote
import logging.handlers
import numpy as np
import os
from redis import StrictRedis, ConnectionPool
import redis
from datetime import datetime, timedelta
import copy
import json
json_file = "config.json"
with open(json_file) as f:
para_config = json.load(f)["para"]
with open(json_file) as f:
mysql_config = json.load(f)["mysql"]
with open(json_file) as f:
postgre_config = json.load(f)["postgresql"]
with open(json_file) as f:
redis_config = json.load(f)["redis"]
# 全局参数
########################################################################################################################
......@@ -47,6 +47,7 @@ dump_target_mass = para_config["dump_target_mass"]
# 挖机目标装载量
excavator_target_mass = para_config["excavator_target_mass"]
def set_log():
# 创建日志
......
......@@ -16,29 +16,17 @@ from sqlalchemy.orm import sessionmaker, scoped_session
from sqlalchemy.ext.declarative import declarative_base
from urllib.parse import quote
import json
from urllib.parse import quote
import logging.handlers
import numpy as np
import os
from redis import StrictRedis, ConnectionPool
import redis
from datetime import datetime, timedelta
import copy
import json
# import logging.handlers
import settings
json_file = "config.json"
with open(json_file) as f:
para_config = json.load(f)["para"]
with open(json_file) as f:
mysql_config = json.load(f)["mysql"]
with open(json_file) as f:
postgre_config = json.load(f)["postgresql"]
# logger = get_logger("zxt.tables")
# # 创建对象的基类:
# Base = declarative_base()
#
......@@ -193,7 +181,6 @@ class WalkTime(Base):
to_unload_distance = Column(Float(10))
to_load_distance = Column(Float(10))
to_unload_lanes = Column(VARCHAR(100))
to_unload_lanes = Column(VARCHAR(100))
to_load_lanes = Column(VARCHAR(100))
def __init__(self, load_area_id, unload_area_id, load_area_name, unload_area_name, to_load_distance,
......@@ -286,15 +273,15 @@ class EquipmentPair(Base):
self.isdeleted = isdeleted
self.createtime = createtime
class Node(Base):
# 表的名字
__tablename__ = 'Geo_Node'
Id = Column(VARCHAR(36), primary_key=True)
Name = Column(VARCHAR(64))
def __init__(self, Id, Name):
self.Id = Id
self.Name = Name
# class Lane(Base):
# # 表的名字
# __tablename__ = 'Geo_Node'
# Id = Column(VARCHAR(36), primary_key=True)
# LaneIds = Column(VARCHAR(100))
#
# def __init__(self, Id, LaneIds):
# self.Id = Id
# self.LaneIds = LaneIds
class Lane(Base):
# 表的名字
......@@ -302,15 +289,11 @@ class Lane(Base):
Id = Column(VARCHAR(36), primary_key=True)
Length = Column(Float)
MaxSpeed = Column(Float)
StartNodeId = Column(VARCHAR(50))
EndNodeId = Column(VARCHAR(50))
def __init__(self, Id, Length, MaxSpeed, StartNodeId, EndNodeId):
def __init__(self, Id, Length, MaxSpeed):
self.Id = Id
self.Length = Length
self.MaxSpeed = MaxSpeed
self.StartNodeId = StartNodeId
self.EndNodeId = EndNodeId
class Dispatch(Base):
# 表的名字:
......@@ -475,20 +458,14 @@ class DumpArea(Base):
Disabled = Column(Integer)
Material = Column(VARCHAR(36))
Priority = Column(Integer)
EntranceNodeId = Column(VARCHAR(50))
ExitNodeId = Column(VARCHAR(50))
Name = Column(VARCHAR(36))
def __init__(self, Id, BindList, UnloadAbililty, Disabled, Material, Priority,EntranceNodeId,ExitNodeId, Name):
def __init__(self, Id, BindList, UnloadAbililty, Disabled, Material, Priority):
self.Id = Id
self.BindList = BindList
self.UnloadAbililty = UnloadAbililty
self.Disabled = Disabled
self.Material = Material
self.Priority = Priority
self.EntranceNodeId = EntranceNodeId
self.ExitNodeId = ExitNodeId
self.Name = Name
class DiggingWorkArea(Base):
......@@ -496,14 +473,10 @@ class DiggingWorkArea(Base):
Id = Column(VARCHAR(50), primary_key=True)
Material = Column(VARCHAR(36))
EntranceNodeId = Column(VARCHAR(50))
ExitNodeId = Column(VARCHAR(50))
def __init__(self, Id, Material, EntranceNodeId, ExitNodeId):
def __init__(self, Id, Material):
self.Id = Id
self.Material = Material
self.EntranceNodeId = EntranceNodeId
self.ExitNodeId = ExitNodeId
class DispatchRule(Base):
......
......@@ -7,8 +7,7 @@
# @Software: PyCharm
# import
from path_plan.path_planner_2 import *
# from path_plan.path_plannner import *
from path_plan.path_plannner import *
from para_config import *
from equipment.excavator import ExcavatorInfo
from equipment.dump import DumpInfo
......@@ -127,7 +126,7 @@ class Traffic_flow(WalkManage):
# 车流规划类
class Traffic_para(WalkManage):
def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck, topo):
def __init__(self, num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck):
self.num_of_dump = num_of_dump
self.num_of_excavator = num_of_excavator
self.num_of_load_area = num_of_load_area
......@@ -163,9 +162,7 @@ class Traffic_para(WalkManage):
self.excavator_strength = np.zeros(num_of_excavator) # 用于保存电铲的工作强度,单位是t/h
self.dump_strength = np.zeros(num_of_dump) # 卸载点的工作强度,单位是t/h
# self.topo = Topo()
self.path_planner = PathPlanner(topo)
# self.path_planner = PathPlanner()
self.path_planner = PathPlanner()
self.path_planner.walk_cost_cal()
self.excavator_priority_coefficient = np.ones(num_of_excavator) # 每个电铲的优先级系数
......@@ -312,11 +309,11 @@ class Traffic_para(WalkManage):
# 初始化车流规划类
def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck, topo):
def Traffic_para_init(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck):
# try:
tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck,topo)
tra_para = Traffic_para(num_of_load_area, num_of_unload_area, num_of_excavator, num_of_dump, truck)
tra_para.extract_excavator_info()
......
......@@ -145,7 +145,7 @@ def transportation_problem_slove(coefficient_goto_dump, coefficient_goto_excavat
'var_y': [[pulp.value(var_y[i][j]) for j in range(row)] for i in range(col)]}
def traffic_flow_plan(truck, topo):
def traffic_flow_plan(truck):
excavator_list = update_autodisp_excavator()
dump_list = update_autodisp_dump()
......@@ -182,7 +182,7 @@ def traffic_flow_plan(truck, topo):
# if (load_area_num * unload_area_num * excavator_num * dump_num == 0):
# raise Exception("无派车计划可用")
# 初始化参量
traffic_programme_para = Traffic_para_init(load_area_num, unload_area_num, excavator_num, dump_num, truck, topo)
traffic_programme_para = Traffic_para_init(load_area_num, unload_area_num, excavator_num, dump_num, truck)
# traffic_programme_para = traffic_programme_para_init(load_area_num, unload_area_num, excavator_num, dump_num)
# 系统是否以最大化产量为目标
max_unload_weigh_alg_flag = True
......
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