DNA of #CRE: The State of Commercial Brokerage in 2021 | ACCESS THE REPORT→

Going Up? Down? What Does the Elevator’s Algorithm Say?

Mechanized elevators have lifted us onward and upward for over 150 years. Modern architecture relies on towering skyscrapers thanks to the unavoidable result of a growing population and intensifying urbanization. Hence, as fellow Propmodo writer Kyle Hagerty puts it, “elevators are a vital part of public transit.” Though its physics will forever inhibit the elevator’s speed (and anyone who suffers from motion sickness may want it to stay that way), other improvements are gaining momentum. Case in point: perfecting the elevator’s algorithm to shorten wait times. 

When elevators and buildings shifted away from manual operations to computer-operated systems, those computer systems used algorithms to determine how to make elevators as efficient as possible. According to a report conducted by the Tennessee Research and Creative Exchange (TRACE), “although most elevator manufacturers offer their own proprietary algorithms which are mostly treated as trade secrets,” problems of long wait times persisted. “In a 1996 study by Robert Crites and Andrew Barto, it was found that training an elevator algorithm using reinforcement learning offered notable improvements over older dynamic programming approaches to solving large scale optimization problems in various aspects.” 

Popular Mechanics writer Jesse Dunietz says that elevator engineers grapple with problems associated with wait times constantly, but “none of [those questions] are as simple as they seem. Clearly, an elevator should try to reduce travel time. But how should it prioritize your time?” Let’s say an elevator can see which floors have passengers waiting, but if multiple floors have passengers on standby, where should the elevator go? To reduce wait times, you might follow an algorithm like this: direct the elevator to go to the nearest passenger waiting, and have the elevator carry them to their destination while picking up any other passengers along the way who are also heading in the same direction. However, that strategy has a problem. In a tall building where the majority of passengers are only going between the first and second floors, some poor soul waiting for the elevator on the highest floor might get stuck there. That can happen because an elevator that always picks the nearest passenger will always stick to the first and second floors where there are always nearby passengers waiting. That strategy perpetuates a vicious cycle where floors that are further away will get ignored. 

So an optimal elevator should reach every passenger in a reasonable time frame. A simple way to accomplish that is to have an elevator that follows a fixed pattern: Start at the first floor, go up to the top floor, and pick up any upward-bound passengers along the way. Then, go back down to the first floor picking up any downward-bound passengers in the process. If repeated indefinitely, this elevator will always service every passenger. This algorithm quite literally happens to be named “the elevator algorithm.” 

But that doesn’t mean that we can’t improve on this strategy. If the elevator is traveling up, but there’s nobody in that direction waiting, the elevator can stop ascending, turn around, and start descending instead. Doing that alone makes the elevator more efficient. Of course, the real way to make vertical transportation in a building more efficient is to introduce more elevators, but that poses a new problem. Multiple elevators using this same elevator algorithm isn’t an efficient solution either. If two elevators find themselves traveling in the same direction, they might wind up deadlocked in parallel and not much of an upgrade from a single elevator. 

In an attempt to solve that problem, some elevator systems communicate with one another. If one elevator is servicing requests going up, then it signals another elevator to start heading down. Some systems prioritize elevators to separate floor segments. Some designate express elevators that get people back and forth between popular floors, ignoring less popular floors to optimize transit time. 

There are other factors the elevator systems might optimize for, not just for minimizing wait times but for minimizing times spent in the elevator, avoiding overcrowding elevators, and minimizing energy usage. Since buildings come in different shapes and sizes, it’s tough to decipher a clear pattern of when and where people request elevators. Programming a good algorithm that works well across a diverse array of buildings is challenging to say the least. Because of that, a popular approach has been to let the computer decide on its own algorithm. A computer operating the elevator system can try one scheduling algorithm using reinforcement learning (trial and error), see how well it performs, and then adjust over time. The algorithm becomes better and better for that particular building’s needs, making sure that elevators are always at the lobby when people are likely to enter, preventing any one person from waiting too long, and adjusting to optimize for the time of day. When it comes to reinforcement learning algorithms in elevators, the TRACE report practically gushes:

