Skip to content

电梯交通量仿真分析1&2

约 4023 字大约 13 分钟

coding

2025-07-25

1. 系统概述

1.1 项目背景与目标

电梯交通量仿真分析软件旨在解决现代建筑电梯系统设计与优化中的关键问题。根据PDF研究资料,电梯系统在新建筑中的规划通常基于理论计算和仿真,特别是在涉及高级群控系统或特殊建筑配置的情况下。然而,仿真结果的准确性高度依赖于乘客到达过程的建模质量,这直接影响电梯组的服务水平和电梯数量的选择。

本项目的目标是开发一个专业级的电梯交通量仿真分析工具,能够:

  • 精确模拟不同电梯控制策略(单控、并联、群控、目的选层)在各种建筑类型中的性能
  • 基于真实世界的研究数据(如PDF中描述的乘客批次到达特性)构建高保真度的乘客流量模型
  • 通过OD矩阵估计技术获取完整的电梯乘客流量统计信息
  • 为电梯系统设计提供科学依据,避免电梯数量过多或过少的问题
  • 支持建筑安全设计和紧急疏散规划

1.2 系统范围与功能

本系统将实现以下核心功能:

仿真能力

  • 支持4种电梯控制方式的精确仿真:单控、并联、群控、目的选层
  • 模拟不同建筑类型(办公楼、商场、住宅、混合用途)的交通特性
  • 建模早高峰、午餐高峰、晚高峰和闲时等不同时段的交通模式
  • 支持乘客批次到达模型,符合PDF中描述的"时间非齐次泊松过程"特性

数据分析能力

  • 实现PDF中描述的OD矩阵估计方法(LP、BILS、CP算法)
  • 提供详细的性能指标分析,包括等待时间、运输时间、系统利用率等
  • 支持与真实电梯数据的对比验证
  • 生成可视化报告,便于设计决策

扩展能力

  • 支持紧急疏散场景的仿真(基于PDF中的疏散实验研究)
  • 可扩展的算法框架,便于集成新的控制策略和流量模型
  • 提供API接口,可与其他建筑管理系统集成

1.3 技术栈选择

核心技术

  • Java 21:选择最新LTS版本Java,利用其现代语言特性(记录类、模式匹配、虚拟线程等),提高开发效率和代码可读性
  • Gradle:作为构建工具,提供灵活的依赖管理和构建配置
  • 模块化设计:使用Java模块系统(JPMS)实现高内聚、低耦合的系统架构

为什么选择Java 21

  • 性能优势:Java 21提供了虚拟线程(预览特性),对于高并发的仿真场景特别适合
  • 现代语言特性:记录类(Records)非常适合表示不可变的领域对象(如Passenger、Elevator等)
  • 丰富的生态系统:Java在企业级应用开发中有成熟的框架和工具链
  • 跨平台能力:确保仿真软件可在不同环境中运行

辅助技术

  • JUnit 5 + Mockito:用于单元测试和模拟
  • Apache PDFBox:用于生成PDF报告
  • Jackson:用于JSON序列化/反序列化
  • OptaPlanner:可选的约束规划引擎,用于复杂调度问题

1.4 系统价值与应用场景

电梯系统设计

  • 帮助电梯工程师确定最优的电梯数量、尺寸和配置
  • 评估不同控制策略在特定建筑中的性能差异
  • 验证电梯系统是否满足设计规范(如5分钟输送能力)

建筑规划与设计

  • 为建筑师提供电梯井道布局的优化建议
  • 评估不同楼层布局对电梯交通的影响
  • 支持混合用途建筑的交通流分析

安全与疏散规划

  • 基于PDF中的疏散实验研究,模拟紧急情况下的电梯使用
  • 评估电梯在疏散过程中的作用和限制
  • 为建筑安全设计提供数据支持

算法研发与优化

  • 作为新控制算法的测试平台
  • 支持OD矩阵估计等关键技术的实验验证
  • 促进电梯控制领域的学术研究和技术创新

2. 领域模型

2.1 核心概念定义

2.1.1 乘客旅程(Passenger Journey)

根据PDF资料,"乘客旅程是指一名乘客在电梯轿厢内从起点楼层到终点楼层的行程"。这是电梯交通量的基本单位,系统将跟踪每个乘客旅程的完整生命周期,包括等待时间、运输时间和总行程时间。

2.1.2 批次到达(Batch Arrival)

PDF研究表明,乘客通常以批次形式到达电梯厅,而非单一乘客。批次大小分布随时间段变化(早高峰和午餐高峰特性不同),这对电梯性能有显著影响。系统将实现批次到达模型,符合"时间非齐次泊松过程"特性。

2.1.3 OD矩阵(Origin-Destination Matrix)

