用预定义的对象和约束生成随机等级的algorithm

比方说,我正在开发一个游戏,在这个游戏中生成一个城市,建筑物被随机放置。 生成道路的方法很容易find,就像创造一个迷宫,但我想不出一个方法来产生和放置建筑物。

建筑物离公路应该有多远,阳台应该面对哪里,花园或者树木靠近建筑物。 更重要的是,如果有一所学校,那么这个世代就不可能全是随机的。 游乐区和篮球场应该在一个方向,建筑入口也应该面对这一点。 医院的紧急和正常出口朝向一个方向,停车位在另一个方向,在一个购物商场同时有入口和停车位。

我还没有find合适的解决scheme。 我想到了使用物理模拟,在同一个地方堆叠物体,给他们量,并施加力量到他们应该在的地方,等待一段时间,直到他们解决。 这将解决一些限制,并防止任何重叠,但可能会有这样的缺点。 我想知道是否有一个更简单或更有效的algorithm来解决这个问题。