Apologies in advance for dusting off this old topic.
A
memory leak in the C++ siteupdate program (which I hope to eventually bring
to production) begs for changes to the concurrency detection routine. As a consequence, a self-concurrent route will always be counted as concurrent, whether or not another route is in the mix. As it should be, IMO.
Right now:[UT UT190 UT190_A UT190_B] is not marked as concurent with
[UT UT190 UT190_C UT190_D]. I'm coming to regard this as more of a bug than a feature.
OTOH,
[PA I-376 68A 69B] (and US19/22/30) is concurrent with both
[PA US19TrkPit I-376(69B)_S I-376(69A)] and
[PA US19TrkPit I-376(69A) I-376(69B)_N].
Therefore,
[PA US19TrkPit I-376(69B)_S I-376(69A)] and
[PA US19TrkPit I-376(69A) I-376(69B)_N] must necessarily be concurrent with one another.
The fact that whether a self-concurrency is flagged depends on whether another route is
also concurrent is an inconsistency that makes no sense. Arbitrary. Counterintuitive.
To revisit the topic of how a self-concurrency affects overall stats & user stats...
I'm not sure how concurrent routes are really handled today. My thoughts:
Let's assume that the 6 routes are in 3 systems. Route A1, A2, B1, B2, C1 and C2.
In user system stats, the segment should be count once for system A, once for system B and once for system C.
In user region stats, the segment should be count once. Total mileage is (or should be) the sum of all regions, not systems.
Let's say, the segment is 2mi, it would be as follows:
A1: 2mi traveled (plus the rest which is indicated in the list file entry)
A2: 2mi traveled
B1: 2mi traveled
B2: 2mi traveled
C1: 2mi traveled
C2: 2mi traveled
System A: 2mi traveled (plus the rest which is indicated in the list file entry)
System B: 2mi traveled
System C: 2mi traveled
Region: 2mi traveled (plus the rest which is indicated in the list file entry)
This is how things are handled now, if we ignore for a moment the possibility of a self-concurrent route.
(How a self-concurrent route is handled for stats overall or in a region, I'm unsure of. Haven't gotten that deep into the code yet.)
Whether a self-concurrent segment could/should/would count for 2 miles or 4 miles, I guess I can leave that aside for now, assuming a traveler has the option of .listing 1 or both...
I've since gotten that deep into the code.
Here's how a self-concurrent route works out. (For simplicity, defining a self-concurrent route here as a case where the self-concurrency
actually gets flagged. Ignoring UT190 for the time being.)
• Route: 4 miles counted toward the self-concurrent route(s) itself/themselves, 2 miles for the others.
• System: All systems get 2 miles.
• Region: Gets 2 miles.
This is how things are handled now, if we ignore for a moment the possibility of a self-concurrent route.
If so, everything's fine to me
I guess my thinking is, if a 2mi segment is contained twice in a route, and it must be traveled twice to clinch the route, then it should count for 4mi toward the route's overall mileage. And thus, 4mi toward mileage in that region & system.
Sure. For that reason, we have the possiblity to break the concurrency by moving one point 0.000001mi off. I think this should be done here too!
UT190_C should just be moved off by 0.000001mi from UT190_B.
Yes, that could be done, to allow travelers to independently claim one or both segments as they wish.
(I'd also favor giving the unsigned segment to Guardsman Pass the axe, but that's another discussion...)
To clarify, I do not think this should be done for
PA US19TrkPit though...
• It would break not only the concurrency with itself, but also the concurrency between one of its segments & all the other concurrent routes. Undesirable.
• We truly do have a self-concurrency here:
Driving the south half of the NB loop (the 1st segment) is the same as driving the south half of the SB loop (the 2nd segment).
Driving the north half of the NB loop (the 2nd segment) is the same as driving the north half of the SB loop (the 1st segment).
Same side of the road & everything.
Back to this bit...
I guess my thinking is, if a 2mi segment is contained twice in a route, and it must be traveled twice to clinch the route, then it should count for 4mi toward the route's overall mileage. And thus, 4mi toward mileage in that region & system.
Sure.
I'm uncertain whether "Sure" means michih agrees with all the quoted text including the non-bold bits, or is just accepting my premise for the sake of argument & moving on.
Whether or not UT190 has a point moved & its concurrency intentionally broken, it should be pretty easy to count the full "4" miles for cases like
US19TrkPit where the routes must be flagged as concurrent, if that's what there's consensus to do.
This would be independent of the fix I have in mind for
DataProcessing#449 (which would be "no-build" WRT stats other than counting UT190 specifically as concurrent, and thus reducing mileage on that route/system/region by 0.33 mi), handled separately from concurrency detection, in the "computing stats" part of siteupdate. I can leave that idea out for now & allow time for discussion.