Общий вопрос проектирования - PullRequest
0 голосов
/ 02 ноября 2009

У меня есть общий вопрос дизайна: Существует перекресток с четырьмя дорогами, соединяющими его. Каждая дорога имеет 2 полосы. Что было бы лучшим способом разработать программу для обработки такого перехода. Это должно позволить 2 автомобилям 2 пройти перекресток, если они не мешают друг другу. и 1 автомобиль приехал раньше другого, и они оба должны использовать одну и ту же часть перекрестка, 1-й автомобиль должен получить приоритет. Кроме того, 2 машины могут прибыть на перекрестке в одно и то же время. Какой будет лучший дизайн для этой проблемы? что именно вы должны заблокировать, чтобы обеспечить наилучшее использование соединения?

Спасибо!

Ответы [ 3 ]

0 голосов
/ 02 ноября 2009

Что вы думаете о наличии 4 разных очередей для каждой части соединения. каждая поступающая машина входит в соответствующую очередь (должна входить в более чем одну очередь?), и только после того, как машина покидает всю очередь, она может пройти через перекресток. Все еще не уверен, что является лучшей реализацией для этого.

0 голосов
/ 25 августа 2010

Создание кругового буфера с двумя записями для каждой дороги (одна для входящей, одна для исходящей) встречи на перекрестке.

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

У меня такое ощущение, что это довольно неясно, поэтому рассмотрим пересечение с 4 дорогами, которые мы назовем N, E, S и W. Для этого у нас будет 3 машины, A с востока, поворачивающего на юг, B с Юг путешествует на север, а С - с запада на восток.

Круговой буфер может быть построен как таковой (i = входящий, o = исходящий:

Ni No Ei Eo Si So Wi Wo
B  -  C  A  A  B  -  C

Проходя слева направо, мы понимаем, что два А смежны, поэтому они могут идти, но В и С не смежны, поэтому эти машины блокируют друг друга. Выберите один наугад для этого светового цикла и отпустите другой в следующем световом цикле. Так что либо А и В могут идти, либо А и С. могут идти.

Примечание 1: проверка соседних игнорирует пробелы, поэтому в случае

Ni No Ei Eo Si So Wi Wo
D  E  -  -  E  D  -  -

, который моделирует автомобиль, едущий на север, и другой, едущий на юг, и E, и D находятся рядом.

Примечание 2: Я наметил это для движения слева, потому что это то, что я делаю. Вы должны будете отразить это для вождения справа.

Примечание 3: Вы не можете перезаписать позицию в буфере, если две машины хотят, чтобы один и тот же пункт назначения автоматически блокировался, и вы должны просто оставить первый и рассмотреть другой в следующий раз.

0 голосов
/ 02 ноября 2009

Каждая машина должна блокировать части полосы, через которую она пройдет. Если одна из частей заблокирована, автомобиль должен подождать, пока она не будет выпущена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...