keskiviikko 23. maaliskuuta 2022

Optimaalinen järjestys nähtävyyksien kiertämiseen eli travelling salesman -ongelma

Travelling salesman eli kauppamatkustajan ongelma on vanha pähkinä siitä, missä järjestyksessä annetuissa kohteissa kannattaa käydä, jotta kokonaismatkasta tulisi mahdollisimman lyhyt. Täydellinen optimi löytyy vain kokeilemalla kaikki eri vaihtoehdot, joiden määrä nousee kaavan (n-1)! mukaisesti erittäin nopeasti. Viidessä kohteessa voidaan käydä 4x3x2x1 = 24 eri järjestyksessä, minkä pystyy vielä arvioimaan omassa päässään. Mutta jos kohteita on esimerkiksi 10 ja ne ovat hajallaan eri puolilla karttaa, vaihtoehtoja on jo 362 880.

Järjestys on tärkeä vaikkapa jakeluyhtiöille tai Wolt-kuskeille, jotka haluavat minimoida matkan annettujen pisteiden välillä. Tietokoneille on kehitetty erilaisia optimointialgoritmeja, mutta varmuudella lyhin reitti löytyy vain kokeilemalla.

Kesän lomamatkoja suunnitellessa tuli mieleen, missä järjestyksessä kohteet kannattaisi kulkea. Yllättäen tähän ei löytynytkään valmista mobiili- tai nettisovellusta, kuten olin ajatellut. Löysin kuitenkin näppärän ratkaisun Franco Folinin blogista. Hän oli tehnyt pienen koodinpätkän, joka siirtää työn Google Mapsin tehtäväksi. 

Sivumennen sanoen on ällistyttävää, mitä kaikkea nykyään voi saada aikaan muutamalla koodirivillä valmiita ilmaispalveluita hyödyntämällä. 

Ja näin se toimii. 

Syötetään Google Docsiin joukko pääkaupunkiseudun museoiden osoitteita. Folinin koodia kutsutaan solussa A2 funktiona optimalRoute(), jolle annetaan kolme parametria: lista kohteista, lähtöpiste ja loppupiste. Lähtö- ja loppupisteet voivat olla soluja tai ne voidaan kirjoittaa lainausmerkeissä auki suoraan funktiokutsuun. 

Helsingin museoiden osoitteita.

Esimerkissä on kahdeksan osoitetta. Lähtö- ja loppupisteeksi on merkitty Tekniikantie 12, Espoo (solu B2), mutta sen tilalla voisi olla ensimmäisen vierailukohteen osoite.

Folinin mukaan Google Mapsin ilmaisversio hyväksyy enintään 25 kohdetta, maksamalla saisi vielä pidemmän listan.

Funktio palauttaa numerolistan, jonka mukaisesti osoitteissa kannattaa vierailla. Folinin koodissa liikkumistavaksi on valittu auto, mutta sen voi vaihtaa vaikka kävelyksi, jos vierailee kesällä vieraassa kaupungissa.

Numerolista kannattaa vielä lajitella, jolloin saadaan havainnollinen listaus:

Museoiden optimaalinen vierailujärjestys.

Espoosta lähdettäessä kannattaa siis ensiksi vierailla Suomen valokuvataiteen museossa, jatkaa sieltä Ateneumiin, sitten Mannerheim-museoon ja niin edelleen.

Jos kesälomalla täytyy kiertää sukuloimassa eri puolilla maata, kohteiksi riittävät pelkät kuntien nimet. Google Maps on mainio, sillä se valitsee automaattisesti kunnan keskipisteen, mikä riittää järjestyksen optimointiin.

Kaupunkien vierailujärjestys.

Espoosta lähdettäessä kannattaa siis ajaa reittiä Kotka - Kouvola - Savonlinna - Kuopio - Kokkola - Seinäjoki - Tampere - Turku ja takaisin Espooseen.

Vielä yksi esimerkki on Googlen kyky tunnistaa kohteet suoraan niminä, jolloin edes osoitteita ei tarvita. 

Nähtävyyksien vierailujärjestys, aloitus Finlandia-talolta.

Kun lähtöpiste on Finlandia-talolla, siitä tulee luonnollisesti myös ensimmäinen vierailukohde. Sieltä jatketaan sitten Hämeen linnaan, Tampereelle Särkänniemeen ja niin edelleen.

