I'm currently solving an optimisation problem of my own design, just to experiment and learn a little something. Here's the concept:I have a user that starts at home. The objective of this user is to pick up a few items from a store and take these items to a final consumer. Just for some extra difficulty, depending on the type of item the user has to stop on another store before going to the final consumer. What I'm interested in is calculate the optimal decision plan for this user, based on minimising the delivery time.In a first phase I'm assuming that the number of items to deliver is fixed (let's say that the store only produces 5items in a day and the user always takes less than a day for all the deliveries) and I also know all the time variables (time taken from home to initial store, initial store to final customer, etc etc).Why am I looking for help:With all this information I'm perfectly able to create a tree where the nodes are the places the user must visit and the connections are the time taken to travel between those locations. With that I could go through each and every branch adding the costs and keeping the minimal value. My problem is that this would solve only this specific use case and would be hard to generalise, especially if the item quantity changes from fixed to a continuously fed input. Questions:Am I right in the tree approach? If not, could you propose a new one and reasons?I've searched Google for a few days and I obviously don't want to reinvent the wheel. I read about graph theory and decision tree algorithms but nothing I found relates with my scenario. Am I researching completely wrong keywords here or am I not going in a correct path?I thought that am implementation of ID3 or C4.5 would be good bets, but after a more in depth understanding of those algorithms it seems they are not. I absolutely see the use of a tree generator algorithm like ID3 but what would be my training dataset for this use case for example? How would I go about creating my training dataset to generate the tree and what would be my test dataset? All algorithms I read about on decision tree implementation focus primarily on creating the tree and pruning it. But none of them seems to actually iterate the tree and solve it the way I want. Are there any already developed algorithms for this functionality or is the 'brute force' iterator I proposed sooner the best solution for problems similar to this? 
Decision making algorithm
optimization;graph;trees;machine learning