--
You received this message because you are subscribed to the Google Groups "Osmand" group.
To unsubscribe from this group and stop receiving emails from it, send an email to osmand+un...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
--
Is somebody knowing whether they are using a closed list or a open list.
2015-03-13 13:37 GMT+01:00 Osmandtrier <stephan....@googlemail.com>:Is somebody knowing whether they are using a closed list or a open list.I'm not an expert at all but in time I did gain some knowledge.As far as I know, the heuristic coefficient determines whether the set is closed or not. That is the difference between A* and Dijkstra.That also the exact reason why the calculation is so slow with the default 1.0 (for car) and uses this enormous amount of memory. All possible routes are calculated.If you use a heuristic coefficient >1 the calculations that meet the heuristic h "are closed" and not calculated anymore/again.Again: that is exactly why you can only calculate up to approx. 400 km with the default h=1.0 on a 512MB phone, and up to approx. 800 km on a 512MB phone in 20-35% of the time.
2015-03-13 13:37 GMT+01:00 Osmandtrier <stephan....@googlemail.com>:Is somebody knowing whether they are using a closed list or a open list.I'm not an expert at all but in time I did gain some knowledge.As far as I know, the heuristic coefficient determines whether the set is closed or not. That is the difference between A* and Dijkstra.
That also the exact reason why the calculation is so slow with the default 1.0 (for car) and uses this enormous amount of memory. All possible routes are calculated.If you use a heuristic coefficient >1 the calculations that meet the heuristic h "are closed" and not calculated anymore/again.
That also the exact reason why the calculation is so slow with the default 1.0 (for car) and uses this enormous amount of memory. All possible routes are calculated.If you use a heuristic coefficient >1 the calculations that meet the heuristic h "are closed" and not calculated anymore/again.
I am very sure that this is not correct. Because you can set hc up to ten and it calculates so long as hc=1 set maxdefaultspeed in the profile very high ( for example 10000).
The hc cut of the priorisation of the prefered street, because the spread of the values getting smaller and so you need less calculation. For cyclist does using of hc mean, you are pushed on mainstreet instead you choosed in your routing.xml minor roads. (In other sligh polemic words, if you love life, do not use hc.)
The hc cut of the priorisation of the prefered street, because the spread of the values getting smaller and so you need less calculation. For cyclist does using of hc mean, you are pushed on mainstreet instead you choosed in your routing.xml minor roads. (In other sligh polemic words, if you love life, do not use hc.)This is not true. If you calculated with an h>1, it will use branches to calculate your route but if the branch is getting less optimal then another branch it will stop that branch and close it. With an hcof 1.0 it will continue calculating that branch (and sub branches) until it reaches its destination.It could mean that it will take a main road, but not neccessarily. For cycling you might be right, but I think the road profile for cycling, which road to use, is not correct and that the hc is of less influence on the correct routing.
The value of a branch is calculated in this way
That also the exact reason why the calculation is so slow with the default 1.0 (for car) and uses this enormous amount of memory. All possible routes are calculated.
So: the car navigation using h=1.0 is not using closed sets. The (current) cycling navigation using h=1.3 or h=1.4 is using closed sets.
I am very sure that this is not correct. Because you can set hc up to ten and it calculates so long as hc=1 set maxdefaultspeed in the profile very high ( for example 10000).
The hc cut of the priorisation of the prefered street, because the spread of the values getting smaller and so you need less calculation.
For cyclist does using of hc mean, you are pushed on mainstreet instead you choosed in your routing.xml minor roads.
If you set max default speed to 10000 and you leave the other speeds as is derived from the road tags in OSM, you will bias you model in such a way that it can't function correctly.
If you calculated with an h>1, it will use branches to calculate your route but if the branch is getting less optimal then another branch it will stop that branch and close it.
With an hcof 1.0 it will continue calculating that branch (and sub branches) until it reaches its destination.
It could mean that it will take a main road, but not neccessarily.
For cycling you might be right, but I think the road profile for cycling, which road to use, is not correct and that the hc is of less influence on the correct routing.
I also definitely think that OsmAnd's implementation is less optimal then the implementation in other routing engines.
At that time I mentioned that MapFactor Navigator Free did it much, much better (6th post in that thread): "Mapfactor Free: Skagen, Denmark - Malaga, Spain 3216 km, 74MB, 22 sec".
Resulting speed = priority*speed*hc
Okay but the claimed effect, you are pushed on unwished street still exist. If i do not want this cut off, I have to increase maxspeeddefault. But then increasing hc show very less effect saving calculationtime.
So the question is, why brouter needs lees time then Osmand using hc=1.8 with the same priority. Why can calculate brouter in a area with one of the highest Data density of osm a route over 60 km airdistance on a four year old defy, and Osmand collaps with hc=1.
Brouter uses Java. Osmand Java or C++(because C++ is quicker)
Conclusion, the implementaion of a*-algorithmen could be better.
Okay but the claimed effect, you are pushed on unwished street still exist. If i do not want this cut off, I have to increase maxspeeddefault. But then increasing hc show very less effect saving calculationtime.
If you increase hc and maxSpeedDefault at once, they will nullify each other.
You can't combine both effects (fast calculation and optimal route).
So the question is, why brouter needs lees time then Osmand using hc=1.8 with the same priority. Why can calculate brouter in a area with one of the highest Data density of osm a route over 60 km airdistance on a four year old defy, and Osmand collaps with hc=1.
Brouter uses Java. Osmand Java or C++(because C++ is quicker)
Conclusion, the implementaion of a*-algorithmen could be better.
Brouter uses some nice tricks (algorithm and code).
Die Veränderungen sind nicht zufällig, sondern haben eine starke Tendenz, und das ist im Ergebnis für bestimmte Nutzer, dass man sie in mehr gefährliche Situationen bringt als gewünscht.
Ich habe den EIndruck, dass Du diese Aussage einfach nicht zur Kenntnis nimmst.
Nicht optimal kann mehr oder weniger blöd optimal sein. Und bei Osmand ist eher weniger optimal mehr blöd.
--
Die Veränderungen sind nicht zufällig, sondern haben eine starke Tendenz, und das ist im Ergebnis für bestimmte Nutzer, dass man sie in mehr gefährliche Situationen bringt als gewünscht.
Natürlich entscheidet der Algorithmus nicht zufällig.
Ich habe den EIndruck, dass Du diese Aussage einfach nicht zur Kenntnis nimmst.
Ich habe diese nicht nur zur Kenntnis genommen, sondern sogar versucht das zu erklären.Nicht optimal kann mehr oder weniger blöd optimal sein. Und bei Osmand ist eher weniger optimal mehr blöd.
Ich versuche es nochmal:
Es ist logisch nicht möglich mit dem hc oder maxDefaultSpeed zu bestimmen, welche nicht optimale Route der Router berechnet.
Das der Router dich oft auf gefährliche Straßen navigiert, wenn du ihm sagst er soll eine nicht optimale Route berechnen (hc > 1), liegt einfach daran, wie das Straßennetz aufgebaut ist
....
Du kannst dem Router jetzt nicht vorwerfen, dass er die Wegsegmente welche er (wegen des hc) nicht besucht hat, logischerweise gar nicht berücksichtigen kann.
Interessant finde ich zum Beispiel, dass ich die Kartendateien von Brouter nicht mit einem Texteditor lesen kann, die von Osmand schon. Das Tempooproblem liegt vielleicht darin, dass das Einlesen der Daten aufgrund ihrer Aufbereitung ziemlich lang dauert.
Thanks everyone for the explanations, that wasn't really the point of the thread but I think I learnt a couple things :)I was more interested in the code part and differences between Java and Native code. Like the processIntersection function which is called thousands and thousands of times:Java:C++:There seem to be some slight differences between code algorithms, like the way that one uses an Iterator in Java and a pointer in C++. Would this kind of differences between codes make the difference between Java and Native or is the algorithm implemented in a different way? Because it looks like Native is a straight port from Java code with no algorithm changes and yet, it gives different results when executed (native is faster).Fabien