OD矩阵表示从各起点楼层到各终点楼层的乘客流量分布。PDF中指出,电梯行程OD矩阵估计问题可以表述为网络流问题,属于线性规划(LP)问题。系统将实现LP、BILS、CP等算法来估计OD矩阵,这是准确模拟电梯交通的基础。

2.1.4 交通模式(Traffic Pattern)

PDF中描述了三种主要交通模式:

  • 进楼交通(Incoming Traffic):乘客从底层大厅进入建筑
  • 出楼交通(Outgoing Traffic):乘客离开建筑返回底层大厅
  • 楼层间交通(Inter-floor Traffic):乘客在建筑内部不同楼层间移动

不同建筑类型(办公楼、商场、住宅)和不同时段(早高峰、午餐高峰、晚高峰)的交通模式比例不同,系统将准确建模这些特性。

2.1.5 处理能力(Handling Capacity, HC)

处理能力是指电梯系统在5分钟内能够运送的乘客数量占建筑总人数的百分比。PDF中提到,"电梯组设计应具有足够的HC",系统将计算并报告5分钟输送能力指标。

2.2 领域实体与关系

2.2.1 建筑相关实体

/**
 * 建筑对象,包含所有楼层和电梯组信息
 * 根据PDF研究,建筑特性直接影响交通模式和乘客行为
 */
public record Building(
    String id,
    String name,
    int totalFloors,
    double floorHeight, // 层高(米)
    BuildingType type,  // 建筑类型(办公楼、商场等)
    List<Floor> floors,
    List<ElevatorGroup> elevatorGroups
) {}

/**
 * 楼层对象,包含该楼层的用途、人数等特性
 * PDF研究表明,不同用途楼层的交通特性显著不同
 */
public record Floor(
    int floorNumber,
    FloorUsage usage,    // 楼层用途(大厅、办公、商业等)
    int population,      // 楼层人数
    double arrivalRate,  // 基础到达率(人/分钟)
    Map<TimePeriod, PopulationDistribution> populationByTime
) {}

/**
 * 人口分布,按时间段定义楼层人数和交通特性
 * 实现PDF中描述的不同时段(早高峰、午餐高峰等)特性
 */
public record PopulationDistribution(
    int population,
    double incomingTrafficRatio,   // 进楼交通比例
    double outgoingTrafficRatio,   // 出楼交通比例
    double interfloorTrafficRatio, // 楼层间交通比例
    BatchArrivalProfile batchProfile // 批次到达特性
) {}

/**
 * 批次到达特性,根据PDF研究实现
 * "批次到达可以建模为时间非齐次泊松过程"
 */
public record BatchArrivalProfile(
    double batchProbability,     // 批次到达概率
    List<BatchSizeProbability> batchSizeDistribution,
    double interArrivalMean,     // 批次间平均间隔(秒)
    double interArrivalStdDev    // 批次间间隔标准差
) {}

public record BatchSizeProbability(
    int batchSize,
    double probability
) {}

2.2.2 电梯相关实体

/**
 * 电梯组,包含控制类型和组内电梯列表
 * 实现PDF中描述的单控、并联、群控、目的选层四种控制方式
 */
public record ElevatorGroup(
    String id,
    ElevatorControlType controlType,
    List<Elevator> elevators,
    List<Integer> servedFloors,
    TrafficPattern currentTrafficPattern
) {}

public enum ElevatorControlType {
    SINGLE_CONTROL,    // 单控
    PARALLEL_CONTROL,  // 并联(2台)
    GROUP_CONTROL,     // 群控(3+台)
    DESTINATION_CONTROL // 目的选层
}

/**
 * 电梯对象,包含所有物理和运行参数
 * 参数设置基于PDF中描述的电梯动力学准确模型
 */
public record Elevator(
    String id,
    int capacity,             // 载客量(人)
    double ratedSpeed,        // 额定速度(m/s)
    double acceleration,      // 加速度(m/s²)
    double deceleration,      // 减速度(m/s²)
    double doorWidth,         // 门宽(m)
    int standbyFloor,         // 基准层
    Set<Integer> serviceFloors, // 服务楼层
    ElevatorStatus status     // 当前状态
) {}

/**
 * 电梯状态,实时跟踪电梯运行情况
 * 根据PDF中"EMS记录数据从每次电梯停靠包括时间戳"的描述设计
 */
public record ElevatorStatus(
    double position,          // 位置(米)
    ElevatorDirection direction,
    double speed,
    boolean doorOpen,
    long doorOpenTime,        // 开门已持续时间(毫秒)
    Set<Integer> registeredStops,
    List<Passenger> passengers,
    long lastStopTime,        // 上次停靠时间(仿真时间戳)
    int boardingPassengers,   // 正在上车的乘客数
    int alightingPassengers   // 正在下车的乘客数
) {}

public enum ElevatorDirection {
    UP, DOWN, STOPPED
}

2.2.3 乘客与流量相关实体

