Giter Club home page Giter Club logo

ida-dijkstra-reitinhaku's Introduction

IDA* + Dijkstra Reitinhaku

IDA*:n ja Dijkstran algoritmien avulla reitinhakua halutunkokoisessa, pseudosatunnaisesti generoidussa verkossa.

Tietorakenteiden ja algoritmien harjoitustyö, loppukesä 2022, Helsingin Yliopisto

Toteutusdokumentti

Testausdokumentti

Käyttöohje

Esimerkki generoidusta ja läpikäydystä verkosta:

Example

ida-dijkstra-reitinhaku's People

Contributors

jvs23 avatar

Watchers

 avatar

ida-dijkstra-reitinhaku's Issues

Vertaisarviointi 2

Vertaisarvionti, viikko 6

Projekti kloonattu ke 24.8. noin klo 14

Ohjelman toiminta

Ohjelman suorittaminen onnistui komentoriviltä ja suoraan vscodessa täysin ongelmitta, hyvä! Verkon visualisointiin on myös löydetty varsin selkeä työkalu.

Kokeilin useammilla verkoilla ja dijkstra näytti toimivan odotetusti. Tosin kokeiltuani eri lähtö- ja maalisolmuja huomasin, että algoritmi toimi kunnolla ainoastaan, kun lähtösolmuna oli 0. Tämä korjaantui hyvinkin pienellä muutoksella algorithms.py:ssä:

  • Vaihdoin rivillä 24 pq.put((start, 0)) parametrit toisinpäin, eli --> pq.put((0, start)), minkä jälkeen dijkstra antoi oikeita tuloksia myös muilla aloitussolmuilla.

Huomio dijkstran lyhimmästä polusta

Algoritmin toteutus on hyvällä mallilla, ja lyhimpien polkujenkin määrittäminen pitäisi olla melko suoraviivaista toteuttaa, joten tässä siihen joitain ideoita:

  • Voisi lisätä sopivan tietorakenteen, joka pitää kirjaa solmujen edellisistä naapureista lyhimmällä polulla
    • Kuvaava nimi voisi tässä tapauksessa olla previous, jolloin esim. previous[2] olisi solmua 2 edeltävä solmu lyhimmällä polulla
  • Kun parempi etäisyys löytyy (new_cost < old_cost), lisättäisiin solmu current uudeksi edeltäjäksi solmulle neighbor.
  • Lopuksi lyhimmän polun saa kasaan hakemalla maalisolmusta lähtösolmuun saakka jokaisen solmun edeltäjän.
    • Tämän voi tietenkin tehdä kaikille solmuille vaihtamalla maalisolmua.
    • Lyhimmät polut voi tällöin tallettaa avain-arvo-pareina paths:iin, mikä ilmeisesti ollut ajatuksena.
    • Avaimena voisi siis olla maalisolmu ja arvona lyhin polku listana tai muuna tietorakenteena.

Muita huomiota

  • Koodin dokumentaatio on kattavasti kirjoitettu, ja koodia oli pääosin oikein sujuva lukea.
  • Graph-luokan satunnaisen verkon luova metodi gen on oiva lisäys, se helpottaa kokeilua.
    • Hieman toissijaisena huomiona, metodin voisi kenties nimetä kuvaavammin/pidemmin, mikä parantaisi koodin luettavuutta.
    • Toisena esimerkkinä metodi add voisi olla kuvaavammin add_edge
    • Muutenkin metodien ja muuttujien lyhentämistä on hyvä välttää, jos mahdollista.
  • Testien ajaminen onnistuu, hyvä!
    • Testauksessa voisi erilaisten verkkojen lisäksi testata myös samaa verkkoa juurikin eri lähtö- ja maalisolmuilla.
    • Testit voisi myös erotella omaan hakemistoon rakenteen selkeyttämiseksi.
  • Muuten rakenne on selkeä, ja koska ohjelma ei ole järin suuri, niin eri osien tarkoitus on helposti ymmärrettävissä.

Yhteenveto

Ohjelma on vielä hieman keskeneräinen aihemäärittelyyn nähden, mutta hyviä toteutuksia on saatu jo paljon aikaiseksi, ja pohja on hyvällä mallilla projektin viemiseksi eteenpäin. En valitettavasti osannut IDA*:in toteutukseen ottaa kantaa, mutta vielä on aikaa sekin ratkaista ennen loppupalautusta. Aihe on mielenkiintoinen, tsemppiä viimeisiin palautuksiin! :)

Koodikatselmointi

Palaute tehty 15.8. klo 20 kloonatusta versiosta

Koodia oli helppo lukea ja projekti käynnistyi ongelmitta annetuilla asennusohjeilla. 👍

Oli hauska huomata, miten eri tavoilla ohjelmaa voi lähteä kokoamaan, toki tässä on varmaan eroja senkin vuoksi, että python on kielenä suoraviivaisempi ja nopeampi kuin java, jolla itse olen vääntänyt 😃 , vrt. https://www.youtube.com/watch?v=HMsAfaKGaB8

Huomioita koodista

  • Algoritmeja oli testattu vasta muutamalla verkolla eikä koodissa ei ollut juurikaan virheiden käsittelyä yms. mukana. Isoimmilla verkoilla mahdollisia virheitä voi olla ilman näitä työlästä löytää.

  • Vaikka ohjelma on vielä pieni, niin erottaisin ainakin testit omaan hakemistoonsa vaikka muuten hierarkisuutta ei haluaisi lisätä.

  • Main.py: UI-osuuden voisi irroittaa omaksi metodikseen tai tiedostokseen.

  • Algorithms.py:
    Voi olla että python-lukutaitoni on ruosteessa, mutta jäin ihmettelemään, miksi rivillä 24 prioriteettijonoon lisätään tutkittava näin pq.put((start, 0)) ja rivillä 41 näin pq.put((new_cost, neighbor)) - eikö tuossa ole arvot väärinpäin? Jos on ok, niin ehkä voisi miettiä muuttujien nimiä havainnollisemmiksi tai vähän selittää enemmän auki.

Networkx vaikutti fiksulta valinnalta, hyvännäköisiä graafeja suoraviivaisesti!

Hyvää duunia ja tsemppiä loppurutistukseen!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.