Другой вопрос по моделированию лифта (лифта) - PullRequest
1 голос
/ 30 мая 2011

Я играю с дизайном Lift Simulation. У меня есть Контроллер Лифтов с коллекцией Лифтов. Лифт движется через определенные состояния (например, STATIONARY, MOVING, DOORS_OPEN и т. Д.). - В состоянии MOVING процесс Lift будет просто спать в течение X мс. В настоящее время я концентрируюсь на взаимодействиях между процессом Lift Controller и коллекцией процессов Lift.

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

Мои первоначальные мысли состояли в том, чтобы каждый Лифт после получения запроса этажа перемещался через различные состояния и затем информировал Контроллера Лифта, когда он завершит перемещение на конкретный этаж. Однако при такой конструкции контроллер лифта может запросить лифт, чтобы увидеть, какой этаж находится рядом с ним, принять решение для этого лифта (т.е. остановиться на следующем этаже), но к тому времени, когда он сказал лифту остановиться, этот лифт перешел мимо этого этажа (задержка, скажем, из-за перехвата сети).

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

Есть ли у людей какие-либо проблемы с этим типом подхода (в отношении многопоточности, масштабируемости) - есть ли лучшие способы моделирования этого? Мысли приветствуются!

Ответы [ 2 ]

1 голос
/ 30 мая 2011

Даже если вы перенесете все элементы управления на контроллер подъема, проблема синхронизации все равно будет возникать в другом месте. Например, если контроллер отправляет сообщение, когда лифт находится в пути, он не может со 100% точностью знать, на каком этаже будет находиться лифт при получении сообщения.

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

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

Конечно, все зависит от того, насколько реалистичной должна быть симуляция.

1 голос
/ 30 мая 2011

Ключевое слово, на котором вы основали свое решение построить более сложный контроллер подъема, состоит в том, что некоторые подъемы могут сдвинуться за пределы состояния, которое ожидает контроллер.Я думаю, что частота этих «инцидентов» низкая, так же как и их негативное влияние на эффективность системы.Я бы оставил это простым и следовал бы с оптимистичным подходом.Ожидайте получения хорошего отклика от лифта, но (если это действительно необходимо) иногда приходится иметь дело с ситуацией, когда лифт не делает то, что должен делать, и / или выбирает другой лифт.

...