【发布时间】:2019-03-01 20:24:56
【问题描述】:
我对 Simpy 很陌生,所以我正在考虑编写一个简单的示例:在美国的 4 路停车处驾驶员的预期行为。对于那些不熟悉美国驾驶法的人来说,基本规则很简单:第一个到十字路口的司机,停车后,有先行权。当不止一名司机同时到达时,诀窍就出现了。同时到达的一些规则是显而易见的(如果两个驾驶员到达并且彼此面对并且直行,则两者都可以继续);其他人则不然(如果两个司机互相交叉,右边的那个有通行权)。
我正在将交叉路口建模为一个简单的资源,其中驱动程序对象排队等待访问。当驱动程序对象被激活时,它将查看队列中具有相同时间戳的其他对象并应用上述规则。如果它“有路权”,它将提前时钟然后释放资源,并激活下一个驱动程序对象。如果它没有路权,它仍然会将资源释放给下一个驱动程序对象,但时钟不会提前。在这种情况下,重要的是第一个司机需要保持在队列的最前面。
我该如何实现最后一部分?考虑这种情况。创建了三个具有相同时间戳的驱动程序对象,分别用于从北、东和南进入。假设东部对象是第一个被激活的。按照规则,它需要放弃交叉点,让北方物体先行。然而,一旦北方物体提前时钟并放弃交叉点,它应该回到东方,而不是南方。
对此有何建议?
【问题讨论】:
-
你有一些代码可以展示吗?我希望您可以使用
yield simpy.Environment.timeout(0),具体取决于您是否要按事件处理时间而不是到达时间来订购汽车。