Simpy: сдача ресурса без потери позиции в очереди - PullRequest
0 голосов
/ 01 марта 2019

Я очень новичок в Simpy, поэтому я собираюсь написать простой пример: ожидаемое поведение водителей на остановке в 4 направлениях в Соединенных Штатах.Для тех из вас, кто не знаком с американскими законами о вождении, основное правило простое: первый водитель до перекрестка после остановки имеет право проезда.Уловка происходит, когда больше чем один водитель прибывает одновременно.Некоторые правила одновременного прибытия очевидны (если два водителя прибывают друг против друга и едут прямо, оба могут продолжить движение);другие - меньше (если два водителя пересекают друг друга, тот, что справа, имеет право проезда).

Я смотрю на моделирование пересечения как простого ресурса с объектами драйвера, стоящими в очереди для доступа,Когда объект драйвера активирован, он будет смотреть на другие объекты в очереди с той же отметкой времени и применять правила, описанные выше.Если он «имеет право прохода», он опережает часы, а затем освобождает ресурс, и следующий объект драйвера будет активирован.Если у него нет права проезда, он все равно высвободит ресурс следующему объекту драйвера, но часы не продвинуты.В этом случае важно то, что первый драйвер должен оставаться в начале очереди.

Как мне реализовать эту последнюю часть?Рассмотрим эту ситуацию.Три объекта драйвера создаются с одинаковой отметкой времени, по одному для входа с севера, востока и юга.Допустим, восточный объект активируется первым.По правилам, он должен освободить перекресток и отпустить северный объект первым.Однако, как только северный объект опережает часы и освобождает перекресток, он должен вернуться на восток, а не на юг.

Есть ли какие-либо предложения по этому поводу?

1 Ответ

0 голосов
/ 07 августа 2019

Возможно, вы захотите разработать код так, чтобы каждая дорога представляла собой один ресурс (n = 1) с собственными очередями.Все машины проходят через свои соответствующие ресурсы (get -> release), если один из других ресурсов не занят (одновременный заезд).Если это так, вы можете иметь форму матричной базы, которая определяет, какое правило применяется, и подходит ли (физическая) урожайность.Затем вы можете сделать так, чтобы автомобиль с приоритетами двигался первым (с отметкой времени)

Преимущество отдельных очередей состоит в том, что независимо от того, на каком автомобиле ходит, все полосы движения будут придерживаться FIFO (первым пришел-первым вышел)) политика их очереди, которая именно так и происходит на реальном перекрестке.

...