Asansörler tarafından seyahat kat siparişlerine giden en kısa yolu bulmak için hangi algoritma kullanılır?


27

Bir asansörü simüle etmeye çalışıyorum, her zaman olduğu gibi bir seferde sadece tek bir sipariş alarak çok basit bir şekilde başladım, daha sonra sıraya göre asansöre bellek ekledim; Açıkçası en iyi yaklaşım değil.

Bu yüzden şu anda çok basit ve "kısa görüşlü" bir mantık kullanıyorum, ki şu anki kat, bana en yakın katıyı bulup, bir sonraki hedefim olarak ayarlamamış ve listede daha fazla kat bulunmuyor.

Fakat bu her zaman işe yaramaz, örneğin asansör 5 katlı bir binanın 3. katındaydı ve 4,5,2 sipariş aldı, en kısa yol 2 - 4 - 5 olacak, bu da 4 kata mal oluyor ama bu mantığı kullanıyor 4-> 5-> 2 olan, 5'in koduna bağlı olarak seçilme şansı aynıdır.

En kısa yolu nasıl bulurum ve asansörü nasıl daha verimli hale getiririm?



6
Sizi ofisime davet etmek ve asansörlerin orada kullandığı algoritmayı bulmak istiyorum. Çünkü kesinlikle yapamam.
gnasher729

1
@ gnasher729 Oh, sizi tanımıyor olmama rağmen, çünkü kesinlikle ofisimdeki ile aynı: kesinlikle insanlarla dolu olanlar hariç, bulunduğum yerde asla durma. Haklı mıyım
Andres F.

2
Tam değil. Dört asansör var. Düğmeye basarsanız, hiçbir şey çok uzun süre hareket etmez. Biri hareket ederse zeminden hemen önce durur ve yaşını bekler, zeminden geçip aşağı inene kadar başka biri tarafından geçinceye kadar. Yere inerken hiç kimse girmeden en az üç kere durur.
gnasher729

2
İlgili programlama oyunu / mücadelesi: play.elevatorsaga.com
dwikle

Yanıtlar:


30

“Verimlilik” en önemli özellik değil, en önemlisi her emrin takip edildiğinden, açlık olmadığından emin olmaktır. Birisi 100'e basarsa ve insanlar 1 ve 2'ye basmaya devam ederse, bu katlar arasında gidip gelmek etkili olabilir, ancak 100'ün bir noktada ziyaret edilmesi iyi olur.

Ben düşünüyorum çoğu yapmak (ı endam ilgilenen edildi kişisel gözlem):

  1. Basılan ilk düğmeye doğru ilerlemeye başla, hangi yönde gittiğimizi takip et
  2. Bir zemine ulaşıldığında ve o düğmeye basıldığında, kapıları durdurun ve açın, bu zeminin düğmelerini artık basılmamış olarak işaretleyin.
    • Aynı yönde olan ziyaret etmemiz gereken daha fazla kat varsa , o yöne devam edin .
    • Değilse ve ziyaret etmemiz gereken zeminler varsa, o yöne doğru hareket edin.
    • Olmazsa bittik ve bir düğmeye tekrar basıldığında 1'de başlayacağız.

Pek çok asansörün tek bir düğme yerine kapıların yanında "Yukarı gitmek istiyorum" ve "aşağı gitmek istiyorum" düğmelerine sahip olduğunu unutmayın. Algoritmanın sadece küçük bir değişikliğe ihtiyacı var: 2'de, o kat için basılan tek düğme kapının yanındaki düğmelerden biriyse, sadece o yöne gidersek kapıları durdurup aç. Asansörün içinde bulunan bir düğme nedeniyle kapılar açıksa düğmeyi basılı tutun ve yanlış yöne gidiyordur.

Asla bir yolun tamamını bulmak zorunda değilsiniz , sadece hangi yöne gideceğinizi.


Bu tamamen aklımdan geçti, verime odaklandım ve diğer şeylerin de önemli olduğunu unuttum. 2 -> 100 arasında ve 1'e geri dönme demesi hala etkili değil çünkü sadece aynı yöne doğru ama en azından açlıktan yoksun kalıyor. ve, tamamen konu dışı, belki de bu mantıkla iki asansör bulmak yaygın olmasının nedeni budur? bu da beni herhangi bir zamanda ters yöne giden asansörleri bulmanın daha yaygın olup olmadığını merak etmemi sağlıyor. Her neyse, hala en kısa yolu bulmak için hala merak ediyorum, ancak bu soruma çok iyi cevap veriyor, teşekkürler
Raed Tabani

