Commit 1fead6cf authored by Allvey's avatar Allvey

出入场时间

parent 882a1c66
# Default ignored files
/workspace.xml
\ No newline at end of file
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$/../WatoDisp-master" />
<content url="file://$MODULE_DIR$" />
<orderEntry type="jdk" jdkName="Python 3.7 (waytous)" jdkType="Python SDK" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="pytest" />
</component>
</module>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptSettings">
<option name="languageLevel" value="ES6" />
</component>
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.7 (waytous)" project-jdk-type="Python SDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/integrated-scheduling.iml" filepath="$PROJECT_DIR$/.idea/integrated-scheduling.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
...@@ -10,20 +10,12 @@ import numpy ...@@ -10,20 +10,12 @@ import numpy
from settings import * from settings import *
from static_data_process import * from static_data_process import *
from settings import * from settings import *
from para_config import *
load_area_uuid_to_index_dict, unload_area_uuid_to_index_dict, \
load_area_index_to_uuid_dict, unload_area_index_to_uuid_dict = build_work_area_uuid_index_map()
park_uuid_to_index_dict, park_index_to_uuid_dict = build_park_uuid_index_map()
load_area_num, unload_area_num = len(load_area_uuid_to_index_dict), len(unload_area_uuid_to_index_dict)
truck_uuid_to_name_dict, truck_name_to_uuid_dict = build_truck_uuid_name_map()
M = 1000000 M = 1000000
class PathPlanner: class PathPlanner(WalkManage):
def __init__(self): def __init__(self):
# 路线行驶成本 # 路线行驶成本
self.rout_cost = np.array((unload_area_num, load_area_num)) self.rout_cost = np.array((unload_area_num, load_area_num))
...@@ -37,11 +29,11 @@ class PathPlanner: ...@@ -37,11 +29,11 @@ class PathPlanner:
self.num_of_unload_area = len(set(update_unload_area())) self.num_of_unload_area = len(set(update_unload_area()))
# 备停区数量 # 备停区数量
self.num_of_park_area = len(set(update_park_area())) self.num_of_park_area = len(set(update_park_area()))
# 路网信息 # 路网行驶成本信息信息
self.walk_time_to_load_area = np.full((self.num_of_unload_area, self.num_of_load_area), M) self.cost_to_load_area = np.full((self.num_of_unload_area, self.num_of_load_area), M)
self.walk_time_to_unload_area = np.full((self.num_of_unload_area, self.num_of_load_area), M) self.cost_to_unload_area = np.full((self.num_of_unload_area, self.num_of_load_area), M)
# 路网信息(备停区) # 路网信息(备停区)
self.walk_time_park = np.full((self.num_of_park_area, self.num_of_load_area), M) self.cost_park_to_load_area = np.full((self.num_of_park_area, self.num_of_load_area), M)
# 路段类 # 路段类
self.lane = LaneInfo() self.lane = LaneInfo()
self.lane.lane_speed_generate() self.lane.lane_speed_generate()
...@@ -49,16 +41,16 @@ class PathPlanner: ...@@ -49,16 +41,16 @@ class PathPlanner:
def path_cost_generate(self, load_area_id, unload_area_id, is_park): def path_cost_generate(self, load_area_id, unload_area_id, is_park):
# 卸载道路阻塞成本初始化 # 卸载道路阻塞成本初始化
to_unload_blockage_cost = 0 cost_to_unload_blockage = 0
# 装载道路阻塞成本初始化 # 装载道路阻塞成本初始化
to_load_blockage_cost = 0 cost_to_load_blockage = 0
# 卸载道路总成本初始化 # 卸载道路总成本初始化
to_unload_cost = 0 to_unload_cost = 0
# 装载道路总成本初始化 # 装载道路总成本初始化
to_load_cost = 0 to_load_cost = 0
# 阻塞成本权重 # 阻塞成本权重
alpha = 500 alpha = 10000
# 距离成本权重 # 距离成本权重
beta = 1 beta = 1
...@@ -72,27 +64,27 @@ class PathPlanner: ...@@ -72,27 +64,27 @@ class PathPlanner:
# 读取道路路段信息 # 读取道路路段信息
for lane_id in path.park_load_lanes: for lane_id in path.park_load_lanes:
# 各路段阻塞成本累加 # 各路段阻塞成本累加
to_load_blockage_cost = to_load_blockage_cost + beta * self.lane_cost_generate(lane_id) cost_to_load_blockage = cost_to_load_blockage + beta * self.lane_cost_generate(lane_id)
# 道路总成本=道路距离成本+道路阻塞成本 # 道路总成本=道路距离成本+道路阻塞成本
to_load_cost = alpha * to_load_blockage_cost + beta * path.park_load_distance to_load_cost = alpha * cost_to_load_blockage + beta * path.park_load_distance
else: else:
path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id, path = session_postgre.query(WalkTime).filter_by(load_area_id=load_area_id,
unload_area_id=unload_area_id).first() unload_area_id=unload_area_id).first()
for lane_id in path.to_unload_lanes: for lane_id in path.to_unload_lanes:
to_unload_blockage_cost = to_unload_blockage_cost + self.lane_cost_generate(lane_id) cost_to_unload_blockage = cost_to_unload_blockage + self.lane_cost_generate(lane_id)
for lane_id in path.to_load_lanes: for lane_id in path.to_load_lanes:
to_load_blockage_cost = to_load_blockage_cost + self.lane_cost_generate(lane_id) cost_to_load_blockage = cost_to_load_blockage + self.lane_cost_generate(lane_id)
to_unload_cost = alpha * to_unload_blockage_cost + beta * path.to_unload_distance to_unload_cost = alpha * cost_to_unload_blockage + beta * path.to_unload_distance
to_load_cost = alpha * to_load_blockage_cost + beta * path.to_load_distance to_load_cost = alpha * cost_to_load_blockage + beta * path.to_load_distance
except Exception as es: except Exception as es:
logger.error(f'道路{load_area_id-unload_area_id}行驶成本计算异常') logger.error(f'道路{load_area_id-unload_area_id}行驶成本计算异常')
logger.error(es) logger.error(es)
return to_unload_cost, to_load_cost return to_load_cost, to_unload_cost
def lane_cost_generate(self, lane_id): def lane_cost_generate(self, lane_id):
try: try:
...@@ -119,39 +111,49 @@ class PathPlanner: ...@@ -119,39 +111,49 @@ class PathPlanner:
def walk_cost(self): def walk_cost(self):
try: self.period_walk_para_load()
# 读取路网距离信息 self.period_map_para_load()
walk_time_load_distance = np.full((self.num_of_unload_area, self.num_of_load_area), M)
walk_time_unload_distance = np.full((self.num_of_unload_area, self.num_of_load_area), M) try:
# 读取路网成本 # 读取路网成本
for walk_time in session_postgre.query(WalkTime).all(): for walk_time in session_postgre.query(WalkTime).all():
unload_area_index = unload_area_uuid_to_index_dict[str(walk_time.unload_area_id)] unload_area_index = unload_area_uuid_to_index_dict[str(walk_time.unload_area_id)]
load_area_index = load_area_uuid_to_index_dict[str(walk_time.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time.load_area_id)]
self.walk_time_to_load_area[unload_area_index][load_area_index], \ self.cost_to_load_area[unload_area_index][load_area_index], \
self.walk_time_to_unload_area[unload_area_index][load_area_index] = \ self.cost_to_unload_area[unload_area_index][load_area_index] = \
self.path_cost_generate(walk_time.load_area_id, walk_time.unload_area_id, False) self.path_cost_generate(walk_time.load_area_id, walk_time.unload_area_id, False)
walk_time_unload_distance[unload_area_index][load_area_index] = walk_time.to_load_distance
walk_time_load_distance[unload_area_index][load_area_index] = walk_time.to_unload_distance
# 读取备停区路网成本 # 读取备停区路网成本
for walk_time_park in session_postgre.query(WalkTimePark).all(): for walk_time_park in session_postgre.query(WalkTimePark).all():
park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)] park_area_index = park_uuid_to_index_dict[str(walk_time_park.park_area_id)]
load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)] load_area_index = load_area_uuid_to_index_dict[str(walk_time_park.load_area_id)]
_, self.walk_time_park[park_area_index][load_area_index] = \ _, self.cost_park_to_load_area[park_area_index][load_area_index] = \
self.path_cost_generate(walk_time_park.load_area_id, walk_time_park.park_area_id, True) self.path_cost_generate(walk_time_park.load_area_id, walk_time_park.park_area_id, True)
except Exception as es: except Exception as es:
logger.error('路网信息计成本计算异常') logger.error('路网信息计成本计算异常')
logger.error(es) logger.error(es)
print("真实路网距离:装载-卸载") cost_to_excavator = np.zeros_like(self.distance_to_excavator)
print(self.walk_time_to_load_area) cost_to_dump = np.zeros_like(self.distance_to_dump)
print(self.walk_time_to_unload_area)
print("实际路网距离(阻塞):装载-卸载") for i in range(dynamic_dump_num):
print(walk_time_load_distance) for j in range(dynamic_excavator_num):
print(walk_time_unload_distance) cost_to_excavator[i][j] = self.cost_to_load_area[self.dump_index_to_unload_area_index_dict[i]][self.excavator_index_to_load_area_index_dict[j]]
cost_to_dump[i][j] = self.cost_to_unload_area[self.dump_index_to_unload_area_index_dict[i]][self.excavator_index_to_load_area_index_dict[j]]
logger.info("真实路网距离-驶往挖机:")
logger.info(self.distance_to_excavator)
logger.info("真实路网距离-驶往卸点:")
logger.info(self.distance_to_dump)
logger.info("阻塞路网距离-驶往挖机:")
logger.info(cost_to_excavator)
logger.info("阻塞路网距离-驶往卸点:")
logger.info(cost_to_dump)
class LaneInfo: class LaneInfo:
...@@ -185,7 +187,8 @@ class LaneInfo: ...@@ -185,7 +187,8 @@ class LaneInfo:
item = item.decode(encoding='utf-8') item = item.decode(encoding='utf-8')
json_value = json.loads(redis2.get(item)) json_value = json.loads(redis2.get(item))
device_type = json_value.get('type') device_type = json_value.get('type')
if device_type == 1: is_online = json_value.get('isOnline')
if device_type == 1 and is_online:
truck_locate = json_value.get('laneId') truck_locate = json_value.get('laneId')
truck_locate_dict[truck_name_to_uuid_dict[item]] = truck_locate truck_locate_dict[truck_name_to_uuid_dict[item]] = truck_locate
except Exception as es: except Exception as es:
...@@ -198,14 +201,20 @@ class LaneInfo: ...@@ -198,14 +201,20 @@ class LaneInfo:
# truck -> lane # truck -> lane
truck_locate_dict = self.update_truck_loacate() truck_locate_dict = self.update_truck_loacate()
print("truck -> lane") # print("truck -> lane")
print(truck_locate_dict) # print(truck_locate_dict)
logger.info("矿卡位于路段:")
logger.info(truck_locate_dict)
# truck -> speed # truck -> speed
truck_speed_dict = self.update_truck_speed() truck_speed_dict = self.update_truck_speed()
print("truck -> speed") # print("truck -> speed")
print(truck_speed_dict) # print(truck_speed_dict)
logger.info("矿卡当前速度:")
logger.info(truck_speed_dict)
try: try:
# lane_set, 用到的路段集合 # lane_set, 用到的路段集合
...@@ -221,6 +230,7 @@ class LaneInfo: ...@@ -221,6 +230,7 @@ class LaneInfo:
lane_set = set(lane_set) lane_set = set(lane_set)
except Exception as es: except Exception as es:
logger.error('所用路网路段集合读取异常') logger.error('所用路网路段集合读取异常')
logger.info(es)
# lane -> speed, 各路段平均行驶速度 # lane -> speed, 各路段平均行驶速度
self.lane_speed_dict = {} self.lane_speed_dict = {}
...@@ -250,8 +260,11 @@ class LaneInfo: ...@@ -250,8 +260,11 @@ 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(tmp_lane_set)
# 对不存在的矿卡路段,实时速度设置为最高 # 对不存在的矿卡路段,实时速度设置为最高
for lane_id in lane_set: for lane_id in lane_set:
...@@ -268,3 +281,7 @@ class LaneInfo: ...@@ -268,3 +281,7 @@ class LaneInfo:
logger.error(es) logger.error(es)
return self.lane_speed_dict return self.lane_speed_dict
# path_planner = PathPlanner()
#
# path_planner.walk_cost()
This diff is collapsed.
...@@ -11,6 +11,15 @@ ...@@ -11,6 +11,15 @@
from tables import * from tables import *
from urllib.parse import quote from urllib.parse import quote
import logging.handlers import logging.handlers
from redis import StrictRedis, ConnectionPool
import numpy as np
from redis import StrictRedis, ConnectionPool
import redis
from datetime import datetime, timedelta
import copy
import json
import sched
import time
# 创建日志 # 创建日志
######################################################################################################################## ########################################################################################################################
...@@ -31,7 +40,7 @@ logger.setLevel(logging.INFO) ...@@ -31,7 +40,7 @@ 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("./RDlogs/dispatch.log", maxBytes=3 * 1024 * 1024, backupCount=10) filehandler = logging.handlers.RotatingFileHandler("./TFlog/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"
......
...@@ -159,8 +159,14 @@ def update_total_truck(): ...@@ -159,8 +159,14 @@ def update_total_truck():
query = np.array(session_mysql.query(Equipment).filter_by(device_type=1, isdeleted=0).all()) query = np.array(session_mysql.query(Equipment).filter_by(device_type=1, isdeleted=0).all())
for item in query: for item in query:
json_value = json.loads(redis2.get(item.equipment_id))
is_online = json_value.get('isOnline')
if is_online:
truck_list.append(item.id) truck_list.append(item.id)
# for item in query:
# truck_list.append(item.id)
if len(truck_list) < 1: if len(truck_list) < 1:
raise Exception("无矿卡设备可用-矿卡集合读取异常") raise Exception("无矿卡设备可用-矿卡集合读取异常")
except Exception as es: except Exception as es:
......
...@@ -14,27 +14,19 @@ from sqlalchemy import Column, create_engine ...@@ -14,27 +14,19 @@ from sqlalchemy import Column, create_engine
from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN from sqlalchemy import VARCHAR, DateTime, Float, Integer, BOOLEAN
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.ext.declarative import declarative_base
import numpy as np # import numpy as np
from redis import StrictRedis, ConnectionPool # from redis import StrictRedis, ConnectionPool
import redis # import redis
from datetime import datetime, timedelta # from datetime import datetime, timedelta
import copy # import copy
import json # import json
import sched # import sched
import time # import time
pool5 = ConnectionPool(host='192.168.28.111', db=5, port=6379, password='Huituo@123')
redis5 = StrictRedis(connection_pool=pool5)
pool2 = ConnectionPool(host='192.168.28.111', db=2, port=6379, password='Huituo@123')
redis2 = StrictRedis(connection_pool=pool2)
# 创建对象的基类: # 创建对象的基类:
Base = declarative_base() Base = declarative_base()
# 初始化数据库连接: # 初始化数据库连接:
engine_mysql = create_engine('mysql+mysqlconnector://root:Huituo@123@192.168.28.111:3306/waytous') engine_mysql = create_engine('mysql+mysqlconnector://root:Huituo@123@192.168.28.111:3306/waytous')
...@@ -350,3 +342,21 @@ class JobRecord(Base): ...@@ -350,3 +342,21 @@ class JobRecord(Base):
self.start_time = start_time self.start_time = start_time
self.end_time = end_time self.end_time = end_time
self.work_type = work_type self.work_type = work_type
class WrokRecord(Base):
__tablename__ = 'statistic_work_record'
equipment_id = Column(VARCHAR(50), primary_key=True)
work_day = Column(DateTime, primary_key=True)
load_entrance_time = Column(Float)
load_entrance_count = Column(Integer)
load_exit_time = Column(DateTime)
load_exit_count = Column(Integer)
def __init__(self, equipment_id, work_day, load_entrance_time, load_entrance_count, load_exit_time, load_exit_count):
self.equipment_id = equipment_id
self.work_day = work_day
self.load_entrance_time = load_entrance_time
self.load_entrance_count = load_entrance_count
self.load_exit_time = load_exit_time
self.load_exit_count = load_exit_count
\ No newline at end of file
This diff is collapsed.
...@@ -14,15 +14,6 @@ from traffic_flow.traffic_flow_info import * ...@@ -14,15 +14,6 @@ from traffic_flow.traffic_flow_info import *
# start = time.time() # start = time.time()
# much_job = [x**2 for x in range (1, 1000000, 3)] # much_job = [x**2 for x in range (1, 1000000, 3)]
# 需要提供的值
# traffic_programme_para.excavator_strength[excavator_index] = 200 # 挖机最大装载能力,单位吨/小时
# traffic_programme_para.grade_loading_array[excavator_index] = 100 # 挖机装载物料品位
# traffic_programme_para.excavator_priority_coefficient[excavator_index] = 1 # 挖机优先级
# traffic_programme_para.dump_strength[dump_index] = 200 # 卸载设备最大卸载能力,单位吨/小时
# traffic_programme_para.grade_upper_dump_array[dump_index] = 100 # 卸载设备品位上限
# traffic_programme_para.grade_lower_dump_array[dump_index] = 100 # 卸载设备品位下限
# traffic_programme_para.dump_priority_coefficient[dump_index] = 1 # 卸载设备优先级
# 从数据库中读取挖机和卸载设备相关参数,并将线性规划所用参数保存在TrafficProgPara类中 # 从数据库中读取挖机和卸载设备相关参数,并将线性规划所用参数保存在TrafficProgPara类中
...@@ -31,7 +22,7 @@ from traffic_flow.traffic_flow_info import * ...@@ -31,7 +22,7 @@ from traffic_flow.traffic_flow_info import *
def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
b_dump, grade_loading_array, b_dump, grade_loading_array,
max_unload_weigh_alg_flag, truck_total_num, max_unload_weigh_alg_flag, truck_total_num,
goto_excavator_dis, goto_dump_dis, min_throughout, walk_time_to_excavator, walk_time_to_dump, min_throughout,
grade_lower_array=None, grade_upper_array=None): grade_lower_array=None, grade_upper_array=None):
row = len(coefficient) # 代表挖机的个数,第i行代表第i台挖机 row = len(coefficient) # 代表挖机的个数,第i行代表第i台挖机
col = len(coefficient[0]) # 代表卸载设备的个数,第j行代表第j个卸载设备 col = len(coefficient[0]) # 代表卸载设备的个数,第j行代表第j个卸载设备
...@@ -51,8 +42,8 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -51,8 +42,8 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
prob += pulp.lpDot(flatten(var_x), coefficient.flatten()) prob += pulp.lpDot(flatten(var_x), coefficient.flatten())
else: else:
prob = pulp.LpProblem('Transportation Problem', sense=pulp.LpMinimize) prob = pulp.LpProblem('Transportation Problem', sense=pulp.LpMinimize)
goto_excavator_cost = var_x * goto_excavator_dis goto_excavator_cost = var_x * walk_time_to_excavator
goto_dump_cost = var_y * goto_dump_dis goto_dump_cost = var_y * walk_time_to_dump
prob += (pulp.lpSum(flatten(goto_excavator_cost)) + 1.5 * pulp.lpSum(flatten(goto_dump_cost))) prob += (pulp.lpSum(flatten(goto_excavator_cost)) + 1.5 * pulp.lpSum(flatten(goto_dump_cost)))
# 定义约束条件 # 定义约束条件
...@@ -60,6 +51,9 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -60,6 +51,9 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
if max_unload_weigh_alg_flag == False: if max_unload_weigh_alg_flag == False:
prob += pulp.lpSum(var_x) >= min_throughout prob += pulp.lpSum(var_x) >= min_throughout
logger.info("road_factor")
logger.info(w_ij)
# 矿卡总数约束,在每条道路上的车辆总数要小于矿卡总个数 # 矿卡总数约束,在每条道路上的车辆总数要小于矿卡总个数
# 通过矩阵按元素相乘得到每条卸载道路上的车辆个数 # 通过矩阵按元素相乘得到每条卸载道路上的车辆个数
unload_truck_total_num_array = w_ij * var_x unload_truck_total_num_array = w_ij * var_x
...@@ -67,7 +61,7 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, ...@@ -67,7 +61,7 @@ def transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator,
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) <= 2)
# 最大工作强度约束 # 最大工作强度约束
# 约束每个挖机的工作强度 # 约束每个挖机的工作强度
...@@ -168,13 +162,13 @@ def traffic_flow_plan(): ...@@ -168,13 +162,13 @@ def traffic_flow_plan():
grade_lower_dump_array = traffic_programme_para.grade_lower_dump_array grade_lower_dump_array = traffic_programme_para.grade_lower_dump_array
grade_upper_dump_array = traffic_programme_para.grade_upper_dump_array grade_upper_dump_array = traffic_programme_para.grade_upper_dump_array
min_throughout = traffic_programme_para.min_throughout min_throughout = traffic_programme_para.min_throughout
goto_excavator_distance = traffic_programme_para.goto_excavator_distance walk_time_to_excavator = traffic_programme_para.walk_time_to_excavator
goto_dump_distance = traffic_programme_para.goto_dump_distance 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
res = transportation_problem_slove(coefficient, w_ij, s_ij, b_excavator, b_dump, res = transportation_problem_slove(coefficient, 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,
goto_excavator_distance, goto_dump_distance, min_throughout, walk_time_to_excavator, walk_time_to_dump, min_throughout,
grade_upper_dump_array, grade_lower_dump_array) grade_upper_dump_array, grade_lower_dump_array)
if max_unload_weigh_alg_flag: if max_unload_weigh_alg_flag:
...@@ -192,11 +186,14 @@ def traffic_flow_plan(): ...@@ -192,11 +186,14 @@ def traffic_flow_plan():
logger.info(f'空运车流:{res["var_y"]} 单位: 吨/时') logger.info(f'空运车流:{res["var_y"]} 单位: 吨/时')
# 通过矩阵按元素相乘得到每条卸载道路上的车辆个数 # 通过矩阵按元素相乘得到每条卸载道路上的车辆个数
print("卸载道路上的车辆个数")
unload_traffic = res['var_x'] unload_traffic = res['var_x']
print((traffic_programme_para.goto_dump_factor * unload_traffic).round(3)) print((traffic_programme_para.goto_dump_factor * unload_traffic).round(3))
# 通过矩阵按元素相乘得到每条装载道路上的车辆个数 # 通过矩阵按元素相乘得到每条装载道路上的车辆个数
print("装载道路上的车辆个数")
load_traffic = res['var_y'] load_traffic = res['var_y']
print((traffic_programme_para.goto_excavator_factor * load_traffic).round(3)) print((traffic_programme_para.goto_excavator_factor * load_traffic).round(3))
return res["var_x"], res["var_y"] return res["var_x"], res["var_y"]
traffic_flow_plan() traffic_flow_plan()
......
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