Local avoidance with exceptions

we are working on a game inside a disco. A lot of agents are walking around, trying to get to different destinations.
Currently the agents can not walk through each other, but this leads to clutter sometimes and agents being stuck. We don’t want to disable collision detection completely as its nice to have it in general.

How can we tell the agents to try to avoid each other as best as possible but if they have to they can walk through each other?


Maybe something more boids-like would work better for your game?
(see Boids (Flocks, Herds, and Schools: a Distributed Behavioral Model))