I Introduction
The transportation problem is one of the wellknown and hot topics both in mathematics and economics. It was first conceptualized by the French mathematician Gaspard Monge back in 1781 [1]
. Later in 1942, during the World War II, the Soviet mathematician and economist Leonid Kantorovich augmented and refreshed the mathematical definition of the problem from the linear programming point of view
[2]. Since then, many attempted to solve this problem using linear programming or graphbased algorithms. In this paper, a graphbased interpretation of the problem is used for reasons of better visualization of potential solutions (i.e. shipping paths) and the graph form being a comfortable environment to design the searching and routing algorithm. This paper strives to deal with this problem using graph theory approach and a particular decisionmaking algorithm in an attempt to acquire an acceptable solution, if it exists, or give partial solution otherwise.From our point of view, the transportation problem can be represented by a graph with nodes of 3 types: store, warehouse and a joint. The edges between nodes represent roads to traverse with associated distance and time. The stores and warehouses have a certain associated amount of demand and supply of goods respectively. Joints act solely as transfer points (major cities, towns, etc.). For simplicity, all goods are assumed to be of the single type. The problem is finding the way to provide the stores with goods available in the warehouses, maximizing the amount of delivered goods, while minimizing the transportation costs. It is assumed that the shipping is being done by a single agent, a truck with a certain maximum carry capacity, that is traversing a certain path while loading and unloading goods where needed.
In this paper , we provide an algorithm that takes a pregenerated transportation problem graph with the described characteristics and returns the following key elements of the proposed solution:

Truck path with shipping and restocking segments

Algorithm log with the following details:

shipping and restocking segments explained

routing decisions made for next segment (if applicable)

decision cost (heuristic value)

Remaining total amount of demand or supply at the termination of algorithm


Total runtime of the algorithm
In the following sections we describe the testing environment for such algorithm, the mode of operation of such algorithm and the experimental results.
Ii Testing environment  graph generator
First of all, in order to provide a capability of reproducing the experimental results of using the suggested algorithm, it is important to have a testing environment that can produce a set of various transportation problem instances (graphs) of a varying scale to serve as an input to the solving algorithm. The suggested testing environment attempts to pseudorandomly generate a transportation problem graph instance on each run. This allows to create a wide variety of sample cases that are applicable to the reallife instances of goods transportation problem.
The graph generator requires the following parameters to operate with:

Total number of nodes to generate

Maximum number of edges to spawn per node

Total number of stores to generate

Total number of warehouses to generate

Types of goods to generate (in scope of this paper, this defaults to 1)

Total supply and total demand per each good type
Given these parameters, the graph generator proceeds to create a requested number of nodes. Each node is created as a joint by default. Then, the algorithm pseudorandomly decides which nodes are converted into stores and warehouses. To keep the graph realistic, each node receives pseudorandomly assigned coordinates of X,Y, where X,Y [0, MAX_MAP_SIZE], where MAX_MAP_SIZE corresponds to the scale of the square space where the transportation problem is defined, it defaults to 1000. Originally, it is assumed that the units of map scale are expressed in kilometers.
The generator then distributes goods to be supplied one by one between each warehouse until all supplies are allocated. Similarly, each store keeps incrementing the amount of demanded goods one by one until the demand is equally distributed among all stores. Equal distribution of supply and demand among stores and warehouses is assumed to avoid degenerate cases to happen (i.e. most goods are concentrated in a warehouse too close to the stores, one store demands much more goods than the others, etc.).
After the node generation is done, the algorithm spreads the required amount of edges. Each time an edge is to be created, there is a 50% chance for that to happen. To avoid disconnected graphs, the algorithm forces at least one edge to be spread. The destination node is picked pseudorandomly among the rest of the generated nodes. When the edge is created, the X,Y coordinates of the source and destination are used to obtain the distance between nodes. Then, an average assumed velocity is picked pseudorandomly within the range of [40,100]. These bounds are assuming that the velocity is expressed in kilometers per hour, where lower bound corresponds to speed limits of bigger cities and upper bound resembles the highways. Based on the average assumed velocity of the edge, the time is then calculated as
with floating point of it truncated. The time and distance are the two key parameters that affect the later decisionmaking, so they are kept in the graph as the background information.
When edges between nodes are created, the graph generator produces a simple text file, that has the problemrelated information associated with nodes and edges. Notably, the syntax for such text file is specifically designed to follow the syntax of GraphViz, the graph visualization tool that can produce and display the graph, based on the plain text graph description with all embedded information as a picture [3]. A particular example of such visualization can be seen on Fig. 1.
Evidently, the graph generator provides a fairly connected graph that represents a particular instance of a transportation problem. Each node shows a tuple of {id,type}. Node 0 is the first generated node and the total number of transportation nodes in this particular example is 12. To generate this example, the graph generator is initialized with 2 edges to spread from each node, 2 warehouses and 4 stores to be placed. The total goods demand is set to 90 and the total supply of goods is set to 100, which is spread equally across stores and warehouses respectively. Note, that in order to reduce the visible complexity of the picture, the visual part does not contain all the problem parameters, such as supply or demand, straight on it. Nevertheless, all crucial problem parameters are still stored in the source file structure, as can be seen on Listing 1.
This testing environment combines the commodity of reproducable results, configurable problem scaling and the power of visualization through external tools. In the following sections, we refer to Fig. 1 as a particular case of using this testing environment.
Iii The Routing Algorithm
Given an instance of the goods transportation graph, the routing algorithm requires the following parameters to attempt at solving the problem:

Truck initial position (defaults to node 0, which is the first generated node)