/**
 * 乘客对象,跟踪每个乘客的完整旅程
 * 基于PDF中"乘客旅程"的定义设计
 */
public record Passenger(
    String id,
    int originFloor,
    int destinationFloor,
    long arrivalTime,         // 到达电梯厅时间(仿真时间戳)
    long boardingTime,        // 进入电梯时间
    long alightingTime,       // 离开电梯时间
    PassengerType type,
    int batchSize             // 所属批次大小
) {}

public enum PassengerType {
    NORMAL,
    ELDERLY,
    DISABLED,
    CARGO
}

/**
 * OD矩阵,表示起点到终点的乘客流量
 * 实现PDF中描述的电梯行程OD矩阵估计
 */
public record ODMetric(
    int originFloor,
    int destinationFloor,
    int passengerCount,
    double probability
) {}

public record ODMetricMatrix(List<ODMetric> metrics) {
    // 提供矩阵操作方法
    public double getProbability(int origin, int destination) { /*...*/ }
    public int getTotalPassengers() { /*...*/ }
}

/**
 * 交通模式,实时识别当前主导交通流向
 * 根据PDF中"交通模式比例"的研究实现
 */
public record TrafficPattern(
    double incomingRatio,
    double outgoingRatio,
    double interfloorRatio,
    ElevatorDirection dominantDirection,
    long lastUpdated
) {}

2.3 领域规则与约束

2.3.1 乘客流量规则

  1. 批次到达规则

    • 早高峰和午餐高峰期间,乘客主要以批次形式到达
    • 批次大小分布应符合PDF中描述的经验分布
    • 批次间到达时间应遵循指数分布(泊松过程特性)
  2. OD矩阵约束

    • OD矩阵必须满足流量守恒原则(进入某楼层的乘客数 = 离开该楼层的乘客数)
    • 电梯行程OD矩阵估计问题应表述为网络流问题(LP问题)
    • 随机化算法应产生比确定性算法质量更好的统计数据
  3. 建筑类型特性

    • 办公楼:早高峰以上行为主,晚高峰以下行为主,午餐高峰双向流量大
    • 商场:楼层间交通比例高,各层流量相对均衡
    • 住宅:交通模式较为分散,无明显高峰特征

2.3.2 电梯运行约束

  1. 物理约束

    • 电梯速度不能超过额定速度
    • 加速度/减速度受机械限制
    • 开关门时间与门宽、乘客数量相关
  2. 控制策略约束

    • 单控:每台电梯独立响应本梯召唤信号
    • 并联:两台电梯共享召唤,采用最小等待时间算法
    • 群控:多台电梯协同工作,考虑整体性能优化
    • 目的选层:乘客先输入目标楼层,系统进行优化分配
  3. 性能约束

    • 停站时间 = 开门时间 + 乘客流动时间 + 关门时间
    • 乘客流动时间 = 乘客数量 × (上/下时间) × 拥挤系数
    • 运行时间 = √(2×距离/加速度) + (距离-加速段-减速段)/额定速度 + √(2×距离/减速度)

2.3.3 仿真时间规则

  1. 时间推进机制

    • 采用离散事件仿真方法,只在事件发生时推进时间
    • 支持可配置的时间步长(1秒/5秒/30秒)用于数据记录
  2. 时段划分

    • 将一天划分为多个时段(早高峰、上午平峰、午餐高峰、下午平峰、晚高峰)
    • 每个时段应用相应的流量模型参数
  3. 仿真持续时间

    • 支持短时仿真(15分钟,用于交通统计)
    • 支持全天仿真(8-12小时,用于系统性能评估)

2.4 关键领域服务

2.4.1 OD矩阵估计服务

/**
 * OD矩阵估计服务,实现PDF中描述的LP、BILS、CP算法
 * "电梯行程OD矩阵估计问题可以表述为网络流问题"
 */
public interface ODEstimationService {
    
    /**
     * 使用线性规划(LP)方法估计OD矩阵
     * 
     * @param elevatorTrips 电梯行程数据
     * @param building 建筑信息
     * @return 估计的OD矩阵
     */
    ODMetricMatrix estimateWithLP(List<ElevatorTrip> elevatorTrips, Building building);
    
    /**
     * 使用BILS(带界约束的整数最小二乘)方法估计OD矩阵
     * 
     * @param elevatorTrips 电梯行程数据
     * @param building 建筑信息
     * @param withRandomization 是否启用随机化搜索
     * @return 估计的OD矩阵
     */
    ODMetricMatrix estimateWithBILS(List<ElevatorTrip> elevatorTrips, Building building, boolean withRandomization);
    
    /**
     * 使用CP(约束规划)方法估计OD矩阵
     * 
     * @param elevatorTrips 电梯行程数据
     * @param building 建筑信息
     * @return 估计的OD矩阵
     */
    ODMetricMatrix estimateWithCP(List<ElevatorTrip> elevatorTrips, Building building);
    