Ovatko tulokset oikeita? Tein pistokokeita siirtämällä osoitteet kartalle ja katsomalla lenkin yhteispituutta, algoritmin ehdottama järjestys oli kaikissa tapauksissa kilometrimääriltään pienin. Matka-ajan optimointi voisi kuitenkin johtaa toisenlaiseen järjestykseen.

perjantai 4. maaliskuuta 2022

Fitbit Charge 5

Fitbit-aktiivisuusrannekkeet uudistuvat säännöllisesti. Nyt on vuorossa jo viides sukupolvi, Fitbit Charge 5. Sen näkyvin uudistus on värinäyttö:

Värit selkeyttävät näyttöä.

Värit ovat nykyaikaa ja selkeyttävät mukavasti näyttöä. AMOLED-näytön tarkkuus on 326 ppi, joten kuvanlaadussa ei ole moittimista. Jokaisen mallin myötä myös laturin kytkentä on vaihtunut. Nyt se perustuu magneettiseen vastakappaleeseen, joka nappaa kiinni ja irtoaa helposti. Viidestä eri ratkaisusta tämä on selvästi kätevin. 

Uutta on myös sisäänrakennettu GPS, jolla lenkin saa talteen ilman älypuhelintakin. Useimmilla puhelin lienee kuitenkin matkassa jo ihan turvallisuuden vuoksi, joten paikannuksen merkitys ei ole kovin suuri.

Aiemmissa malleissa oli yksi mekaaninen painike, nyt siitä on luovuttu. Umpinainen kuori tekee laitteesta vesitiiviin aina 50 metriin asti, mutta saunaa se ei kestä. Painikkeen poistuminen on kaksiteräinen miekka, sillä esimerkiksi kellonajan tarkistaminen kävi ennen helposti painikkeesta. Nyt rannetta joutuu heilauttamaan sopivasti, jotta näyttö aktivoituu. Esimerkiksi luennolla tai ruokapöydässä temppu on hankala ja saa kaipaamaan edellistä versiota. Ja edellisenkin mallin luvattiin olevan vesitiivis 50 metriin.

Näytön saa näkymään myös pysyvästi, mutta se lyhentää tietenkin akkukestoa. Ilman jatkuvaa näyttöä yhdellä latauksella selviää koko viikon, mikä riittää mainiosti. 

Toimintoja hallitaan kosketusnäytöllä, mikä yleensä toimii, mutta ei ihan aina reagoi odotetusti. Ranneke ilmoittaa myös puheluista ja tekstiviesteistä, mutta jostain syystä ranneke värisee määräajoin koko puhelun keston ajan, mikä on ärsyttävää. Aiempi malli värisi vain puhelun tullessa. 

Puhelimessa toimiva Charge 5:n hallintaohjelma on yhtä havainnollinen kuin ennenkin. Nyt se näyttää lisäksi hengitystiheyden nukkuessa, happisaturaation, sykkeen epäsäännöllisyyden (Heart rate variability) millisekunneissa sekä ihon lämpötilan yöllisen muutoksen. Stressitilan seuranta huomioi syketiedot, unirytmin ja urheilusuoritusten määrän. Charge 5 tunnistaa automaattisesti monet liikuntamuodot, joten niiden kirjaaminen ei unohdu.

Unitiedot eri vaiheineen, leposyke ja erilaiset numeeriset tiedot (askeleet, kerrokset, sykkeen sijainti eri tiheysmäärillä) ovat entisellään.

Kehittyneemmät ominaisuudet vaativat 9 euroa kuussa maksavan Premium-tilauksen. Siihen sisältyy monipuolisempien analyysitietojen lisäksi jaksamisesta kertova päivittäinen Daily Rediness -infopaketti. Ensimmäiset kuusi kuukautta ovat maksuttomia, joten palvelun hyödyllisyys on helppo arvioida.

Entiseen tapaan kosketusnäytöltä voi ohjata Bluetoothin avulla Spotify-toistoa ja suorittaa lähimaksuja Nordean kortilla, mutta sormenjälki- ja kasvotunnistuksen puuttuminen tekee maksamisesta kömpelöä. Helpointa käyttää jatkossakin puhelinta.

Sydäntä seuraava EKG-ominaisuus olisi mainio lisä, mutta se ei ole Suomessa käytettävissä.

Rannekkeen hinta on noin 180 euroa.