IDA*:n ja Dijkstran algoritmien avulla reitinhakua halutunkokoisessa, pseudosatunnaisesti generoidussa verkossa.
Tietorakenteiden ja algoritmien harjoitustyö, loppukesä 2022, Helsingin Yliopisto
Esimerkki generoidusta ja läpikäydystä verkosta:
Python application for generating graphs in two-dimensional XY-plane, and using the IDA* and the Dijkstra algorithm to find all and any shortest paths. Docs only in Finnish.
IDA*:n ja Dijkstran algoritmien avulla reitinhakua halutunkokoisessa, pseudosatunnaisesti generoidussa verkossa.
Tietorakenteiden ja algoritmien harjoitustyö, loppukesä 2022, Helsingin Yliopisto
Esimerkki generoidusta ja läpikäydystä verkosta:
Projekti kloonattu ke 24.8. noin klo 14
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ä:
pq.put((start, 0))
parametrit toisinpäin, eli --> pq.put((0, start))
, minkä jälkeen dijkstra antoi oikeita tuloksia myös muilla aloitussolmuilla.Algoritmin toteutus on hyvällä mallilla, ja lyhimpien polkujenkin määrittäminen pitäisi olla melko suoraviivaista toteuttaa, joten tässä siihen joitain ideoita:
previous
, jolloin esim. previous[2]
olisi solmua 2 edeltävä solmu lyhimmällä polullanew_cost < old_cost
), lisättäisiin solmu current
uudeksi edeltäjäksi solmulle neighbor
.paths
:iin, mikä ilmeisesti ollut ajatuksena.gen
on oiva lisäys, se helpottaa kokeilua.
add
voisi olla kuvaavammin add_edge
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! :)
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
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!
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.