行人库功能详解
行人库简介
AnyLogic 的行人库(Pedestrian Library)是专门用于模拟行人行为的强大工具。行人库提供了一系列的图形化组件和编程接口,使用户能够轻松地创建复杂的行人仿真模型。这些模型可以用于研究和优化行人流量、安全性和舒适度,适用于各种场景,如城市交通、购物中心、机场、地铁站等。
创建行人和环境
行人代理
行人库中的行人代理(Pedestrian Agent)是模拟行人行为的基本单位。每个行人代理都有自己的属性和行为,可以通过参数化设置来控制其行为。
属性设置示例:
// 设置行人的速度pedestrian.setSpeed(1.5);// 单位:米/秒// 设置行人的目标pedestrian.setTarget(targetNode);// targetNode 是目标节点// 设置行人的优先级pedistrian.setPriority(1);// 优先级越高,行人越有可能优先通过交叉口环境设置:
环境是行人活动的场所,可以通过绘制节点(Nodes)和路径(Paths)来定义。节点用于表示行人的目标位置或路径上的关键点,路径则连接这些节点。
创建节点和路径:
创建节点:
在AnyLogic模型中,可以通过右键点击模型区域,选择“Add > Pedestrian > Node”来创建节点。节点的类型包括入口节点(Entry Node)、出口节点(Exit Node)、普通节点(Regular Node)等。
创建路径:
在节点之间创建路径,可以通过右键点击已经创建的节点,选择“Add > Pedestrian > Path”来实现。路径可以是直线或曲线,并且可以设置路径的宽度和允许的最大行人流量。
代码示例:
// 创建节点NodeentryNode=newNode(this,100,200);// (x, y) 是节点的位置NodeexitNode=newNode(this,900,200);// 创建路径Pathpath1=newPath(this,entryNode,exitNode);path1.setWidth(2);// 设置路径宽度为2米path1.setMaximumCapacity(100);// 设置路径最大容量为100人行为模型
行人库提供了多种预定义的行为模型,如行走、排队、等待等。用户可以通过图形化界面或编程方式来配置这些行为模型。
行走行为
行走行为是最基本的行人行为,定义了行人如何从一个节点移动到另一个节点。
设置行走行为:
图形化设置:
在行人代理的属性中,选择“Pedestrian > Behavior > Walking”来设置行走行为。可以设置行走速度、加速度等参数。
编程设置:
通过编写代码来动态设置行走行为。
代码示例:
// 设置行人的行走速度pedestrian.setSpeed(1.2);// 单位:米/秒// 设置行人的加速度pedestrian.setAcceleration(0.5);// 单位:米/秒^2// 设置行人的减速度pedestrian.setDeceleration(0.5);// 单位:米/秒^2排队行为
排队行为用于模拟行人等待进入某个区域或使用某个设施的行为。
设置排队行为:
图形化设置:
在行人代理的属性中,选择“Pedestrian > Behavior > Queuing”来设置排队行为。可以设置排队的最大长度、等待时间等参数。
编程设置:
通过编写代码来动态设置排队行为。
代码示例:
// 创建一个排队点Queuequeue=newQueue(this,150,300);// (x, y) 是排队点的位置queue.setMaximumLength(50);// 设置排队最大长度为50人// 将行人添加到排队点pedestrian.joinQueue(queue);环境交互
行人库允许模拟行人与环境之间的交互,包括障碍物、设施和动态事件。
障碍物
障碍物可以是固定的物理障碍,如墙壁、柱子等,也可以是动态的障碍,如临时关闭的通道。
创建障碍物:
图形化创建:
在模型中,通过右键点击模型区域,选择“Add > Pedestrian > Obstacle”来创建障碍物。可以设置障碍物的形状(矩形、圆形等)和位置。
编程创建:
通过编写代码来动态创建和管理障碍物。
代码示例:
// 创建一个矩形障碍物Obstacleobstacle=newObstacle(this,300,400,50,100);// (x, y, width, height) 是障碍物的位置和尺寸// 动态关闭通道Pathpath2=newPath(this,600,200,700,200);path2.setClosed(true);// 关闭通道设施
设施是行人可以使用或互动的对象,如电梯、扶梯、售票机等。
创建设施:
图形化创建:
在模型中,通过右键点击模型区域,选择“Add > Pedestrian > Facility”来创建设施。可以设置设施的类型和位置。
编程创建:
通过编写代码来动态创建和管理设施。
代码示例:
// 创建一个电梯Facilityelevator=newFacility(this,500,500,2,10);// (x, y, capacity, serviceTime) 是电梯的位置、容量和服务时间// 设置电梯的服务时间elevator.setServiceTime(15);// 单位:秒// 将行人添加到电梯队列pedestrian.joinFacilityQueue(elevator);动态事件
动态事件用于模拟仿真过程中的突发事件,如紧急疏散、设施故障等。
创建动态事件:
图形化创建:
在模型中,通过右键点击模型区域,选择“Add > Events > Dynamic Event”来创建动态事件。可以设置事件的触发条件和动作。
编程创建:
通过编写代码来动态创建和管理动态事件。
代码示例:
// 创建一个动态事件DynamicEventemergencyEvacuation=newDynamicEvent(this){@Overridepublicvoidaction(){// 触发紧急疏散for(Pedestrianpedestrian:pedestrians){pedestrian.setTarget(emergencyExit);// 将所有行人的目标设置为紧急出口}}};// 设置动态事件的触发条件emergencyEvacuation.setCondition("time() > 60");// 60秒后触发紧急疏散数据收集和分析
行人库提供了多种数据收集和分析工具,帮助用户评估仿真结果。
数据收集
数据收集器(Data Collector)用于记录仿真过程中各个行人的行为数据,如路径、速度、等待时间等。
创建数据收集器:
图形化创建:
在模型中,通过右键点击模型区域,选择“Add > Analysis > Data Collector”来创建数据收集器。可以设置收集的数据类型和时间间隔。
编程创建:
通过编写代码来动态创建和管理数据收集器。
代码示例:
// 创建一个数据收集器DataCollectorpedestrianData=newDataCollector(this);pedestrianData.collect("time","pedestrianID","currentNode","speed");// 在仿真过程中收集数据for(Pedestrianpedestrian:pedestrians){pedestrianData.add(time(),pedestrian.getID(),pedestrian.getCurrentNode().getName(),pedestrian.getSpeed());}数据分析
数据分析工具(Analysis Tools)用于对收集到的数据进行统计和可视化分析。
创建数据分析工具:
图形化创建:
在模型中,通过右键点击数据收集器,选择“Add > Analysis > Chart”来创建图表。可以设置图表的类型(如柱状图、折线图等)和显示的数据字段。
编程创建:
通过编写代码来动态创建和管理数据分析工具。
代码示例:
// 创建一个柱状图Chartchart=newChart(this);chart.setType(ChartType.BAR);chart.setX("time");chart.setY("averageSpeed");// 在仿真过程中更新图表数据for(inti=0;i<100;i++){doubleaverageSpeed=calculateAverageSpeed(pedestrians);chart.add(time(),averageSpeed);}优化和调试
优化和调试是确保仿真模型准确性和有效性的关键步骤。行人库提供了多种工具和方法来帮助用户进行优化和调试。
模型优化
模型优化工具(Optimization Tools)用于调整模型参数以达到最佳仿真效果。
优化参数示例:
图形化优化:
在模型中,通过右键点击模型区域,选择“Add > Analysis > Optimization Experiment”来创建优化实验。可以设置优化的目标函数和参数范围。
编程优化:
通过编写代码来动态设置优化参数和目标函数。
代码示例:
// 创建一个优化实验OptimizationExperimentoptimization=newOptimizationExperiment(this);optimization.setObjectiveFunction("minimize averageWaitTime");optimization.setParameterRange("pedestrianSpeed",0.5,2.0);// 设置行人的速度范围// 运行优化实验optimization.run();模型调试
模型调试工具(Debugging Tools)用于检测和修复模型中的错误。
调试方法示例:
图形化调试:
在模型中,通过右键点击模型区域,选择“Debug > Start Debugging”来启动调试模式。可以设置断点、单步执行和变量监视。
编程调试:
通过编写代码来输出调试信息和日志。
代码示例:
// 输出调试信息System.out.println("Pedestrian "+pedestrian.getID()+" is at node "+pedestrian.getCurrentNode().getName());// 记录日志Log.log("Pedestrian "+pedestrian.getID()+" has reached the target node at time "+time());高级功能
行人库还提供了一些高级功能,如自定义行为、多层环境模拟等。
自定义行为
自定义行为允许用户根据特定需求扩展行人库的行为模型。
自定义行为示例:
创建自定义行为类:
publicclassCustomBehaviorextendsPedestrianBehavior{@OverridepublicvoidonEnterNode(Nodenode){super.onEnterNode(node);System.out.println("Pedestrian has entered node "+node.getName());}@OverridepublicvoidonLeaveNode(Nodenode){super.onLeaveNode(node);System.out.println("Pedestrian has left node "+node.getName());}}在行人代理中使用自定义行为:
Pedestrianpedestrian=newPedestrian(this);pedestrian.setBehavior(newCustomBehavior());
多层环境模拟
多层环境模拟用于模拟具有多个楼层的复杂环境。
多层环境设置示例:
创建多层环境:
// 创建多个楼层Floorfloor1=newFloor(this,0,0,1000,1000);// (x, y, width, height) 是楼层的位置和尺寸Floorfloor2=newFloor(this,0,1000,1000,1000);// 创建连接两个楼层的楼梯Stairsstairs=newStairs(this,500,900,500,1100);stairs.setFromFloor(floor1);stairs.setToFloor(floor2);设置行人跨楼层移动:
// 设置行人的目标节点在另一个楼层pedestrian.setTarget(floor2.getNode("exitNode"));
结合其他库
行人库可以与其他AnyLogic库(如交通库、物流库等)结合使用,以创建更复杂的仿真模型。
结合交通库
将行人库与交通库结合,可以模拟行人和车辆在同一个环境中的交互。
结合交通库示例:
创建交通环境:
// 创建交通节点RoadNoderoadNode1=newRoadNode(this,0,0);RoadNoderoadNode2=newRoadNode(this,1000,0);// 创建交通路径Roadroad=newRoad(this,roadNode1,roadNode2);road.setSpeed(10);// 设置道路速度为10米/秒设置行人和车辆的交互:
// 创建行人Pedestrianpedestrian=newPedestrian(this);pedestrian.setTarget(roadNode1);// 创建车辆Vehiclevehicle=newVehicle(this);vehicle.setRoute(roadNode1,roadNode2);// 设置行人和车辆的交互规则pedestrian.setCrossingSpeed(1.2);// 设置行人在道路上的穿越速度vehicle.setYieldToPedestrians(true);// 设置车辆在行人横穿时礼让
结合物流库
将行人库与物流库结合,可以模拟行人和物流在同一个环境中的交互。
结合物流库示例:
创建物流环境:
// 创建物流节点LogisticNodelogisticNode1=newLogisticNode(this,0,0);LogisticNodelogisticNode2=newLogisticNode(this,1000,0);// 创建物流路径LogisticPathlogisticPath=newLogisticPath(this,logisticNode1,logisticNode2);logisticPath.setSpeed(1.5);// 设置物流路径速度为1.5米/秒设置行人和物流的交互:
// 创建行人Pedestrianpedestrian=newPedestrian(this);pedestrian.setTarget(logisticNode1);// 创建物流任务LogisticTasktask=newLogisticTask(this,logisticNode1,logisticNode2);// 设置行人和物流的交互规则pedestrian.setCrossingSpeed(1.2);// 设置行人在物流路径上的穿越速度task.setYieldToPedestrians(true);// 设置物流任务在行人横穿时礼让
总结
通过以上内容,我们详细介绍了行人库的基本功能和高级功能,并提供了具体的代码示例。行人库的灵活性和强大功能使得它成为人群仿真领域的首选工具。用户可以根据具体需求,通过图形化界面或编程方式来创建和优化行人仿真模型,从而更好地研究和优化行人流量、安全性和舒适度。