“For users, the benefit is clear: a better elevator experience. For owners, the benefit is more indirect, yet no less significant: a higher profit margin. To explain, regardless of the business sector, happier people mea[n] better business. These people can either be employees or customers, and, therefore, this increase can take the form of greater productivity, increased sales, or more positive reviews. No matter the channel, the end result remains the same. Improved elevators will make people happier, or, at the very least, will make people less unhappy. This effect will cascade until it results in more money for the business the elevator is supporting. Assuming the owner of the elevator has some stake in the business, if they are not already a part of it, they will reap the benefits of this increase.”  

There may not be a universally perfect solution to the elevator problem, but reinforcement learning allows elevator designers and engineers the ability to test new techniques of enhancing the elevator experience, so every time someone presses the call button on an elevator, they are actively participating in the improvement of the algorithm’s schema. Elevator technology has come a long way from steam power and hand cranks to real-time monitoring and traffic prediction, and the complex demands of urban living need an efficient approach in order to thrive.

Staff Writer
Have Another
‘Self-Cleaning’ Surfaces Are Not, but That Doesn’t Make Them Useless
[wpforms id="132553" title="false"]
<div class="wpforms-container wpforms-container-full" id="wpforms-132553"><form id="wpforms-form-132553" class="wpforms-validate wpforms-form" data-formid="132553" method="post" enctype="multipart/form-data" action="/going-up-down-what-does-the-elevators-algorithm-say/" data-token="3fd402570ee47edb0193064314b6f6f7"><noscript class="wpforms-error-noscript">Please enable JavaScript in your browser to complete this form.</noscript><div class="wpforms-field-container"><div id="wpforms-132553-field_1-container" class="wpforms-field wpforms-field-name" data-field-id="1"><label class="wpforms-field-label" for="wpforms-132553-field_1">Name <span class="wpforms-required-label">*</span></label><div class="wpforms-field-row wpforms-field-large"><div class="wpforms-field-row-block wpforms-first wpforms-one-half"><input type="text" id="wpforms-132553-field_1" class="wpforms-field-name-first wpforms-field-required" name="wpforms[fields][1][first]" required><label for="wpforms-132553-field_1" class="wpforms-field-sublabel after ">First</label></div><div class="wpforms-field-row-block wpforms-one-half"><input type="text" id="wpforms-132553-field_1-last" class="wpforms-field-name-last wpforms-field-required" name="wpforms[fields][1][last]" required><label for="wpforms-132553-field_1-last" class="wpforms-field-sublabel after ">Last</label></div></div></div><div id="wpforms-132553-field_2-container" class="wpforms-field wpforms-field-email" data-field-id="2"><label class="wpforms-field-label" for="wpforms-132553-field_2">Email <span class="wpforms-required-label">*</span></label><input type="email" id="wpforms-132553-field_2" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][2]" required></div><div id="wpforms-132553-field_3-container" class="wpforms-field wpforms-field-text" data-field-id="3"><label class="wpforms-field-label" for="wpforms-132553-field_3">Company <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132553-field_3" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][3]" required></div><div id="wpforms-132553-field_5-container" class="wpforms-field wpforms-field-text" data-field-id="5"><label class="wpforms-field-label" for="wpforms-132553-field_5">Job Title <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132553-field_5" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][5]" required></div></div><div class="wpforms-field wpforms-field-hp"><label for="wpforms-132553-field-hp" class="wpforms-field-label">Website</label><input type="text" name="wpforms[hp]" id="wpforms-132553-field-hp" class="wpforms-field-medium"></div><div class="wpforms-submit-container"><input type="hidden" name="wpforms[id]" value="132553"><input type="hidden" name="wpforms[author]" value="19997"><input type="hidden" name="wpforms[post_id]" value="133172"><button type="submit" name="wpforms[submit]" id="wpforms-submit-132553" class="wpforms-submit om-trigger-conversion" data-alt-text="Sending..." data-submit-text="UNLOCK THE REPORT" aria-live="assertive" value="wpforms-submit">UNLOCK THE REPORT</button></div></form></div> <!-- .wpforms-container -->
[wpforms id="132239" title="false"]
<div class="wpforms-container wpforms-container-full" id="wpforms-132239"><form id="wpforms-form-132239" class="wpforms-validate wpforms-form" data-formid="132239" method="post" enctype="multipart/form-data" action="/going-up-down-what-does-the-elevators-algorithm-say/" data-token="e86c28a2d6e8f98744719cc23a0db44e"><noscript class="wpforms-error-noscript">Please enable JavaScript in your browser to complete this form.</noscript><div class="wpforms-field-container"><div id="wpforms-132239-field_1-container" class="wpforms-field wpforms-field-name" data-field-id="1"><label class="wpforms-field-label" for="wpforms-132239-field_1">Name <span class="wpforms-required-label">*</span></label><div class="wpforms-field-row wpforms-field-large"><div class="wpforms-field-row-block wpforms-first wpforms-one-half"><input type="text" id="wpforms-132239-field_1" class="wpforms-field-name-first wpforms-field-required" name="wpforms[fields][1][first]" required><label for="wpforms-132239-field_1" class="wpforms-field-sublabel after ">First</label></div><div class="wpforms-field-row-block wpforms-one-half"><input type="text" id="wpforms-132239-field_1-last" class="wpforms-field-name-last wpforms-field-required" name="wpforms[fields][1][last]" required><label for="wpforms-132239-field_1-last" class="wpforms-field-sublabel after ">Last</label></div></div></div><div id="wpforms-132239-field_2-container" class="wpforms-field wpforms-field-email" data-field-id="2"><label class="wpforms-field-label" for="wpforms-132239-field_2">Email <span class="wpforms-required-label">*</span></label><input type="email" id="wpforms-132239-field_2" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][2]" required></div><div id="wpforms-132239-field_3-container" class="wpforms-field wpforms-field-text" data-field-id="3"><label class="wpforms-field-label" for="wpforms-132239-field_3">Company <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132239-field_3" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][3]" required></div><div id="wpforms-132239-field_5-container" class="wpforms-field wpforms-field-text" data-field-id="5"><label class="wpforms-field-label" for="wpforms-132239-field_5">Job Title <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132239-field_5" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][5]" required></div></div><div class="wpforms-field wpforms-field-hp"><label for="wpforms-132239-field-hp" class="wpforms-field-label">Message</label><input type="text" name="wpforms[hp]" id="wpforms-132239-field-hp" class="wpforms-field-medium"></div><div class="wpforms-submit-container"><input type="hidden" name="wpforms[id]" value="132239"><input type="hidden" name="wpforms[author]" value="19997"><input type="hidden" name="wpforms[post_id]" value="133172"><button type="submit" name="wpforms[submit]" id="wpforms-submit-132239" class="wpforms-submit om-trigger-conversion" data-alt-text="Sending..." data-submit-text="UNLOCK THE REPORT" aria-live="assertive" value="wpforms-submit">UNLOCK THE REPORT</button></div></form></div> <!-- .wpforms-container -->
[wpforms id="132234" title="false"]
<div class="wpforms-container wpforms-container-full" id="wpforms-132234"><form id="wpforms-form-132234" class="wpforms-validate wpforms-form" data-formid="132234" method="post" enctype="multipart/form-data" action="/going-up-down-what-does-the-elevators-algorithm-say/" data-token="41f5ec0eeddc1c1e0e2cb7912f0e4ef9"><noscript class="wpforms-error-noscript">Please enable JavaScript in your browser to complete this form.</noscript><div class="wpforms-field-container"><div id="wpforms-132234-field_1-container" class="wpforms-field wpforms-field-name" data-field-id="1"><label class="wpforms-field-label" for="wpforms-132234-field_1">Name <span class="wpforms-required-label">*</span></label><div class="wpforms-field-row wpforms-field-large"><div class="wpforms-field-row-block wpforms-first wpforms-one-half"><input type="text" id="wpforms-132234-field_1" class="wpforms-field-name-first wpforms-field-required" name="wpforms[fields][1][first]" required><label for="wpforms-132234-field_1" class="wpforms-field-sublabel after ">First</label></div><div class="wpforms-field-row-block wpforms-one-half"><input type="text" id="wpforms-132234-field_1-last" class="wpforms-field-name-last wpforms-field-required" name="wpforms[fields][1][last]" required><label for="wpforms-132234-field_1-last" class="wpforms-field-sublabel after ">Last</label></div></div></div><div id="wpforms-132234-field_2-container" class="wpforms-field wpforms-field-email" data-field-id="2"><label class="wpforms-field-label" for="wpforms-132234-field_2">Email <span class="wpforms-required-label">*</span></label><input type="email" id="wpforms-132234-field_2" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][2]" required></div><div id="wpforms-132234-field_3-container" class="wpforms-field wpforms-field-text" data-field-id="3"><label class="wpforms-field-label" for="wpforms-132234-field_3">Company <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132234-field_3" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][3]" required></div><div id="wpforms-132234-field_5-container" class="wpforms-field wpforms-field-text" data-field-id="5"><label class="wpforms-field-label" for="wpforms-132234-field_5">Job Title <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-132234-field_5" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][5]" required></div></div><div class="wpforms-field wpforms-field-hp"><label for="wpforms-132234-field-hp" class="wpforms-field-label">Name</label><input type="text" name="wpforms[hp]" id="wpforms-132234-field-hp" class="wpforms-field-medium"></div><div class="wpforms-submit-container"><input type="hidden" name="wpforms[id]" value="132234"><input type="hidden" name="wpforms[author]" value="19997"><input type="hidden" name="wpforms[post_id]" value="133172"><button type="submit" name="wpforms[submit]" id="wpforms-submit-132234" class="wpforms-submit om-trigger-conversion" data-alt-text="Sending..." data-submit-text="UNLOCK THE REPORT" aria-live="assertive" value="wpforms-submit">UNLOCK THE REPORT</button></div></form></div> <!-- .wpforms-container -->
[wpforms id="131996" title="false"]
<div class="wpforms-container wpforms-container-full" id="wpforms-131996"><form id="wpforms-form-131996" class="wpforms-validate wpforms-form" data-formid="131996" method="post" enctype="multipart/form-data" action="/going-up-down-what-does-the-elevators-algorithm-say/" data-token="c3fc093d3a621fce14b5286ea36b3a10"><noscript class="wpforms-error-noscript">Please enable JavaScript in your browser to complete this form.</noscript><div class="wpforms-field-container"><div id="wpforms-131996-field_1-container" class="wpforms-field wpforms-field-name" data-field-id="1"><label class="wpforms-field-label" for="wpforms-131996-field_1">Name <span class="wpforms-required-label">*</span></label><div class="wpforms-field-row wpforms-field-large"><div class="wpforms-field-row-block wpforms-first wpforms-one-half"><input type="text" id="wpforms-131996-field_1" class="wpforms-field-name-first wpforms-field-required" name="wpforms[fields][1][first]" required><label for="wpforms-131996-field_1" class="wpforms-field-sublabel after ">First</label></div><div class="wpforms-field-row-block wpforms-one-half"><input type="text" id="wpforms-131996-field_1-last" class="wpforms-field-name-last wpforms-field-required" name="wpforms[fields][1][last]" required><label for="wpforms-131996-field_1-last" class="wpforms-field-sublabel after ">Last</label></div></div></div><div id="wpforms-131996-field_2-container" class="wpforms-field wpforms-field-email" data-field-id="2"><label class="wpforms-field-label" for="wpforms-131996-field_2">Email <span class="wpforms-required-label">*</span></label><input type="email" id="wpforms-131996-field_2" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][2]" required></div><div id="wpforms-131996-field_3-container" class="wpforms-field wpforms-field-text" data-field-id="3"><label class="wpforms-field-label" for="wpforms-131996-field_3">Company <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-131996-field_3" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][3]" required></div><div id="wpforms-131996-field_5-container" class="wpforms-field wpforms-field-text" data-field-id="5"><label class="wpforms-field-label" for="wpforms-131996-field_5">Job Title <span class="wpforms-required-label">*</span></label><input type="text" id="wpforms-131996-field_5" class="wpforms-field-large wpforms-field-required" name="wpforms[fields][5]" required></div></div><div class="wpforms-field wpforms-field-hp"><label for="wpforms-131996-field-hp" class="wpforms-field-label">Message</label><input type="text" name="wpforms[hp]" id="wpforms-131996-field-hp" class="wpforms-field-medium"></div><div class="wpforms-submit-container"><input type="hidden" name="wpforms[id]" value="131996"><input type="hidden" name="wpforms[author]" value="19997"><input type="hidden" name="wpforms[post_id]" value="133172"><button type="submit" name="wpforms[submit]" id="wpforms-submit-131996" class="wpforms-submit om-trigger-conversion" data-alt-text="Sending..." data-submit-text="UNLOCK THE REPORT" aria-live="assertive" value="wpforms-submit">UNLOCK THE REPORT</button></div></form></div> <!-- .wpforms-container -->