makhidkarun / traveller_pyroute

Traveller trade route generator
MIT License
14 stars 5 forks source link

How come trade/trade-mp generation discards routes endpoints that are more than 299 pc apart? #104

Open CyberiaResurrection opened 5 months ago

CyberiaResurrection commented 5 months ago

Per TradeCalculation.base_range_routes ( https://github.com/makhidkarun/traveller_pyroute/blob/73ac2ecacb37d216a09f9d130c2b7fd7e3dbbc75/PyRoute/Calculation/TradeCalculation.py#L97 and specifically https://github.com/makhidkarun/traveller_pyroute/blob/73ac2ecacb37d216a09f9d130c2b7fd7e3dbbc75/PyRoute/Calculation/TradeCalculation.py#L99) , max_dist works out capped to 299 parsecs, regardless of the input WTNs. If the route endpoints are further than that away, the route is discarded.

By contrast, GT:FT p15 (with the column headings amusingly transposed, by the looks) provides for routes up to at least 999 pc, if not kiloparsec and beyond.

Taking a quick shufti at Yaskoyloyt (Datsatl 1602 by the Travmap data as at 23 Dec 2023), its starline is: 1602 Yaskoyloyt A765C86-D Cx Ga Hi Yask5 Piri2 {+4 } (DBG+5) [EG5F] - KV - 110 9 Yt F2 V ie, roughly one trillion yammerheads at TTLD with an A-class port. WTN works out to: 12 (pop code) +2 (TTL >=5 and TTL >= 9 but not TTL >= 15) 14 (raw WTN subtotal) 13 (after correction for A-class port)

For the other end of things, let's use Muan Gwi (Solomani Rim 1717 by same TravMap data): 1717 Muan Gwi A556A86-E Hi Cp (Vegans) { 4 } (G9C+2) [9E4D] BEF NW - 722 17 ImVd F2 V ie, roughly 10 billion yammerheads at TTLE with A-class port. WTN works out to: 10 (pop code) +2 (TTL >=5 and TTL >= 9 but not TTL >= 15) 12 (raw WTN subtotal) 12 (after correction for A-class port)

Star's distance method says those two worlds are 415 pc apart. TravMap reports the two worlds are 416 pc apart at J-4.

The two systems' undoubled WTNs are 6.5 and 6.0, respectively. BTN takes a -0.5 hit for differing political allegiance, and a -5.0 hit for distance, so BTN works out to 6.5 + 6.0 - 0.5 - 5.0 = 13.5 - 5.5 = 8.0 - the bare minimum needed to sustain a trade route per GT:FT rules in 1120 Imperial.

Uplifting Yaskoyloyt to TTL15 (handwaving their tubthump from the Empress Wave's arrival) bumps their WTN up to 14 (undoubled WTN to 7.0) means the route to Muan Gwi can endure a distance hit of -5.5, or up to 999 pc away.

Given the code caps system WTN to 15 (doubled), let's explore that a little: Consider two WTN15 systems (undoubled WTN of 7.5). Assuming differing allegiances, and using the p15 table separations as given gives a BTN of: 7.5 + 7.5 - 0.5 - 6.0 = 8.5 for any separation of a kiloparsec or more.

@tjoneslo , how come it's like that? Was good enough for your needs when you initially spun up PyRoute in 2014? For completeness sake, how do you want to handle kiloparsec+ routes?

bobbyjim commented 5 months ago

Probably that exceptions make crummy rules.

On Fri, Mar 29, 2024 at 2:40 AM Alex Goodwin @.***> wrote:

Per TradeCalculation.base_range_routes ( https://github.com/makhidkarun/traveller_pyroute/blob/73ac2ecacb37d216a09f9d130c2b7fd7e3dbbc75/PyRoute/Calculation/TradeCalculation.py#L97 and specifically https://github.com/makhidkarun/traveller_pyroute/blob/73ac2ecacb37d216a09f9d130c2b7fd7e3dbbc75/PyRoute/Calculation/TradeCalculation.py#L99) , max_dist works out capped to 299 parsecs, regardless of the input WTNs. If the route endpoints are further than that away, the route is discarded.

By contrast, GT:FT p15 (with the column headings amusingly transposed, by the looks) provides for routes up to at least 999 pc, if not kiloparsec and beyond.

Taking a quick shufti at Yaskoyloyt (Datsatl 1602 by the Travmap data as at 23 Dec 2023), its starline is: 1602 Yaskoyloyt A765C86-D Cx Ga Hi Yask5 Piri2 {+4 } (DBG+5) [EG5F] - KV - 110 9 Yt F2 V ie, roughly one trillion yammerheads at TTLD with an A-class port. WTN works out to: 12 (pop code) +2 (TTL >=5 and TTL >= 9 but not TTL >= 15) 14 (raw WTN subtotal) 13 (after correction for A-class port)

For the other end of things, let's use Muan Gwi (Solomani Rim 1717 by same TravMap data): 1717 Muan Gwi A556A86-E Hi Cp (Vegans) { 4 } (G9C+2) [9E4D] BEF NW - 722 17 ImVd F2 V ie, roughly 10 billion yammerheads at TTLE with A-class port. WTN works out to: 10 (pop code) +2 (TTL >=5 and TTL >= 9 but not TTL >= 15) 12 (raw WTN subtotal) 12 (after correction for A-class port)

Star's distance method says those two worlds are (funnily enough) 444 pc apart. TravMap reports the two worlds are 447 pc apart at J-4.

The two systems' undoubled WTNs are 6.5 and 6.0, respectively. BTN takes a -0.5 hit for differing political allegiance, and a -5.0 hit for distance, so BTN works out to 6.5 + 6.0 - 0.5 - 5.0 = 13.5 - 5.5 = 8.0 - the bare minimum needed to sustain a trade route per GT:FT rules in 1120 Imperial.

Uplifting Yaskoyloyt to TTL15 (handwaving their tubthump from the Empress Wave's arrival) bumps their WTN up to 14 (undoubled WTN to 7.0) means the route to Home can endure a distance hit of -5.5, or up to 999 pc away.

Given the code caps system WTN to 15 (doubled), let's explore that a little: Consider two WTN15 systems (undoubled WTN of 7.5). Assuming differing allegiances, and using the p15 table separations as given gives a BTN of: 7.5 + 7.5 - 0.5 - 6.0 = 8.5 for any separation of a kiloparsec or more.

@tjoneslo https://github.com/tjoneslo , how come it's like that? Was good enough for your needs when you initially spun up PyRoute in 2014? For completeness sake, how do you want to handle kiloparsec+ routes?

— Reply to this email directly, view it on GitHub https://github.com/makhidkarun/traveller_pyroute/issues/104, or unsubscribe https://github.com/notifications/unsubscribe-auth/AB7KVBSTAS32EGKNAQLGUI3Y2ULINAVCNFSM6AAAAABFOCBQZWVHI2DSMVQWIX3LMV43ASLTON2WKOZSGIYTIOBUGU4TANA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

tjoneslo commented 5 months ago

Keep in mind the original nroute code was using a much smaller set of sectors. If you take the far corner distance from Spinward Marches to Solomani Rim (direct line) is ~256 parsecs, regardless of the worlds there. So there wasn't any reason to use any larger range. When the code was ported to Python, we were still using the small set of sectors. But the list has expanded over they years since then.

Given the size of charted space, we may want to expand the btn_range by adding a 599 to the list. That should cover everything.

Keep in mind the system doesn't track the smaller routes. So once the routes go below 8, PyRoute doesn't track that, so I don't think it needs to go further.

CyberiaResurrection commented 5 months ago

Probably that exceptions make crummy rules.

@bobbyjim : The examples I quoted aren't special cases - yes, picked to push the envelope and elicit maintainer preferences, but they're not exceptional.

@tjoneslo : So for the moment, punt on kiloparsec routes (such as in the Zhodani Core Routes)?

tjoneslo commented 5 months ago

Keep in mind there are complaints those routes are already too long. If you add up the shipping costs (and Far Trader makes notes about this), your shipping costs are already an order of magnitude or two more than the cost of the goods.

CyberiaResurrection commented 5 months ago

GT:FT p16 would seem to say otherwise - the table at the bottom of the page gives the volume corrections with distance, giving the net effect of dton volume falling off roughly with the cube of distance. Up the new top end of 599 pc, the dton volume of trade (but not the credit value) gets shrunk by roughly 30x. Is actual cargo volume worth tracking over each link?