Обновить

Лифт не знает, куда ехать. И это лучший алгоритм, который мы придумали

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели11K
Всего голосов 55: ↑55 и ↓0+65
Комментарии39

Комментарии 39

Задача из жизни: 9 этажей и 2 лифта — лифт №1 настроен так, что если никто его не вызывает в течение минуты, он автоматически уезжает на 5-й этаж, лифт №2 вообще никак не настроен (катается по вызову и останавливается по факту).

Управляющий настаивает на своём: "лифт посередине позволяет быстрее реагировать на вызовы и экономит время ожидания, если другой лифт занят!" (потому что уже, грубо говоря, находится на полпути до любого этажа).

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

Жители, разумеется, доказать свою точку зрения фактами не могут (всё на уровне ощущений "ну, моторы же крутятся, электричество тратится и тросы стираются!"), впрочем, как и управляющий ("всё равно же лифт в итоге проходит полный путь, а так он будет хотя бы поближе к вызывающему!") — просто потому что нет таких исследований или они плохо ищут.

Вопрос: а кто прав на самом деле? 🙂

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

А вы кстати что хотите? Увеличить ресурс лифта или уменьшить скорость подачи? Это надо одно из двух выбрать имхо

Чем больше будет время ожидания, тем больше людей будет ходить пешком, тем меньше будет расходоваться ресурс лифта

Обслуживающей организации выгоднее чтобы люди ждали дольше

Вот если на вечерний час пик все лифты на первый отправлять, а утром где то на 7 мой то может может среднее время ожидания и уменьшится

А ведь некоторые станции управления это как раз поддерживают, специально для сокращения среднего времени ожидания.

Обслуживающей организации выгоднее чтобы люди ждали дольше

Отчаивались и топали пешком!

вспоминается задачка вида: в доме N этажей, на каждом проживает 2^k человек, все они утром уходят, а вечером возвращаются домой. Какая кнопка лифта нажимается чаще всего? Утром кнопка первого этажа внутри лифта, а вечером столько же кнопка вызова лифта на первом этаже. Нужно настраивать на утренний и вечерний режимы, как предложили уже в этой ветке

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

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

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

Принцип: лифт едет вверх, пока есть хоть один вызов выше

Если вы на 2-м этаже, а лифт только что проехал вас наверх — ждите, пока он доберётся до 20-го, развернётся и спустится обратно. Даже если наверху никого нет.

Как будто противоречивые утверждения. Если наверху никого нет, то почему лифт туда едет?

Вы описываете уже следующий алгоритм, который это учитывает. А первый просто гоняет лифт туда-сюда, как автобус. Для лифта он и правда не подходит.

Кажется, это всё в пределах одного алгоритма

Я по-другому понял этот алгоритм: если хоть кто-то вызвал лифт, то он проделает весь путь до верхнего этажа и обратно. Вспомнил даже где кажется видел: в ТЦ такое бывает, когда три-четыре этажа и плюс-минус равномерное количество людей на них.

Когда прочитал первый абзац — словил дежавю. С лифтами тоже каждый раз об этом думаю. У меня в доме 3 лифта на 40 этажей, и регулярно возникает ощущение, что они живут какой-то своей жизнью: стоят где угодно, но только не там, где ты. Я всегда был уверен, что задача должна быть довольно простой — но до такого погружения в тему сам так и не дошёл.

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

У нас там шлагбаум + выкатные ворота. Подъезжаешь → прикладываешь карту → открывается шлагбаум → потом начинают открываться ворота. Вроде норм.

Веселье начинается, если ты не подождал.

Перед тобой проехала машина, ты подъехал — а ворота уже закрываются. Ты прикладываешь карту — шлагбаум открывается, а ворота продолжают ехать вниз. Ещё раз прикладываешь — ничего не происходит. Дальше вызывается охрана, которая с твоей картой и дорожным знаком (!) имитирует выезд машины из паркинга, после чего ты можешь попробовать заехать ещё раз.

И, естественно, сразу появляется мысль - "почему это вообще так работает".

Задача вроде не выглядит сложной. Хочется, чтобы всё открывалось нормально: по звонку на телефон, по RFID-метке или по распознаванию номера, если он читается. Без разницы на текущую состояние ворот/шлагбаума.

В итоге я поймал себя на том, что наконец-то нашёл повод попробовать что-то сделать на Rust (почему Rust — сам не знаю, подсознательно кажется, что он ближе к железу).

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

В одном дворе видел откатной шлагбаум и меня удивила логика его работы - если при закрывании через него кто-то пройдет он разворачивается и возвращается в полностью открытое состояние. Т.е. если поток пешеходов будет постоянный он никогда не закроется в будет дёргаться туда-сюда. Было бы логичнее чтоб он просто останавливался, ну максимум сдавал бы назад на пять сантиметров, вдруг прищемил кого.

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

Скрытый текст

Давным давно, проблемы с логистикой у лифтов решили, придумав и реализовав лифт-патерностер. Но да, он небезопасный.

Катался на таком в корпусе Е МЭИ, в 1985-86 годах. Крайне стрёмное ощущение.

Это факт. Но тут как я понимаю выбора немного - либо лифт сразу, либо бОльшая безопасность.

Ваще, такие лифты были очень распространены в первой половине 20 века в учреждениях, как раз из-за скорости (с 4 на 6 этаж, с 7 на 4 и тп) плюс из-за отсутствия необходимости выделять площадку для ожидания.

А на 50 этажей как масштабируется? Да хоть бы и на 20.

С пересадкой

При входе после домофона ближайший лифт спускаем вниз.

Подгонять лифт на средину сомнительная идея:

