So, abstractly what is a road. It is a queue for vehicles. Intersections allow elements (vehicles) to change queues. In this thought experiment I will abstract away lanes to just increased bandwidth and a corresponding increased throughput. Essentially, the idea with dynamically changing road systems is two fold: one, we want the transitions between queues to be as efficient as possible two, we want the throughput of the queues to be maximized. Main cause of congestion is crossing traffic which holds up the queue. So, usually we create a separate lane for those that are turning against opposing traffic. Or we make roads one way and you can’t turn against traffic (seen in DC).
So, the problem turns into a resource allocation problem at intersections, meaning you have some number of queues (resources) and you have to get the elements (cars) as quickly through to there destination. The idea then would be to determine how to adjust the queues to increase the resources when necessary and at the right locations.