Ты подходишь к лифту , нажимаешь на кнопку со стрелкой , и наступает ожидание. Долгое ожидание. Очень долгое…

Редакция ПМ

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

Эта система требует детальной разработки и тонкой настройки, и нельзя не восхищаться кропотливой работой создавших ее инженеров.

Раньше было проще

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

Чтобы лифт мог сам управлять своим движением, инженерам нужен был алгоритм, определяющий, в каких случаях куда кабине нужно направляться. Самый простой способ — двигаться вниз и вверх с остановками на указанных этажах в предустановленные временные промежутки. Для пассажира это выглядит как поездка на электричках с пересадками: сначала идешь на десятый этаж, куда в 15:10 прибывает лифт, следующий до пересадочного этажа, а там уже ищешь, как добраться на нужный. Об эффективности говорить не приходится: в часы пик пассажиры вынуждены тратить время, ожидая, когда лифт отправится по расписанию, а в то время, когда почти никто им не пользуется, кабины впустую расходуют электроэнергию, порожними курсируя между этажами.

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

Мучительное ожидание

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

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

Иногда даже лучше, если сама поездка в лифте займет больше времени. Представим два сценария: в первом лифт приезжает через 10 с после нажатия кнопки вызова, а сама поездка до нужного этажа занимает минуту. По второму сценарию вы ждете лифт 30 с и едете тоже 30 с. Большинству людей ожидание кажется настолько невыносимым, что они выбрали бы первый вариант, пускай и придется потратить лишние десять секунд. Исходя из этого, инженеры программируют алгоритм таким образом, чтобы он учитывал «коэффициент утомительности», вместо того чтобы просто минимизировать время поездки.

Не стоит забывать и о физических ограничениях лифтов: у них есть предел скорости, а промежуток времени, чтобы просчитать следующий шаг, — не больше 1−2 с. Кроме того, у лифта нет права на ошибку: если он проедет нужный этаж без остановки, пассажиру это не понравится. Кто знает — вдруг недовольный пассажир от злости разнесет панель управления? Грамотная компьютерная система должна найти идеальный баланс между возможностями лифта и целями его пользователя, даже если тому надо было быть наверху десять минут назад.

Алгоритмы

Во многих лифтах все еще используется самый ранний и простой механизм электронного управления. Этот алгоритм содержит два правила:

1. Пока внутри лифта или на этажах, куда приближается лифт по ходу движения, есть пассажиры, которым нужно по направлению текущего движения, лифт продолжает перемещаться в этом направлении.

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

Именно поэтому на всех этажах, где есть движение по лифтовой шахте, обычно имеются кнопки вызова со стрелками «вверх» и «вниз». Так, если кабина направляется вверх, то можно собрать и высадить всех пассажиров на ее пути. Подобная схема не учитывает большинство факторов, которые мы обозначили выше, но все-таки это не худший вариант. Этот алгоритм прост в исполнении и довольно энергоэффективен, к тому же позволяет обслужить всех пассажиров за один цикл. Такой же алгоритм используется для программирования большинства жестких дисков.