The other night I nearly ran into someone in a parking lot. The parking lot was nearly empty, and we saw each other coming on from opposite ends of a row. Yet we just about collided as we both pulled into spots across the lane. In this case, the other guy was going the wrong way on a one way lane. So, as he made a face that seemed indicate that I was the one at fault, I got upset and we had words. He left shaking his head, making it clear he still thought I was at fault, making me even madder since, again, he had gone the wrong way.
As I walked off my anger, I realized that this was completely the wrong thing to have done, not because of the pettiness of the incident, but rather because, as my friend Jono says, every conflict is an opportunity for innovation. It struck me later that this would be a great way to treat these kinds of incidents in the future, especially for people like me who do not handle confrontation too well. The idea is, whenever you experience a conflict, immediately go meta and figure out what design flaws led to the conflict. I don't know if there are always design flaws, but with respect to cars, at least, I bet they are there 90% of the time. This approach would also likely diffuse the incident that precipitated the conflict, if only because the other party would find your behavior so strange.
So what's the solution to the parking lot problem? Well, the short answer is that I think it must simplify to a graph minimization problem. Let's say we built an automated system that latches onto cars somehow and parks them automatically. First, would this be socially acceptable? As long as you optimized for getting people as close as possible, I think it would. People tend to be willing to give up liberties for menial things, and parking seems menial enough. Second, how to solve this problem? Well, let's reduce this to a graph. You've got a couple of sources (driveways), a directed, connected graph of parking spot nodes, and a couple of sinks (stores). The metric is pretty simple -- get as close as possible to the store. In the case of multiple stores, this could be simulated by randomly coloring points as they enter the graph, where each color corresponds to a store. Now optimize, handle some outlier cases (handicapped spots, maybe via sensing systems), etc. It gets trickier when you consider that you also have to solve the reverse problem (exiting), and both in real time, but I bet it would be possible to come up with a heuristic algorithm that could be tweaked for a while with a simulator. And voila, IP!
I'll try this the next time I get in a conflict and report it on this blog.