NPC movement in extremely large levels

This article is great, the math is way above my head but I’m pretty sure it solves 80% of the problem I’m having. I’m going for a really detailed open world feel (If you figure out that NPC Bob eats donuts every day, you can successfully enrage him by sneaking into his workplace and house and stealing every donut in sight), but that needs to involve an awful lot of cheating to keep from wasting computational resources on things the player can’t see. The idea about doing everything by probability is brilliant though- I could probably simplify this into math that even I can understand by just storing each NPC’s daily “schedule” as a flat percent chance of location by category: Ned the Diligent has an 85% chance of being at work from 8-5 and in bed from 10-7, while George the Disorganized only has a 60% chance of being at work at any given time. Whenever I path into a location (office buildings, seedy hotels) the engine could generate a list of occupants based on who has a high chance of being there.

The only challenge with this is consistency: the game involves an awful lot of the player following up on the alibis of specific NPCs and rewards them for discovering discrepancies (if Ned’s profile says he’s almost always at work, and you rarely find him there when you check up on him, that should suggest that you should investigate him further), so I’ll have to massage the numbers a lot to make sure this works. The only other problem I could see with this approach is getting everybody to move around correctly: if I know that Ned is going to walk from his office to the bus stop at 5:15pm, I should be able to run into him by standing on the sidewalk connecting the two locations, and with my variation on this idea there’s a nontrivial chance that he’ll just never appear, and I don’t want the player to notice that people are teleporting around.