Choosing the Mode of Transport
Contents
Problem description
A company in the south-west of France needs to transport 180 tonnes of chemical products stored in depots D1 to D4 to the three recycling centers C1, C2, and C3. The depots D1 to D4 contain respectively 50, 40, 35, and 65 tonnes, that is 190 tonnes in total. Two modes of transport are available: road and rail. Depot D1 only delivers to centers C1 and C2 and that by road at a cost of $ 12k/t and $ 11k/t. Depot D2 only delivers to C2, by rail or road at $ 12k/t and $ 14k/t respectively. Depot D3 delivers to center C2 by road ($ 9k/t) and to C3 by rail or road for $ 4k/t and $ 5k/t respectively. The depot D4 delivers to center C2 by rail or road at a cost of $ 11k/t and $ 14k/t, and to C3 by rail or road at $ 10k/t and $ 14k/t respectively.
Its contract with the railway company for the transport of chemical products requires the company to transport at least 10 tonnes and at most 50 tonnes for any single delivery. Besides the standard security regulations, there are no specific limitations that apply to road transport. How should the company transport the 180 tonnes of chemicals to minimize the total cost of transport?
Graph of connections.
------ 7 (road) \ +-- 2 (D1) / \ / \ / 12 (C1) / \ / / / --+-- 6 (rail) / \ | +- 3 (D2) | / \ | / --+----/ \ | / | \ | / | \ +----+---- 8 (rail) \ \ 1 / \ \ \ / \ 13 (C2) ----- 15 | \ / \ / | \ \ 9 (road) / / | +-- 5 ------------ / | (D4) \ ------ / | \ / / \ +--+----- 10 (rail) \ / \ / / \ / \ ----+ / 14 (C3) +--- 4 ---------+ / (D3) \ 11 (road) / +-----------
Variables
arcs_out/in For an arc i arcs_out(i) is its starting node and arcs_in(i) ts target node arcs_min Minimal load for an arc arcs_max Maximal load for an arc arcs_cost Cost for an arc minflow Flow from 1 to 15
Reference
Applications of optimization... Gueret, Prins, Seveaux
% Marcus Edvall, Tomlab Optimization Inc, E-mail: tomlab@tomopt.com % Copyright (c) 2005-2009 by Tomlab Optimization Inc., $Release: 7.1.0$ % Written Oct 7, 2005. Last modified Mar 8, 2009.
Problem setup
arcs_out = [ 1 1 1 1 2 2 3 3 4 4 4 5 5 5 5 ... 6 7 8 9 10 11 12 13 14 ]'; arcs_in = [ 2 3 4 5 7 9 6 7 9 10 11 8 9 10 11 ... 12 12 13 13 14 14 15 15 15 ]'; arcs_min = [zeros(1,6) 10 0 0 10 0 10 0 10 0 ... zeros(1,9)]'; arcs_max = [50 30 35 65 inf inf 50 inf inf 50 inf 50 inf 50 inf ... inf*ones(1,9)]'; arcs_cost = [0 0 0 0 12 11 12 14 9 4 5 11 14 10 14 ... zeros(1,9) ]'; minflow = 50+30+35+65; n = length(arcs_out); % arcs n1 = length(unique([arcs_in ; arcs_out])); arcs = tom('arcs',n,1,'int'); % Bounds bnds = {arcs_min <= arcs <= arcs_max}; % Node constraint, except for source and sink con1 = cell(n1-2,1); for i=2:n1-1 idx_in = find(arcs_in == i); idx_out = find(arcs_out == i); con1{i-1} = {sum(arcs(idx_in)) == sum(arcs(idx_out))}; end % Source constraint con2 = {sum(arcs(arcs_out == 1)) == minflow}; % Objective objective = arcs_cost'*arcs; constraints = {bnds, con1, con2}; options = struct; options.solver = 'cplex'; options.name = 'Choosing the Mode of Transport'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev > 0 arcs = sol.arcs; disp('transport as follows:') for i = 1:length(arcs), if arcs(i) ~= 0, disp([' ' num2str(arcs(i)) ' units from node ' ... num2str(arcs_out(i)) ' to node ' num2str(arcs_in(i))]) end end end % MODIFICATION LOG % % 051019 med Created % 060112 per Added documentation % 060125 per Moved disp to end % 090308 med Converted to tomSym
Problem type appears to be: mip ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05 ===================================================================================== Problem: --- 1: Choosing the Mode of Transport f_k 1715.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=101. CPLEX Branch-and-Cut MIP solver Optimal integer solution found FuncEv 1 transport as follows: 50 units from node 1 to node 2 30 units from node 1 to node 3 35 units from node 1 to node 4 65 units from node 1 to node 5 50 units from node 2 to node 9 30 units from node 3 to node 6 35 units from node 4 to node 10 15 units from node 5 to node 8 50 units from node 5 to node 10 30 units from node 6 to node 12 15 units from node 8 to node 13 50 units from node 9 to node 13 85 units from node 10 to node 14 30 units from node 12 to node 15 65 units from node 13 to node 15 85 units from node 14 to node 15