我对Simpy还是很陌生,因此我想写一个简单的例子:在美国,四向停车的驾驶员的预期行为。对于不熟悉美国驾驶法律的人来说,基本规则很简单:停在十字路口的第一个驾驶员拥有通行权。当多个驾驶员同时到达时,问题就来了。同时到达的一些规则是显而易见的(如果两个驾驶员到达并且彼此面对并且直行,那么两个都可以继续);其他人则不是这样(如果两个驾驶员彼此交叉,则右边的一个具有通行权)。
我正在考虑将交叉点建模为一个简单的资源,而驱动程序对象将排队访问。激活驱动程序对象时,它将以相同的时间戳查看队列中的其他对象,并应用上述规则。如果“方法正确”,它将提前时钟,然后释放资源,并激活下一个驱动程序对象。如果没有权限,它仍将资源释放到下一个驱动程序对象,但时钟未提前。在这种情况下,重要的是第一个驱动程序需要保持在队列的最前面。
我该如何实现最后一部分?考虑这种情况。使用相同的时间戳创建三个驱动程序对象,每个对象用于从北,东和南进入。假设东方物体是第一个被激活的物体。根据规则,它需要交点并让北方的物体先行。但是,一旦北方物体提前了时钟并放弃了路口,它就应该回到东方,而不是南方。
对此有何建议?
答案 0 :(得分:0)
您可能希望设计代码,使每条道路都是一个拥有自己队列的资源(n = 1)。除非其他资源之一被占用(同时到达),否则所有汽车都将通过各自的资源(获取->释放)。如果是这样,您可以使用一种矩阵形式来确定适用的规则以及(物理)产量是否合适。然后,您可以让优先车辆先行驶(带有时间戳)
单独的队列的优势在于,无论何时开什么车,所有车道都将遵守其队列的FIFO(先进先出)策略,这恰好发生在真正的交叉路口。