Barge Loading
Contents
Problem description
A shipper on the river Rhine owns a barge of carrying capacity 1500 m3. Over time he has specialized in the transport of wheat. He has seven regular customers who load and unload practically at the same places. The shipper knows his costs of transport from long experience and according to his personal preferences has concluded agreements with his clients for the price charged to them for the transport of their wheat. The following table summarizes the information about the seven clients. Every client wishes to transport a certain number of lots, deciding himself the size of his lots in m3. The table lists the price charged by the shipper for every transported lot. The last column of the table contains the cost incurred by the shipper per transported m3. This cost differs depending on the distance covered.
Lots to transport
+------+------------------+--------+----------+--------------+ | |Available quantity|Lot size|Price per | Transport | |Client| (no. of lots) |(in m3) |lot (in $)|cost (in $/m3)| +------+------------------+--------+----------+--------------+ | 1 | 12 | 10 | 1000 | 80 | | 2 | 31 | 8 | 600 | 70 | | 3 | 20 | 6 | 600 | 85 | | 4 | 25 | 9 | 800 | 80 | | 5 | 50 | 15 | 1200 | 73 | | 6 | 40 | 10 | 800 | 70 | | 7 | 60 | 12 | 1100 | 80 | +------+------------------+--------+----------+--------------+
The objective of the shipper is to maximize his profit from transporting the wheat with lots that may be divided.
Question 1: As a first step, assuming that every client has an unlimited quantity of wheat, which clients wheat should be transported?
Question 2: If in addition the actual availability of wheat lots from the customers is taken into account, which strategy should the shipper adopt?
Question 3: What happens if the lots cannot be divided?
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.2.0$ % Written Oct 7, 2005. Last modified Apr 8, 2009.
Problem setup
capacity = 1500; units = [12;31;20;25;50;40;60]; sizes = [10;8;6;9;15;10;12]; unitprice = [10;6;6;8;12;8;11]*100; cost = [80;70;85;80;73;70;80]; n = length(units); load = tom('load',n,1,'int'); % Integer variables bnds = {0 <= load <= units}; % Load constraint, cannot exceed capacity con1 = {sum(sizes.*load) <= capacity}; % Objective objective = -(unitprice - cost.*sizes)'*load; constraints = {bnds, con1}; options = struct; options.solver = 'cplex'; options.name = 'Barge Loading'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev > 0 disp('Best buy') for i = 1:length(units), if sol.load(i) > 0, disp([' ' num2str(sol.load(i)) ' unit(s) from ' num2str(i)]) end end end % MODIFICATION LOG % % 051007 med Created. % 060111 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: Barge Loading f_k -17805.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=101. CPLEX Branch-and-Cut MIP solver Optimal integer solution found FuncEv 1 Best buy 12 unit(s) from 1 20 unit(s) from 3 15 unit(s) from 4 1 unit(s) from 5 39 unit(s) from 6 60 unit(s) from 7