Ohh i recognise a lot of events in there.
You can do some optimisation by putting the object with the less instances first in every overlap/collision condition.
But the biggest problem is event 101. The calculation of the obstacle map happens in 1 tick. And it is causing 3.000.000 collision checks /second. I dont know an alternative yet for a dynamic obstacle map.
That logic flow works perfect though, nice to see those civilians run in panic away from those zombies. Gonna be hard to find another algorithm that works as nice as this one.