U ovom repozitorijumu se nalazi kod za resavanje sledeceg probema:
https://www.csc.kth.se/~viggo/wwwcompendium/node269.html#8287
Prezentacija se moze pronaci ovde.
Opciono napraviti i aktivirati virtualno okruženje:
virtualenv env
source env/bin/activate
Instalirati potrebne biblioteke:
pip install -r requirements
Pokretanje skripte se vrši sledećom komandom:
python main.py --points=5 --map-size=100 --seed=42
Fleg --points ili -p je obavezan i predstavlja broj tacaka na mapi.
Fleg --map-size ili -m nije obavezan i predstavlja velicinu kvadratne mape.
Fleg --seed ili -s nije obevezan i predstavlja seed koji se prosledjuje prilikom generisanja
nasumicnih tacaka mape.
Podesiti parametre merenja i zeljene pretrage na pocetku fajla measure.py. Nakon toga pokrenuti:
python measure.py
Rezultat merenja je .csv tabela koja se moze naci u folderu results.
U modulu geometry se nalaze klase Point, Square i Map.
Jednostavna klasa koja se sastoji od x i y koordinata i implementira nekoliko metoda za laksi
rad sa tackama.
Klasa koja predstavlja kvadrat a sastoji se od sledecih atributa:
point- instanca klasePointkoja predstavlja pocetnu tacku kvadrataorientation- pravac u koji se prostire kvadrat naspram pocetne tackesize- velicina ivice kvadrataedge_*-xodnosnoykoordinata leve, desne, donje i gornje ivice kvadrata
Pored toga implementira neke staticke i ne staticke metode koje se koriste u pretragama.
Jednostavniji oblik Square klase i sastoji se samo od atributa point i orientation.
Klasa koja predstavlja kvadratnu mapu na kojoj se nalaze tacke za koje je potrebno izvrsiti pretragu. Za iniciranje ove klase potrebni su broj tacaka, velicina i seed. Atributi:
seednum_of_pointssizepoints- lista generisanih instanci klasePointlimits_of_points- granice svake od tacaka u 4 moguce stranesquare_size_candidates- listafloat-ova koja predstavlja kandidate za optimalnu velicinu
Search je osnovna abstraktna klasa koju nasledjuje ostale klase. Jedinu metodu koju implementira
je search_with_time_measure koja vrsi pretragu i meri trajanje iste.
Apstraktna klasa koja vrsi binarnu pretragu po kandidatima kvadrata i za svaku velicinu proverava da li je moguce postaviti kvadrate bez preseka.
Nasledjuje OptimalSearch, za zadatu velicinu proverava sve moguce kombinacije postavljanja kvadrata.
Nasledjuje BruteForce, ako je pretraga vec pokretana za zadate parametre ucitava rezultat iz fajla.
Ako nije vrsi se pretraga i rezultat se cuva u cache direktorijumu.
Nasledjuje OptimalSearch. Pretraga bazirana na sledecem radu: https://www.sciencedirect.com/science/article/pii/S0925772196000077
Jednostavan genetski algoritam. Hromozom je predstavljen nizom orijentacja koje mogu
imati vrednost 'ne', 'nw', 'sw', 'se' i velicinom kvadrata.
Sledeci parametri se prosledjuju prilikom iniciranja algoritma:
map- instanca klaseMapkoju treba pretrazitiiterations- broj generacijapopulation_size- broj jedinki u populacijielitism_size- velicina elitne populacije u procentimatournament_size- velicina turniramutation_prob- verovatnoca mutacije
TODO
https://www.sciencedirect.com/science/article/pii/S0925772196000077
https://dspace.cvut.cz/bitstream/handle/10467/69496/F3-DP-2017-Chamra-Tomas-thesis.pdf https://arxiv.org/pdf/1712.05936.pdf http://www.eecs.harvard.edu/~shieber/Biblio/Papers/tog-final.pdf https://www.mdpi.com/2220-9964/6/11/342/htm http://www.lac.inpe.br/~lorena/missae/sbc_Missae.pdf http://www.cs.uu.nl/research/techreps/repo/CS-2000/2000-22.pdf https://www.ac.tuwien.ac.at/wp/wp-content/uploads/Martin-N%C3%B6llenburg-dynlab.pdf
Sever je pozitivno y. Istok je pozitivno x.
- Refaktorisati B algoritam
- Optimizovati Genetic Search
- Napistai Binary Genetic Search