7
100 katlı bir binaya ulaştığınızda, tipik olarak yalnızca belirli bir kat aralığında hizmet veren asansörlere (örneğin 0-19, 20-39,…) ve yalnızca uzun mesafelere giden asansörlere sahip olacağınızı unutmayın (örn. 0 ila 50, 0 ila 100, 50 ila 100 arasındadır, ancak aralarında zemin yoktur), bu nedenle hedefinize ulaşmak için asansörleri değiştirmeniz gerekebilir. Ayrıca mil başına açıkça birbirini geçemeyen birden fazla asansöre sahip olabilirsiniz. Tamamen konu dışı: IIRC, Kullanıcı Deneyimi sitesindeki yukarı ve aşağı ok düğmelerinin etkinliği hakkında çok etkileyici bir okuma için yapılan bir soru vardı .
Jörg W Mittag

teşekkürler, bunu bilmiyordum. alt bölümleme, sistemin bir bölümünü bozarsa, aynı zamanda mekanik aşınma ve yıpranma için önemli olan yükü dağıtmak iyi bir strateji gibi görünmektedir. Bu ekspres asansörlerin, Knuth'un Asansör algoritmasının mantıksal eksikliklerinden mi kaynaklandığını merak ediyorum.
Tabed Tabani

ekleyeceğim tek şey, kullanımda olmadıklarında dönecekleri bir 'ev' tabanına sahip olmaları, bu durum farklı asansörler için farklı olabilir ve günün saatine ve beklenen kullanım şekillerine bağlı olarak değişebilir
jk .

Gerçekten hangi yöne gittiğime bakılmaksızın yukarı / aşağı düğmesine yarıya kadar basma eğilimim var. Benim durumumda, sadece bir hedefim var, bu yüzden asansör seçtiğimden veya istediğimden bağımsız olarak beni o konuma götürüyor. aşağı. Aşağı düğmesine basacak olsaydım, üstümden bir yer seçip asansörün hareket etmeden önce üstümden bir yer seçmemden şüpheleniyorum, ilk önce bastığım yerden ziyade beni altımdaki yere götürecek. Yanılıyor olabilirim, kendimi bir asansörde bulduğumda test edeceğime emin olacağım.
Ucenna

13

Diğer cevap, temel olarak "mümkün olduğu kadar uzun süre aynı yöne doğru devam et ve yol boyunca gerekli her şeyi durdur" olan standart asansör algoritmasını verir.

Başka asansör algoritmaları da var. Örneğin, siz apartmanlar gittikçe daha pahalı hale gelen bir apartmanı düşünün. Binanın sahipleri, asansör algoritmasını "mümkün olduğu kadar uzun süre aynı yöne gitmek, ancak aşağı inmek için" değiştirmeyi seçebilirler. Bu şekilde, asansörde lobide bulunan ve 2, 5 ve 10'a giden insanlar varsa, asansör 10, sonra 5, ardından 2'ye gider ve ne kadar kira ödediklerini sırayla bırakır. Ancak elbette 10 yaşın üzerindeki insanlar evlerinden çıktıklarında, lobiye ulaşmak için daha uzun süre beklemek zorunda kalacaklar.

Etkili bir çözüm arıyorsanız, o zaman maliyet için bir ölçüm yapın ve farklı algoritmalar uygulayın ve simülasyonları çalıştırın. Yalnızca ortalama maliyeti değil, aynı zamanda herhangi bir isteğin karşılanması en uzun süren ölçümleri de ölçmeyi unutmayın. Düşük ortalamaları optimize etmek bazen kötü olan en kötü durumu deoptimize edebilir.


1
Nadir gibi görünüyor (diğer alogirthms)
FindOutIslamNow

10

Asansörlerin, bazı sabit sürücü denetleyicileriyle aynı zamanlama algoritmalarını kullandığını unutmayın. Standart SCAN algoritması, asansör algoritması olarak da bilinir . Uygulamada LOOK algoritmasının SCAN'dan biraz daha etkili olduğu için daha yaygın olduğunu düşünüyorum .


Kesinlikle böyle konuştuğunuzda, asansör kodunu uygulayan mesleki tecrübeniz var mı? Özellikle yeni asansör sistemleri? NYC’de 9 / 11’den sonra yolcuları yere indirmeye karşı daha yüksek öncelikli olup olmadığını merak ediyorum.
John Zabroski
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.