While it's hardly perfect, it's clear the AI is better. Long gone are cases of zombies just running around in circles or permajumping next to a fence because it can't get over, yet won't go around or damage it.
As the AI has become more complex there is now more room for scope in regard to how they "misbehave". This is demonstrated by the lengths people go to to try and confuse/beat/exploit* it. Previously in A16 it was as dumb as a bag of hammers and needed little encouragement to make fools of themselves.
Still work to do of course, these things are not easy to get right. That's the benefit from people trying to outsmart the AI as it gives great test cases to improve on.
There's still the "existential" debate about whether the AI should be able to path to you despite not being able to see such a path (ie: as in should they have innate understanding of a building's structure?) or whether each pathing decision should be contextual on a step by step basis. While I think we'd all like to see the latter, I just feel that due to the ease of generic pathing within Unity and the amount of extra processing it would take to undertake a per step approach that we'll just have to live with them being a bit psychic in regards to how to get to you. After all, if it was the option of a ton more zombies or the same number but more "realistic" than now, I reckon most would go with upping the zombie count limit - with the obvious caveats of performance and optimisation, of course.
(Minor edit: I should say, I have no intimate knowledge of the code. I base my assumptions, and they are that, on what I see on screen combined with some experience in software dev.)
(* delete as applicable)