TradeDangerous: Trade Run Optimizer for Elite Dangerous Home Blog About
TD: TradeDangerous

Source | Thread | Issues


TradeDangerous started during the Elite Dangerous (ED) beta as a practical challenge to help teach myself the Python programming language. The initial premise: Given a database of trading locations within the virtual ED galaxy and lists of prices at those stations, calculate where to take what my current location has to offer.

None of that data was available and, as an experienced developer with a background in gaming, I could see that Elite Dangerous wasn't a simple there-and-back trade game.

Players would need to collect the various pieces of data themselves, although this fit in well with my past playing experience of games in the Elite franchise, and I prototyped this with an Excel spreadsheet. But I was lead to use a text-based data format that would lend itself well to easy user input and exchange of data until eventually, ED made it possible to scrape the data from the game.

Meanwhile I wanted more out of the core engine. I knew that the best trade A->B resulted in an often wasted return trip with trivial, if any, profit B->A. I wanted my engine to consider multiple hops, such that A to B, B to C and C to, perhaps A or beyond, would all be profitable.

Because of travel gameplay in ED, that would mean something like an A* algorithm. I wanted to squeeze every last possible credit of profit, which meant performing a sort of Knapsack. As if that wasn't enough, I wanted it to factor in the profit you made as you went, and ultimately have it lets you specify all kinds of query parameters such as distance restrictions, jump restrictions, data age limits, broad or even unlimited start/end, etc, etc.

A small community grew around the Trade Run Optimizers (TRO) in Elite Dangerous and I participated in establishing several community standards for data exchange. Along came 'maddavo' with his data gathering hub, EDDN, EDSC, etc, all of which massively facilitated the gathering and distribution of information between players.

Ultimately between losing time/interest to play ED and realizing I'd run up against limitations of Python without hiking up the complexity for non-programmer players, my participation in development tapered off, and work continues in several forks.