Material Requirement and Planning
Contents
Problem description
The company Minorette produces two types of large toy lorries for children: blue removal vans and red tank lorries. Each of these lorries is assembled from thirteen items. See below for the breakdown of components and the table below for the prices of the components.
Prices of components
+----------+--------------+--------+----------+---------+-----------+ | Wheel |Steel bar |Bumper | Chassis | Cabin |Door window| +----------+--------------+--------+----------+---------+-----------+ | $ 0.30 | $ 1 |$ 0.20 | $ 0.80 | $ 2.75 | $ 0.10 | +----------+--------------+--------+----------+---------+-----------+ |Windscreen|Blue container|Red tank|Blue motor|Red motor| Headlight | +----------+--------------+--------+----------+---------+-----------+ | $ 0.29 | $ 2.60 | $ 3 | $ 1.65 | $ 1.65 | $ 0.15 | +----------+--------------+--------+----------+---------+-----------+
Breakdown of components (Gozinto graph)
Blue lorry (or red) | | | +-----------+---------------+----------+-----------+ | | | | | 1| 1| 1| 1| 2| | | | | | Assembled Blue container Assembled Blue motor Headlight chassis (or red tank) cabin (or red) | | | | +-------+-----+ +------+-------+ | | | | | | 2| 2| 1| 1| 2| 1| | | | | | | Bumper Axle Chassis Cabin Door Windscreen | window | +--+---+ | | 2| 1| | | Wheel Steel bar
The subsets (axles, chassis, blue or red cabin) may be assembled by the company using the components, or subcontracted. The following table lists the costs for assembling and for subcontracting these subsets, together with the capacities of the company. The assembly costs do not take into account the buying prices of their components.
Subcontracting and assembly costs, assembly capacities
+--------------+------+------------+-----------+----------+---------+ | | Axle |Assem chass |Assem cabin|Blue lorry|Red lorry| +--------------+------+------------+-----------+----------+---------+ |Subcontracting|$12.75| $ 30 | $ 3 | - | - | |Assembly |$6.80 | $ 3.55 | $ 3.20 | $ 2.20 | $ 2.60| |Capacity | 600 | 4000 | 3000 | 4000 | 5000 | +--------------+------+------------+-----------+----------+---------+
For the next month, Minorette has the same demand forecast of 3000 pieces for the two types of lorries. At present, the company has no stock. Which quantities of the different items should Minorette buy or subcontract to satisfy the demand while minimizing the production cost?
Variables
demand The demand for tank and container lorries compprices The price of the components subcontr Cost for using a subcontracter to assemble assembly Price for own assembly finalassembly Price for final assembly capacity Capacity to assemble components finalcapacity Capacity to assemble final step assemmat 12 first columns: component prices next 3 columns: subcontracter price next 3 columns: own assembly price last 2 columns: final assembly
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
demand = [3000;3000]; compprices = [.3;1;.2;.8;2.75;.1;.29;2.6;3;1.65;1.65;.15]; subcontr = [12.75;30;3]; assembly = [6.8;3.55;3.20]; finalassembly = [2.2;2.6]; capacity = [600;4000;3000]; finalcapacity = [4000;5000]; %Buy preprod (12), Buy subcontr (3), assemble (3), finalass (2) assemmat = [ 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0 0;... 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0 0;... 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 -2 0 0 0;... 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 -2 0 0 0;... 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0 0;... 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 -1 0 0;... 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 -2 0 0;... 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0 0;... 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 -1 -1;... 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1 0;... 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 -1;... 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 -1 -1;... 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1 0;... 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 -1;... 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 -2 -2]; p = length(compprices); preprod = tom('preprod',p,1); subcont = tom('subcont',3,1); assemble = tom('assemble',3,1); finalass = tom('finalass',2,1); % Bounds bnds = {preprod >= 0, subcont >= 0, assemble >= 0, ... finalass >= 0}; bnds2 = {finalass >= demand, assemble <= capacity, ... finalass <= finalcapacity}; % For assembled products, some has to be 2 times the other con = {assemmat*[preprod;subcont;assemble;finalass] >= 0}; % Objective objective = compprices'*preprod + subcontr'*subcont + ... assembly'*assemble + finalassembly'*finalass; constraints = {bnds, bnds2, con}; options = struct; options.solver = 'cplex'; options.name = 'Material Requirement Planning'; sol = ezsolve(objective,constraints,[],options); PriLev = 1; if PriLev > 0 buycomponent = sol.preprod; buysubcontracter = sol.subcont; buyassembly = sol.assemble; buyfinalassembly = sol.finalass; disp('Buy these components:') for i = 1:length(buycomponent) if buycomponent(i) > 0, disp([' ' num2str(buycomponent(i)) ' units of type ' num2str(i) ]) end end disp('Use these subcontracters:') for i = 1:length(buysubcontracter) if buysubcontracter(i) > 0, disp([' ' num2str(buysubcontracter(i)) ' assemblies of type ' num2str(i) ]) end end disp('Do this assembly:') for i = 1:length(buyassembly) if buyassembly(i) > 0, disp([' ' num2str(buyassembly(i)) ' assemblies of type ' num2str(i) ]) end end disp('Do this final assembly:') for i = 1:length(buyfinalassembly) if buyfinalassembly(i) > 0, disp([' ' num2str(buyfinalassembly(i)) ' assemblies of type ' num2str(i) ]) end end end % MODIFICATION LOG % % 051018 med Created. % 060110 per Added documentation. % 060125 per Moved disp to end % 090308 med Converted to tomSym
Problem type appears to be: lp ===== * * * =================================================================== * * * TOMLAB - Tomlab Optimization Inc. Development license 999001. Valid to 2010-02-05 ===================================================================================== Problem: --- 1: Material Requirement Planning f_k 238365.000000000000000000 f(x_0) 0.000000000000000000 Solver: CPLEX. EXIT=0. INFORM=1. CPLEX Dual Simplex LP solver Optimal solution found FuncEv 1 Iter 1 Buy these components: 1200 units of type 1 600 units of type 2 600 units of type 3 300 units of type 4 3000 units of type 8 3000 units of type 9 3000 units of type 10 3000 units of type 11 12000 units of type 12 Use these subcontracters: 5700 assemblies of type 2 6000 assemblies of type 3 Do this assembly: 600 assemblies of type 1 300 assemblies of type 2 Do this final assembly: 3000 assemblies of type 1 3000 assemblies of type 2