Cane Sugar Production
Contents
Problem description
The harvest of cane sugar in Australia is highly mechanized. The sugar cane is immediately transported to a sugar house in wagons that run on a network of small rail tracks. The sugar content of a wagon load depends on the field it has been harvested from and on the maturity of the sugar cane. Once harvested, the sugar content decreases rapidly through fermentation and the wagon load will entirely lose its value after a certain time. At this moment, eleven wagons all loaded with the same quantity have arrived at the sugar house. They have been examined to find out the hourly loss and the remaining life span (in hours) of every wagon, these data are summarized in the following table.
Table: Properties of the lots of cane sugar
Lot 1 2 3 4 5 6 7 8 9 10 11 Loss (kg/h) 43 26 37 28 13 54 62 49 19 28 30 Life span (h) 8 8 2 8 4 8 8 8 8 8 8
Every lot may be processed by any of the three, fully equivalent production lines of the sugar house. The processing of a lot takes two hours. It must be finished at the latest at the end of the life span of the wagon load. The manager of the sugar house wishes to determine a production schedule for the currently available lots that minimizes the total loss of sugar.
Variables
proclines the number of processing lines proctime time in hours to process a wagon loss loss of sugar in kg per hour lifespan how long the sugar in a wagon will last
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
proclines = 3; proctime = 2; loss = [43;26;37;28;13;54;62;49;19;28;30]; lifespan = [8;8;2;8;4;8;8;8;8;8;8]; n1 = length(loss); n2 = ceil(n1/proclines); proc = tom('proc',n1,n2,'int'); % All slots are integers intcons = {0 <= proc <= 1}; % Production constraint, all lots processed prodcons1 = {sum(proc,2) == 1}; % Production constraint, No more than proclines concurrently running prodcons2 = {sum(proc,1) <= proclines}; % Maximum slot number for a lot slotcons = {sum(proc.*repmat(1:n2,n1,1),2) <= lifespan/proctime}; % Objective objective = sum(sum(repmat(1:n2,n1,1).*repmat(loss,1,n2).*proctime.*proc)); constraints = {intcons, prodcons1, prodcons2, slotcons}; options = struct; options.solver = 'cplex'; options.name = 'Cane Sugar Production'; sol = ezsolve(objective,constraints,[],options); f_k = subs(objective,sol); PriLev = 1; if PriLev > 0 lots = length(lifespan); timeslots = ceil(lots/proclines(1)); % even a fraction means work temp = sol.proc; disp(['To minimize loss (' num2str(f_k) ') use this schema']) for time = 1:timeslots, disp(['at ' num2str((time-1)*proctime(1)+8) '.00:']) idx = find(temp(:,time)); disp([' process the lots ' num2str(idx') ]) end disp(['at ' num2str((time)*proctime(1)+8) '.00:']) disp( ' harvesting completed') end % MODIFICATION LOG % % 051007 med Created % 051208 med Lifespan factor wrong % 060109 per lifespan(9) changed to 8 % 060109 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: Cane Sugar Production f_k 1602.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=101. CPLEX Branch-and-Cut MIP solver Optimal integer solution found FuncEv 19 CPU time: 0.015625 sec. Elapsed time: 0.015000 sec. To minimize loss (1602) use this schema at 8.00: process the lots 3 6 7 at 10.00: process the lots 1 5 8 at 12.00: process the lots 4 10 11 at 14.00: process the lots 2 9 at 16.00: harvesting completed