Open godisreal opened 5 years ago
There may be a problem about the following code in Change_Target_Door(). That is, when a door is closed, some agents change the target right away. Sometimes this feature is useful, and sometimes it is not. I think that the agents may not know the door is closed if they haven't got the door in sight.
DO i = 1, N_DOORS
IF (ABS(EVAC_DOORS(I)%IMODE)==2 .AND. .NOT.EVAC_DOORS(I)%TARGET_WHEN_CLOSED) THEN
Is_Visible_Door(i) = .FALSE.
Is_Known_Door(i) = .FALSE.
END IF
END DO
DO i = 1, N_EXITS
IF ( (ABS(EVAC_EXITS(i)%IMODE)==2) .AND. .NOT. EVAC_EXITS(i)%COUNT_ONLY .AND. &
.NOT.EVAC_EXITS(I)%TARGET_WHEN_CLOSED) THEN
Is_Visible_Door(N_DOORS+i) = .FALSE.
Is_Known_Door(N_DOORS+i) = .FALSE.
END IF
END DO
! I_DoorAlgo=0: Use the main evacuation mesh flow field ("stupid agents"), do not follow these. ! I_Door_Mode: 0) no target door or not (yet) moving ! 1) target door + moving by using flow fields ! 2) target door + moving + bee line towards the exit (do not use flow fields) XYZ visible ! 3) target door + moving + bee line towards the exit (do not use flow fields) XB visible ! 4) target door + moving + bee line towards the exit (do not use flow fields) XYZ+XB visible ! <0) came out form a door or an entry, but does not have a target door
! HR%I_DoorAlgo: 1 rational agents, 2 known doors, 3 herding, 0 main evac mesh ff ! Herding behaviour: Count and weight by the distance the target doors of the other ! agents around this agent. The five (or less) nearest neighbor agents are used. ! I_HERDING_TYPE 0: default herding, 1: keep the first choice, 2: do not move, ! 3: do not move + keep the first choice
I think there are two different concepts regarding door selection of agents.
The first thing is whehter an agent knows a door or not, and it is boolean logic (know it or not know it), and it is characterized by known_door_names in the current program (evac.f90). The second issue is how an agent is familiar with a known door, and it should be measured by a real number from 0 to 1 (Just like a probality). An agent can only be familiar with a known door. If one does not know the door, there is no issue of being familiar to it. Thus, the familiarity measure is specified by known_door_probs, and it is only effective for the known doors. That is, known_door_probs=1.0 means being fully familiar with a door while known_door_probs=0.0 means unfamilarity.
In EXIT namelist Users are also allowed to give a value in between like 0.6 or 0.3 (0.0<=known_door_probs<=1.0). This is very similar to probablity, and familiarity to an exit is thus understood as the frequence of using the exit in the historical data (prior information). From there one can infer the probablity of how agents select the doors and exits in the simulation run.
However, exiting program (evac.f90) only provides a good user interface, but the inner algorithm of exit selection is far from perfect. The algorithm generates a random number and compare it with known_door_probs to assign the exit either familiar or unfamiliar (boolean logic). A better method is integrating the real familiary measure in the preference order in the door selection algorithm (User Guide pp. 29, Table3). As a result, the familarity is not a yes/no logic, but with the real number given by known_door_probs.
The original weblink is as below.
https://github.com/firemodels/fds/issues/2206