Mitä algoritmia hissit käyttävät löytääkseen lyhimmän polun matkakohteen tilauksiin?
On helmikuu 15, 2021 by adminYritän simuloida hissiä, kuten aina, aloitin hyvin yksinkertaisesti ottamalla vain yhden tilauksen kerrallaan, ja lisäsin sitten muistia hissiin. jonojen muodossa niin, että lattiat kulkevat siinä järjestyksessä kuin ne painettiin, mikä ei tietenkään ole paras tapa.
Joten tällä hetkellä käytän hyvin yksinkertaista ja ”lyhytnäköistä” logiikka, joka on nykyiselle kerrokselle, etsi minulle lähinnä oleva kerros ja aseta se seuraavaksi kohteeksi ja silmukaksi, kunnes luettelossa ei ole enää kerroksia.
Mutta tämä ei aina toimi, esimerkiksi hissi oli 5. kerroksen rakennuksen 3. kerroksessa ja sai tilauksia 4,5,2, lyhin polku olisi 2-> 4-> 5, joka maksaa 4 kerrosta, mutta tätä logiikkaa käytettäessä 4-> 5-> 2, joka maksaa 5 sama mahdollisuus tulla valituksi koodista riippuen.
Kuinka löydän lyhimmän polun ja tehostan hissiä?
kommentit
- jonkin verran liittyvät: programers.stackexchange.com/q/96278/149904
- Haluan ’ kutsua sinut toimistooni ja selvittää algoritmin, jota hissit käyttävät siellä. Koska en ehdottomasti voi ’ t.
- @ gnasher729 Voi, voin, vaikka en tiedä ’ , koska se ’ on varmasti sama kuin toimistossani: älä koskaan pysähdy I ’ m kerroksessa, paitsi jos se on jo täynnä ihmiset. Olenko oikeassa?
- Ei aivan. Hissejä on neljä. Painat painiketta, mikään ei liiku hyvin kauan. Jos joku liikkuu, se pysähtyy aivan lattian edessä ja odottaa iät, kunnes toinen ohittaa sen, joka menee lattian ohi ja tulee sitten alas. Matkalla maahan se pysähtyy vähintään kolme kertaa, eikä kukaan pääse sisään.
- Asiaankuuluva ohjelmointipeli / haaste: play.elevatorsaga.com
vastaus
”Tehokkuus” ei ole tärkein ominaisuus, tärkeintä on varmistaa, että kaikki noudatetaan järjestystä, että nälkää ei ole. Jos joku painaa 100 ja ihmiset painavat jatkuvasti 1 ja 2, voi olla tehokasta jatkaa kulkemista näiden kerrosten välillä, mutta ”olisi mukavaa, että 100 vierailisi jossain vaiheessa.
Luulen (henkilökohtaisesta havainnosta, kun olin kiinnostunut selvittämään), että useimmat heistä tekevät:
- Aloita kulkeminen ensimmäisen painetun painikkeen suuntaan, seuraa, mihin suuntaan olemme menossa
- Kun lattia on saavutettu ja painiketta painettiin, pysäytä ja avaa ovet, merkitse tämän kerroksen painikkeita ei enää painettuina.
-
- Jos on vielä enemmän kerroksia, joissa meidän on käytävä ja jotka ovat samassa suunnassa, jatka suuntaan .
- jos ei, ja on vielä kerroksia, joissa meidän on käytävä, siirry siihen suuntaan.
- Jos ei, niin olemme valmiit ja aloitamme kohdasta 1, kun painiketta painetaan uudelleen.
Huomaa että monissa hisseissä on painikkeet ”Haluan mennä ylös” ja ”Haluan mennä alas” ovien viereen yhden painikkeen sijaan. algoritmi tarvitsee vain pienen muutoksen: kohdassa 2, jos ainoa painettu painike kyseistä lattiaa varten on yksi oven vieressä olevista painikkeista, pysäytä ja avaa ovet vain, jos menemme siihen suuntaan. Pidä painiketta mahdollisesti painettuna, jos ovet avautuvat hissin sisällä olevan painikkeen takia ja se menee väärään suuntaan.
Sinun ei koskaan tarvitse selvittää koko polkua , vain mihin suuntaan mennä seuraavaksi.
Kommentit
- tämä ohitti mieleni kokonaan, keskityin niin tehokkaasti ja unohdin, että muutkin asiat ovat tärkeitä . ’ ei ole vieläkään tehokasta mennä sanomaan 2- > 100: sta ja takaisin yksikköön yksinkertaisesti siksi, että se oli samaan suuntaan, mutta ainakin se ei takaa nälkää. ja, kokonaan aiheen ulkopuolella, ehkä siksi ’ on yhteistä löytää kaksi hissiä tällä logiikalla? mikä saa minut miettimään, onko ’ tavallisempaa löytää hissit kulloinkin vastakkaiseen suuntaan. Joka tapauksessa ’ olen edelleen utelias kuinka löytää lyhin koko polku, mutta tämä vastaa kysymykseeni erittäin siististi, kiitos
- Huomaa, että kun pääset 100 kerroksisessa rakennuksessa sinulla on tyypillisesti hissit, jotka palvelevat vain tiettyä lattiavalikoimaa (esim. 0–19, 20–39,…), sekä pikahissit, jotka kulkevat vain pitkiä matkoja (esim. 0–50, 0–100) , 50-100, mutta ei kerroksia välissä), joten sinun on ehkä vaihdettava hissit päästäksesi määränpäähän. Sinulla voi myös olla useita hissejä akselia kohti, jotka eivät tietenkään voi ohittaa toisiaan.Täysin aiheen ulkopuolella: IIRC, Käyttäjäkokemus -sivuston ylä- ja alanuolipainikkeiden tehokkuudesta kysyttiin erittäin kiehtovalta lukemiselta.
- kiitos, en tiennyt ’. alajako näyttää hyvältä strategialta, jos yksi osa hajottaa koko järjestelmän, ei ’ t ja myös jakaa mekaanisen kulumisen kannalta tärkeää kuormaa. Mietin, johtuivatko nämä pikahissit Knuth ’ s Elevator -algoritmin loogisista puutteista.
- vain muu asia i ”>
d lisää, että usein heillä on ’ koti ’ kerros, johon he palaavat, kun niitä ei käytetä, tämä voi olla erilainen eri hisseissä ja mahdollisesti jopa muuttua vuorokaudenajasta ja odotettavissa olevista käyttötavoista riippuen
Vastaa
Toinen vastaus antaa oikein hissi-algoritmin, joka on periaatteessa ”jatka samaan suuntaan niin kauan kuin mahdollista ja tee kaikki tarvittavat pysäkit matkan varrella”.
Hissialgoritmeja on muitakin. Harkitse esimerkiksi kerrostaloa, jossa huoneistot kallistuvat noustessasi. Rakennuksen omistajat voivat halutessaan muuttaa hissialgoritmia ”menemään samaan suuntaan niin kauan kuin mahdollista, mutta pysähtyy vain alaspäin”. Tällä tavoin, jos hississä on ihmisiä, jotka ovat aulassa ja menevät tielle 2, 5 ja 10, hissi menee 10: een, sitten 5: een, sitten 2: een, pudottaen ihmisiä pois järjestyksessä kuinka paljon vuokraa he maksavat. Mutta tietysti kun 10-vuotiaat lähtevät asunnostaan, heidän on usein odotettava kauemmin päästäkseen aulaan.
Jos etsit tehokasta ratkaisua keksi sitten kustannusmittari, toteuta joukko erilaisia algoritmeja ja suorita simulaatioita. Muista mitata paitsi keskimääräiset kustannukset myös mittarit, kuten pisin mitä tahansa pyyntöä palvelemaan. Pienille keskiarvoille optimointi voi joskus poistaa optimaalisen tilanteen, mikä on huono asia.
kommentit
- se näyttää olevan harvinaista (muut alogirmit)
vastaus
Huomaa, että hissit käyttävät samoja ajoitusalgoritmeja kuin jotkut kiintolevyn ohjaimet. Tavallinen SCAN-algoritmi tunnetaan jopa nimellä hissialgoritmi . Luulen, että käytännössä LOOK -algoritmi on yleisempi, koska se on hieman tehokkaampi kuin SCAN.
Kommentit
- Kun puhut niin varmasti, onko sinulla kokemusta hissien koodin käytöstä? Erityisesti uudemmat hissijärjestelmät? Olen utelias, jos syyskuun 11. päivän jälkeen NYC: ssä on ollut korkeampi prioriteetti matkustajien lähettämisessä kuin heidän nostamisessaan.
- Ota matkustajat ulos, älä alas. Käytän usein hissiä pysäköintialueella, jossa kerrosten 1–6 kolmas kerros on maanpinnan taso, joten paeta olisi paras kerros 3.
Vastaa
Tämä vastaus koskee edistyneempää kohdekontrollijärjestelmää . Rakennuksessa, jossa on useita hissejä, joissa ihmiset ilmoittavat mihin kerrokseen he haluavat mennä, ja järjestelmä osoittaa heille hissin.
Idea on melko yksinkertainen, teoreettisesti tiedät missä kaikki ja kaikki hissit ovat. Voit siis laskea jokaiselle hissille, milloin arvioitu saapumisaikasi on ja kuinka paljon se hidastaa muita. Valitse ahneimmin nopein hissi.
Tähän liittyy rajoituksia, kuten ryhmät, jotka painavat painiketta vain kerran ja ihmiset, jotka painavat painiketta useita kertoja.
Vastaa