Использование FRP для моделирования дорожной сети с пробками

В настоящее время я пытаюсь понять стрелки и FRP, и я столкнулся с вопросом, который я не могу сопоставить с FRP, а именно, как моделировать дорожную сеть.

Я думал, что смогу смоделировать дорожную сеть в виде стрелок, где каждая стрелка представляет сегмент дороги. Он принимает потоки машин в разных местах и ​​в разное время и производит однотипные, хотя и в разных местах и ​​в разное время.

Все идет нормально. Но в этой модели не учтено, что сегменты могут заклинить. В то время как каждый сегмент мог бы хорошо реагировать на интенсивное движение и задерживать автомобили все больше и больше, чем больше он становится перегруженным, не будет эффекта подпора, то есть пробка не будет распространяться назад на другие сегменты дороги.

Я подозреваю, что применяю здесь слишком много объектно-ориентированного мышления вместо того, чтобы сосредоточиться на том, что нужно вычислить, но я не могу уложить это в голове.

  • Как смоделировать дорожную сеть с помощью Arrows, чтобы учитывались эффекты подпора?

person Martin Drautzburg    schedule 21.05.2015    source источник
comment
что такое эффект подпора - это просто пробка, которая будет распространяться по вашим дорогам в обратном направлении? - в качестве примечания: хотя этот вопрос интересен, он, скорее всего, будет слишком широким для такого рода сайта часто задаваемых вопросов - есть что показать и конкретная проблема (например: как вы моделировали свои дороги - в коде;))   -  person Random Dev    schedule 21.05.2015
comment
Да, эффект подпора, как вы описываете. Нет, у меня нет никакого кода, чтобы показать, потому что я считаю, что должен сначала решить эту концептуальную проблему.   -  person Martin Drautzburg    schedule 21.05.2015
comment
Как много вы занимались моделированием дискретных систем? Использовали ли вы раньше программное обеспечение, такое как Arena (это то, с которым я познакомился на уни, а есть конечно и другие)? Чтобы закодировать что-то подобное в стрелки или FRP, вам нужно будет потратить много времени на размышления о модели, которую вы хотите использовать, и на эксперименты с тем, как смоделировать ее в одной из этих парадигм. Вы также можете рассмотреть что-то вроде Pipes, так как он имеет двунаправленную связь для каждого канала.   -  person bheklilr    schedule 21.05.2015
comment
возможно, противодавление - лучший термин.   -  person Erik Kaplun    schedule 21.05.2015
comment
Почему бы ему не распространяться в обратном направлении? Кажется, что вам нужна только функция моделирования, чтобы знать, заполнен ли следующий сегмент, и если да, то не позволять автомобилям выходить из сегмента. Возможно, вам действительно стоит показать какой-нибудь код, чтобы мы могли увидеть вашу ментальную модель и то, как она запрещает распространение.   -  person firefrorefiddle    schedule 22.05.2015


Ответы (1)


Проблема в том, что в стрелках и в FRP поток информации вообще однонаправленный. Думайте о стрелке FRP как о части цифровой схемы. Выход элемента схемы не зависит от того, что к нему подключено — он просто «предлагает» выход всем, кто в этом заинтересован. Это также визуально описано в Примитивных сигнальных функциях в обзоре Yampa:

Ямпа — сигнальные функции

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

Таким образом, каждый сегмент дороги должен иметь 2 входа: один говорит, скажем, сколько автомобилей может принять следующий сегмент, и сколько автомобилей поступает из предыдущего сегмента (которое всегда должно быть меньше или равно количеству автомобилей, которое может принять сегмент). принять на данный момент). Это означает, что поток сигналов FRP будет фактически круговым. Для этого вам понадобятся циклы, показанные на последнем изображении на диаграмме выше, которые захвачены ArrowLoop класс типов. Скорее всего, у вас будет собственная функция привязки для сегментов дороги, которая будет создавать необходимые петли внутри. Обратите внимание, что в петле должна быть временная задержка, чтобы предотвратить ее расхождение, что имеет смысл, поскольку автомобилям требуется некоторое время, чтобы перейти от одного сегмента к другому.

(Возможно, я дополню ответ примером, если у меня будет больше времени.)

person Petr    schedule 22.05.2015
comment
Петр, кажется, ты полностью понимаешь мою проблему. У меня были похожие мысли: сегменту нужны два входа! Я спрашиваю себя следующее: кто говорит, что расчет должен возвращать автомобили? Вычисления не обязательно должны следовать за потоком автомобилей, но могут вычислять что-то для входной и нижней сторон сегмента. Но я не могу закончить этот ход мыслей. - person Martin Drautzburg; 22.05.2015