Как создать вероятность для препятствия на выходе (целевая линия) и заставить пешеходов выбирать альтернативные выходы, используя anylogic? - PullRequest
0 голосов
/ 21 мая 2019

В настоящее время я работаю над эвакуацией при пожаре в здании, используя пешеходов, которые работают одним нажатием кнопки.Я хотел бы создать вероятность (например, 0,2 для 1 препятствия на выходе, <0,2 для 2 и т. Д.) При нажатии кнопки, что огонь будет препятствовать 1, 2, всем или ни одному из 3 выходов (целевая линия) и сделать пешеходовперейти к альтернативному ближайшему выходу.Как я могу сделать это с anylogic? </p>

1 Ответ

1 голос
/ 21 мая 2019

Блокировка выхода (с определенной вероятностью)

Вы можете использовать встроенные распределения вероятностей в AnyLogic, чтобы получить один из ваших вариантов с требуемой вероятностью. В вашем случае вы можете использовать равномерное распределение для каждого выхода, чтобы определить, является ли он препятствием или нет. Запустите это, например, при запуске модели. Поскольку мы не можем реально «преградить» целевую линию, мы идем наоборот: мы собираем тех, кто не загораживается, и разрешаем выбирать только тех из них, которые являются пунктами назначения. Для этого мы сохраняем каждый доступный выход в Коллекции availableExits . Позже, когда мы решаем, какой выход выбрать, мы сообщим функции принятия решения, что нужно учитывать только те из списка. Поместите это в раздел On Startup ваших 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);
}

Определить коллекцию ДоступноВыходы как это:

Collection

Поток процесса для эвакуации

Для эвакуации вы можете подготовить отдельный технологический процесс, в который агенты входят при запуске эвакуации. Этот поток может быть присоединен к основному потоку процесса через порты ccl / эвакуации блоков пешеходной библиотеки.

Process

В отдельном потоке процесса эвакуации поместите блок moveTo, в котором назначение определяется функцией.

GoTo Block

Ближайший доступный выход

Эта функция будет перебирать все выходы в вашей коллекции 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;
...