Truck initial load of supplies (defaults to 0, we assume here that the truck always starts empty)

Truck maximum carry capacity (MAX_CAPACITY as referred below)

Resupply threshold T (level of current supply below which a truck restocks at a warehouse, not proceeding to stores)
With these parameters set, the truck attempts to follow the least expensive path, which is recorded as a solution. The heuristic cost that is used in determination of the least expensive edge to traverse is defined as follows:
Accordingly, at the beginning of each segment of the traversed path the truck driver decisionmaking works as follows:

If the position of the truck is at a warehouse node with a capacity < T MAX_CAPACITY : it goes to the nearest warehouse which is the current node and restocks right there.

If the position of the truck is at a joint node with a capacity < T MAX_CAPACITY: it goes to the nearest warehouse to restock with goods.

If the position of the truck is at a store node with a capacity < T MAX_CAPACITY: it goes to the nearest warehouse to restock with goods.

If the position of the truck is at a warehouse node with a capacity >= T MAX_CAPACITY: it goes to the nearest store to drop goods.

If the position of the truck is at a joint node with a capacity >= T MAX_CAPACITY: it goes to the nearest store to drop goods.

If the position of the truck is at a store node with a capacity >= T MAX_CAPACITY: it goes and drops goods at the current node.
Note that for the sake of simplicity, we assume T = 0.5 for the particular instance of the graph shown in Fig. 1.
The algorithm treats each node according to their type with 2 parameters: supply and demand. For warehouse nodes, the demand is always 0; for stores, the supply is always 0; for joints, both supply and demand are 0.
The truck keeps going back and forth between the stores and the warehouses until either all warehouses deplete their supply (which indicates an overconstrained problem with only a partial solution available) or there remains no store still waiting for goods (which indicates a successful termination of the algorithm with all goods shipped to the stores).
Thus, if the graph shown in Listing 1 is given for this algorithm with truck maximum capacity set to 20, the result shown on Listing 2 in Appendix A is produced and saved as an output plain text file.
As seen from Listing 2, the algorithm provides a detailed breakdown of the logic of its operation. The design of the algorithm includes a selfexplanatory solver, this algorithm gives its user complete information of the state of the program at each decisionmaking stage. At the end of the exhaustive report, the algorithm provides the path traversed by the truck as well as the final state of the operation. In this particular instance, since the total demand is 90 and is less than total supply of 100, the solution is complete and as seen in the resulting file, the total demand and supply are both zero with 10 units of cargo remaining in the truck.
Fig. 2 demonstrates the solution path that the described algorithm suggests for a given instance of the problem acquired through the testing environment that produced the base graph with transportation problem parameters.
Iv Conclusion
After observing the fundamenal operation principles of the proposed algorithm, it is important to note that such algorithm is capable of functioning with a wide spectrum of transportation problem instances. Under experimental conditions, the given algorithm launched on the demonstrated graph with variable truck capacity produces economically useful and mathematically reasonable results. As seen from Table I, with increasing the truck capacity, the number of produced path segments and the cost of the overall path decreases.
Truck Capacity  Number of path segments  Overall path cost 

10  22 segments  68360.5 
15  16 segments  48142.7 
20  14 segments  42781.1 
22  13 segments  40764.5 
23  9 segments  26577.2 
However, it is notable that the change is not quite proportional. As seen on Fig. 3 and Fig. 4 below, changing the truck capacity produces a slopelike response in the cost reduction and in the number of path segments produced.
Given such statistics, it is possible to estimate how much each added unit of capacity corresponds to the decrease in the overall solution cost for this particular instance of the problem. This directly translates into the economic reality of any business involving transportation of some items between certain locations on the map. Such algorithm is thus capable to provide not only a solution to the given problem with set parameters, but also an ability to estimate the potential alternatives to a given solution with different parameters.
What if one had to pick a bigger truck? How could extra expenses on deploying another truck be covered by saving on the number of trips between the map locations? What is the most efficient size of the truck, that can solve a given transportation problem on a given map? All these questions can eventually be answered by running the routing algorithm provided here several times with tweaked parameters. Basically, by solving the given problem with different parameters and combining the resulting data together, this algorithm can be used as a cost estimation tool.
There are, however, major improvements potentially available to this algorithm. For example, the cost estimation function could involve more reallife factors affecting any transportation, such as: truck fuel consumption, desirability of paths (major city roads might not allow truck traffic coming through at certain times), required stops (drivers taking breaks and changing shifts) and more. Another improvement to deploy could be allowing multiple types of cargo, which considerably increases the complexity of decisionmaking and solving the transportation problem.
In the described algorithm, the decisionmaking heuristic of combined time and distance is only applied to selecting next place to go, so the overall cost is minimized per each segment of the solution path. However, sometimes the transportation problem can involve prioritizing time over cost, cost over time or other decision factor. Thus, wisely balancing the decisionmaking in the described routing algorithm along with dealing with various shipment types becomes the major design difficulty to overcome.
Appendix A Output listing
References
 [1] G. Monge. Mémoire sur la théorie des déblais et des remblais. Histoire de l’Académie Royale des Sciences de Paris, avec les Mémoires de Mathématique et de Physique pour la même année. , pages 666–704, 1781.
 [2] L. Kantorovich. On the translocation of masses. C.R. (Doklady) Acad. Sci. URSS (N.S.), 37:199–201, 1942.
 [3] Graphviz.org. Graphviz  Graph Visualization Software. 2019. [online] Available at: http://www.graphviz.org/ [Accessed 24 Mar. 2019].
Comments
There are no comments yet.