вниз ничего не стоит,

вверх тратим энергию.

Т.к. Откуда полезут пользователи рандом.

Ничего в лифтах не шарю, таковы ощущения.

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

вниз ничего не стоит

В случае пустой кабины - наоборот, так как лебёдка поднимает противовес (который обычно весит как кабина при половинной загрузке). При подъёме же в таком случае мотор работает практически вхолостую.

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

Единственное – насчёт "вниз ничего не стоит" вы неправы. У лифта есть противовес, и он тяжелее пустого лифта.

Пламенный привет Дональду Кнуту и его знаменитому лифту! ;-)

Представь здание. 20 этажей. 3 лифта. Утро понедельника, 9:15. В лобби бизнес-центра стоят 50 человек. Кому-то на 5-й, кому-то на 19-й, кто-то вообще с 7-го хочет на 12-й (и как он словил лифт в 9 утра — отдельный вопрос).

Представить легко, но было бы ещё очень неплохо на каждом этаже иметь весь набор кнопок для всех этажей.

Идея гениально простая: спрашивать у пассажира этаж назначения до посадки в лифт. Не вверх/вниз, а конкретный этаж. На этаже стоит панель с цифрами (или тачскрин, если здание модное). Вводишь «15» — система отвечает «Лифт C». Ты идёшь к лифту C, в кабине нет кнопок этажей (шок для неподготовленного человека).

Именно!! :-)

Так в бизнес-центрах так и сделано

Представить легко, но было бы ещё очень неплохо на каждом этаже иметь весь набор кнопок для всех этажей.

Работаю в здании, где так. Регулярно кто-нибудь садится не в тот лифт и приезжает не на тот этаж. Если это кто-то из аборигенов – чертыхается, выходит, вызывает лифт (если повезёт – назначит тот же, на котором приехал, пока он ещё на этаже). Если из гостей (или доставщики) – офигевает от происходящего (без ключ-карты он не может вызвать лифт на нужный этаж), приходится ему подсказать, что надо вызывать на 0 и идти к консьержу, чтобы тот снова вызвал лифт на нужный этаж.

Реализация Destination dispatch у, если не путаю, Otis (возможно, Schindler, буду завтра на работе – гляну) – отвратительна. Два человека подходят на первый этаж, вызывают лифт на 25 и 26 – им назначают разные лифты (один из них едет, допустим на 22 и 26, другой на 25). Одного человека лифт уже забрал, второму неизвестно сколько ждать.

Именно так + вводить этаж до посадки это разрыв шаблона.

В час пик наблюдаешь людей "А мы уже 10 могут ждём лифт С"...

(Я, кстати, не шучу про отсутствие кнопок внутри лифта. В каких-нибудь свежих бизнес-центрах класса A вы, вероятнее всего, увидите панель без единой цифры. Только кнопку открытия дверей и телефон экстренной связи.)

https://www.youtube.com/watch?v=HbDnxzrbxn4

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

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

Нет, у нас точно не так. Какой вызвал - такой и приедет, вызвал два - приедут оба. Лифты современные, но установлены вместо старых, видимо поэтому.

но установлены вместо старых, видимо поэтому

Возможно, просто поставили два одинаковых и с их соединением заморачиваться не стали.

Если один лифт то парковка должна быть на первом этаже, если есть второй или третий то на среднем этаже. У меня в доме бесит один лифт и всегда на последнем этаже 12м этаже потому я на пятый хожу пешком, потому что лифт не дождаться, сажусь если только котото выходит на первом удачно, кроме того в доме живет семья армян на 12 и 7 этажах у ник квартиры и они постоянно курсируют туда сюда буквально в течении всего дня если с первого вызвать то лифт может идти сначала с 12 и стоишь ждешь, но в 50% случаях он останавливается на 7м там заходят и едут снова на 12й в результате теряешь 2-3 минуты на ожидание в итоге можно подождать и 10 минут так и не дождаться. Проще пешком . Не представляю как поднимаются те кто живут еще выше.

Вообще никто не способен. Задача диспетчеризации группы лифтов — NP-трудная. То есть буквально: не существует алгоритма, который гарантированно найдёт оптимальный маршрут за разумное время.

Оптимальный по каким критериям? Если взять критерий, к примеру, максимально допустимого ожидания — это одно, минимального катания лифта — это другое. И т.д.

Для ряда критериев система тупо не имеет входных данных. Очевидно, что при таких вводных можно иметь только эвристики. Соответственно, при чём тут NP?

В общем, потрясающе, написана целая статья про алгоритмы и ни слова про требования!

С математической точки зрения можно придумать много разных вариантов поведения лифта. Минимальное время ожидания, максимальная скорость движения, минимальное число остановок и т.д. и т.п. Если же говорить о реальных лифтах, то самая простая модель - непрерывное движение лифтов вверх-вниз с остановками по нажатым внутри лифта или снаружи кнопкам. С указанием направления движения кабины на кнопках вызова. Тогда, где бы вы ни стояли, вы попадаете в лифт в пределах некоторого максимального конечного промежутка времени. В больших зданиях медленно из-за остановок? Увеличьте количество лифтов и скорость движения кабин. И не морочьте никому голову 😁. ИМХО, конечно 😁

У меня в советской панельке лифты работали так: при движении вверх не подбираем никого. При движении вниз подбираем всех. Если один лифт едет вверх, а второй в этот момент стоит пустой с закрытой дверью - опускается на первый этаж.

Потому что в жилом доме основное движение вверх - подьем с 1 этажа. С 5 на 7 (в гости) - редко. Вот и не запрограммировано подбирание вверх.

А вниз едут с любого этажа.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации