Giter Club home page Giter Club logo

fringe-vs-astar's Introduction

codecov

fringe-vs-astar

Fringe-haun ja A*-haun toteuttaminen ja vertailu; HY TKT algoritmi-harjoitustyö

Asennus

  • Asenna Rustin työkalut: https://www.rust-lang.org/tools/install
  • Kloonaa repositorio ja aja sen juuressa cargo build --release.
  • Tämä luo binäärin target/release/fringe-vs-astar, jonka voi siirtää minne haluaa.

Kehitysversion voi ajaa komennolla cargo run -- [KOMENNOT]

Käyttö

$ fringe-vs-astar --help
Pathfinders for gridmaps

Usage: fringe-vs-astar [OPTIONS] <MODE> <MAP FILE>

Arguments:
  <MODE>      How program is executed. print-map prints the map ; print prints the map with problems ; a-star solves using A* ; fringe solves using Fringe Search ; compare compares a-star and fringe [possible values: print, print-map, a-star, fringe, compare]
  <MAP FILE>  Path to a file that contains a map

Options:
  -p, --problem-file <PROBLEM FILE>
          Path to a file that contains a set of problems. Default is MAP FILE.scen(ario)
  -n, --problem-number <PROBLEM NUMBER>
          1 indexed indentifier for a problem
  -s, --silent...
          Suppress output. First removes printing of maps, second removes printing of problems, third removes printing of everything
  -h, --help
          Print help
  -V, --version

Fringe-haun tilan pystyy tulostamaan -sssss flägillä. Tämä printtaa haun JOKAISEN tilan, joten pistä tämän ulostulo johonkin tiedostoon tai putkita se johonkin katselijaan. Kokeellinen ominaisuus, käytä varoen.

        $ cargo run -- fringe -sssss -n 99 maps/lak104d.map | less

Ennen jokaista karttaprinttiä on -. Etsi - (lessissä painamalla /-<Enter>) ja selaa sen jokainen löytymä (lessiss' painamalla n).

asciicast

Testit

$ cargo test 

Benchmark

$ cargo bench

Dokumentaatio

Viikkoraportit

Sisäinen dokumentaatio

$ cargo doc --open

fringe-vs-astar's People

Contributors

halmela avatar

Watchers

 avatar

fringe-vs-astar's Issues

Vertaisarviointi1

Kurssin kesätoteutuksen vähäisen opiskelijamäärän takia minulle valikoitui vertaisarvioitava projekti ohjelmointikielellä jota en ole ikinä lukenutkaan aiheesta joka ei sivua vähääkään omaani :D

Ohjaajan ohjeistuksen mukaisesti minun ei ole järkeä yrittääkään kääntää ohjelmakoodia. Uskon että ohjelma toimii enkä osaisi sitä ajamallaakaan antaa palautetta joka sinua hyödyttäisi. Sama algoritmien kanssa; tunnin parin selailu tuskin antaa samaa ymmärrystä joka sinulle on jo aiheesta karttunut.

Koitan siis jotain arvioida lähinnä kurssin arvosteluvaatimuksiin peilaten.

Aihe, toteutus, ominaisuudet:

  • Aiheena kahden reitinhakualgoritmin vertailu joka on valmiina aiheena varmasti tarpeeksi laaja.
  • Toteutus mielestäni jo kattaa aiheen laajuuden; sinulla on kaksi algoritmia jotka antavat oikean tuloksen eli molemmilla algoritmeilla päästään samaan ratkaisuun. Lisäksi olet vertaillut niiden nopeuksia joskin tulokset eivät ilmeisesti ole yhteneviä lähteiden tulosten kanssa, jos Fringen pitäisi olla nopeampi (viitaten 4. viikkoraporttiisi)?
    • Mitä tästä kuitenkin ymmärsin, Fringe on nopeampi vain tietyissä tapauksissa joissa A*:n muistin käsittely aiheuttaa suuria overheadeja, joissain tietokonepeleissä tms. Riittävätköhän Berliinin kartat tähän jos vertaa johonkin laajoihin open-world peleihin?
    • Oma käsitykseni algoritmeista: nopeus: A*>Fringe>IDA
    • Muistin kannalta tehokkain: IDA>Fringe>A*
    • Eli tapaukset joissa Fringe voittaa A* nopeudessa ovat todella laajoja ja muistia kuluttavia.
    • Tätä sivuten järkevä vertailun kohde voisi olla muistin käyttö jossa Fringen pitäisi peitota A* mutta laajuus on uskoakseni jo riittävä :D

Koodi:

  • Koodi on selkeää, komeentoitua, siistiä, jaoteltu hyvin luokkiin ja metodeihin (tai mitä vastaavat rustilla ovatkaan)
  • Pari laajempaa pois kommentoitua koodinpätkää löytyy vielä koodin seasta, jotka voisi karsia loppupalautukseen, mutta en niiden tarkoitusta niin hyvin ymmärrä niin päätä itse :P

Testaus:

  • On testattu oikeellisuutta ja algoritmien nopeuksia.
  • Yksikkötestaus ei ole vielä hirveän kattavaa mutta varmaan paremmin ymmärrät senkin oleellisuuden
  • Muisti on ilmeisesti oleellinen osa algoritmien vertailua niin olisi varmaan hyvä varmistua ettei Fringeen tule jotain bloatia joka hidastaa laskentaa. Löytyykö muistin käytöstä jotain tehokkuuslaskelmia ja vastaavatko ne odotuksiasi?

Dokumentaatio:

  • Vaikuttaa yleisesti hyvältä
  • Toteutusdokumentti ehkä hyötyisi jonkinlaisesta kaaviosta kaikista luokista ja niiden välisistä yhteyksistä sillä luokkia/tiedostoja alkaa olla paljon. Tätäkään ei taida olla kuitenkaan kurssivaatimuksiin kirjattu
  • Kurssin dokumentaatiossa toteutusdokumentin alla mainitaan myös arvio tilavaativuudesta aikavaativuuden ohella, mistä työsi voisi hyötyä

Kaikenkaikkiaan projektisi on kuitenkin todella laaja ja vaikuttava ja uskoakseni tarpeeksi laaja kurssille :D

Standardize nodes

Currently raw x and y are passed around, not necessarily in tuples.
It should be a named tuple probably, struct might be too heavy.

Create Pathfinder trait

Pathfinder takes in a graph, start and goal.
It implements Iterator for Path-enum, that has variants for Complete, Incomplete, Impossible.
It does not have to be able to draw itself, if Context can do it.

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.