如何创建出口阻塞(目标线)的可能性并使行人使用anylogic选择其他出口?

时间:2019-05-21 08:08:05

标签: anylogic

我目前正在使用单击按钮的行人进行建筑物的地面疏散。当单击按钮时,我想创建一个概率(例如0.2表示1个出口障碍物,<0.2等于2等),火灾将阻塞1个,2个,所有3个出口(目标线)或不阻塞任何一条,并导致行人移至另一个最近的出口。我该如何使用anylogic?

1 个答案:

答案 0 :(得分:1)

退出封锁(有一定的可能性)

您可以使用AnyLogic中内置的probability distributions来获得具有所需概率的选项之一。根据您的情况,您可以对每个出口使用uniform distribution来确定它是否被阻塞。例如,在模型启动时运行它。由于我们无法真正“阻塞”目标线,因此我们进行了相反的选择:我们收集未被阻塞的对象,只允许将它们选择为目的地。为此,我们将每个可用出口保存在集合 availableExits 中。稍后在决定采取哪个出口时,我们将告诉决策功能仅考虑列表中的出口。将其放在 Main 属性的启动时部分:

if(uniform(0,1)<0.8){ // 20% probability of obstruction
    availableExits.add(targetLine1);
}
if(uniform(0,1)<0.6){ // 40% probability of obstruction
    availableExits.add(targetLine2);
}
if(uniform(0,1)<0.9){ // 10% probability of obstruction
    availableExits.add(targetLine3);
}

这样定义集合 availableExits

Collection

疏散流程

对于撤离,您可以准备一个单独的处理流程,当触发撤离时,座席会输入这些流程。该流程可以通过行人库块的ccl /撤离端口附加到主流程中。

Process

在单独的疏散流程中,放置moveTo块,其中目标是通过函数指定的。

GoTo Block

最近可用出口

此功能将遍历Collection availableExits 中的所有出口,然后选择最接近的出口。输入参数的类型为行人,名为 ped ,输出参数的类型为 TargetLine

Function Head

if(availableExits.size()<1){
    error("No exit is available");
    return null;
}

double currentDistance = ped.getPosition().distance2D(new Point(availableExits.get(0).getX(),availableExits.get(0).getY());
double minDistance = currentDistance;
TargetLine closestExit = availableExits.get(0);

for(int i=1;i<availableExits.size();i++){
    currentDistance= ped.getPosition().distance2D(new Point(availableExits.get(i).getX(),availableExits.get(i).getY());
    if(currentDistance<minDistance){
        minDistance = currentDistance;
        closestExit = availableExits.get(i);
    }
}

return closestExit;