Куда поедем?
Что управляет лифтом
Ты подходишь к лифту, нажимаешь на кнопку со стрелкой, и наступает ожидание. Долгое ожидание. Очень долгое…
На самом деле существует веская причина, по которой кабины лифта одна за другой отправляются наверх, не останавливаясь на твоем этаже. Это не потому, что они тебя не любят. Каждый раз, когда мы нажимаем на кнопку, лифт решает не самую простую задачу. Система должна выбрать, когда и какую кабину направить на наш этаж. Кроме того, нужно решить, стоит ли лифту подняться наверх с пятого этажа и забрать пассажиров на седьмом, прежде чем опуститься к нам на первый. А еще нужно учесть, кто уже прождал дольше всех и какой маршрут будет наиболее эффективным.
Эта система требует детальной разработки и тонкой настройки, и нельзя не восхищаться кропотливой работой создавших ее инженеров.
Раньше было проще
Порядок движения самых первых лифтов с электронным управлением определяли люди. Оператор, находящийся в кабине, направлял лифт вверх и вниз при помощи дросселя и останавливал движение, как только он или диспетчер видели нового пассажира. Однако лифтеры совершали ошибки, требовали достойных оплаты и условий труда, поэтому уже к началу 1950-х их повсеместно заменили электронными переключателями.
Чтобы лифт мог сам управлять своим движением, инженерам нужен был алгоритм, определяющий, в каких случаях куда кабине нужно направляться. Самый простой способ – двигаться вниз и вверх с остановками на указанных этажах в предустановленные временные промежутки. Для пассажира это выглядит как поездка на электричках с пересадками: сначала идешь на десятый этаж, куда в 15:10 прибывает лифт, следующий до пересадочного этажа, а там уже ищешь, как добраться на нужный. Об эффективности говорить не приходится: в часы пик пассажиры вынуждены впустую тратить время, ожидая, когда лифт отправится по расписанию, а в то время, когда почти никто им не пользуется, кабины впустую тратят электроэнергию, порожними курсируя между этажами.
К 1965 году инженеры остановились на знакомой каждому с детства модели: пассажир нажимает на кнопку вызова, и на его этаж прибывает кабина. Но вот задача: как алгоритму понять, куда направлять кабину, если ее вызывают сразу на нескольких этажах?
Мучительное ожидание
Какова должна быть идеальная система координации лифтов? Должен ли лифт приехать сначала к тому пассажиру, который ждет дольше всех? Или лучше направить кабину к ближайшему этажу вызова? Как найти баланс между скоростью подачи лифта и расходом электроэнергии?
Понятно, что нужно оптимизировать время на провоз пассажиров. Но как расставить приоритеты? Если одному пассажиру придется ждать не 20 с, а минуту, прежде чем перед ним раскроются двери лифта, насколько это для него будет утомительнее? В три раза? А может, в шесть или семь? Даже для такой незамысловатой задачи нет четких вводных данных.
Иногда даже лучше, если сама поездка в лифте займет больше времени. Представим два сценария: в первом лифт приезжает через 10 с после нажатия кнопки вызова, а сама поездка до нужного этажа занимает минуту. По второму сценарию вы ждете лифт 30 с и едете тоже 30 с. Большинству людей ожидание кажется настолько невыносимым, что они выбрали бы первый вариант, пускай и придется потратить лишние десять секунд. Исходя из этого, инженеры программируют алгоритм таким образом, чтобы он учитывал «коэффициент утомительности», вместо того чтобы просто минимизировать время поездки.