    /**
     * 验证OD矩阵的一致性
     * 
     * @param matrix 待验证的OD矩阵
     * @param building 建筑信息
     * @return 验证结果
     */
    ValidationResult validateODMatrix(ODMetricMatrix matrix, Building building);
}

2.4.2 乘客流量生成服务

/**
 * 乘客流量生成服务,基于PDF研究实现高保真度的乘客到达模型
 * "批次到达可以建模为时间非齐次泊松过程"
 */
public interface PassengerFlowService {
    
    /**
     * 生成指定时间段的乘客到达事件
     * 
     * @param building 建筑模型
     * @param startTime 仿真开始时间(秒)
     * @param duration 生成时长(秒)
     * @return 乘客到达事件列表
     */
    List<PassengerArrivalEvent> generatePassengerFlow(Building building, long startTime, long duration);
    
    /**
     * 生成符合批次特性的到达事件
     * 
     * @param floor 楼层
     * @param timePeriod 时间段
     * @param startTime 开始时间
     * @param duration 时长
     * @return 批次到达事件列表
     */
    List<BatchArrivalEvent> generateBatchArrivals(Floor floor, TimePeriod timePeriod, long startTime, long duration);
    
    /**
     * 基于OD矩阵生成乘客目的地
     * 
     * @param originFloor 起点楼层
     * @param odMatrix OD矩阵
     * @param passengerCount 乘客数量
     * @return 乘客目的地列表
     */
    List<Integer> generateDestinations(int originFloor, ODMetricMatrix odMatrix, int passengerCount);
}

2.4.3 电梯控制服务

/**
 * 电梯控制服务,实现不同控制策略的核心算法
 * 根据PDF中"电梯组控制"的研究实现
 */
public interface ElevatorControlService {
    
    /**
     * 处理电梯召唤请求
     * 
     * @param group 电梯组
     * @param request 召唤请求
     * @return 分配结果
     */
    AssignmentResult handleCallRequest(ElevatorGroup group, CallRequest request);
    
    /**
     * 计算电梯响应时间
     * 
     * @param elevator 电梯
     * @param floor 楼层
     * @param direction 运行方向
     * @return 预计到达时间(秒)
     */
    double calculateResponseTime(Elevator elevator, int floor, ElevatorDirection direction);
    
    /**
     * 更新电梯状态
     * 
     * @param elevator 电梯
     * @param currentTime 当前仿真时间
     * @return 更新后的状态
     */
    ElevatorStatus updateElevatorStatus(Elevator elevator, long currentTime);
    
    /**
     * 识别当前交通模式
     * 
     * @param group 电梯组
     * @param recentEvents 最近事件
     * @return 识别的交通模式
     */
    TrafficPattern recognizeTrafficPattern(ElevatorGroup group, List<SimulationEvent> recentEvents);
}

2.5 领域事件模型

系统采用事件驱动架构,关键领域事件包括:

/**
 * 仿真事件基类
 */
public abstract sealed class SimulationEvent permits 
    PassengerArrivalEvent, 
    CallRegistrationEvent,
    ElevatorStopEvent,
    PassengerBoardingEvent,
    PassengerAlightingEvent,
    ElevatorDirectionChangeEvent {
    
    protected final long timestamp; // 仿真时间戳(毫秒)
    protected final String buildingId;
    
    // 构造方法和通用方法
}

/**
 * 乘客到达事件
 * 对应PDF中描述的"乘客到达电梯厅注册接送请求"
 */
public final record PassengerArrivalEvent(
    long timestamp,
    String buildingId,
    int floor,
    List<Passenger> passengers
) extends SimulationEvent;

/**
 * 召唤注册事件
 */
public final record CallRegistrationEvent(
    long timestamp,
    String buildingId,
    int floor,
    ElevatorDirection direction,
    String passengerId
) extends SimulationEvent;

/**
 * 电梯停靠事件
 */
public final record ElevatorStopEvent(
    long timestamp,
    String buildingId,
    String elevatorId,
    int floor,
    int boardingCount,
    int alightingCount
) extends SimulationEvent;

/**
 * 乘客上车事件
 */
public final record PassengerBoardingEvent(
    long timestamp,
    String buildingId,
    String elevatorId,
    String passengerId,
    int floor
) extends SimulationEvent;

/**
 * 乘客下车事件
 */
public final record PassengerAlightingEvent(
    long timestamp,
    String buildingId,
    String elevatorId,
    String passengerId,
    int floor
) extends SimulationEvent;

本领域模型严格基于PDF研究资料和电梯工程实践设计,确保了系统对真实电梯交通行为的准确模拟。特别是对批次到达模型、OD矩阵估计和交通模式识别的实现,直接参考了PDF中的研究成果,为高保真度仿真提供了理论基础。