Business, Sauder School of
DSpace
UBCV
Rugina, Dragomirna
Master of Science in Business - MScB
University of British Columbia
The PLM (Product Lifecycle Management) Toolkit at Agilent is a decision-support system used in support of Product Lifecycle Management decisions across the supply chain. The development of the tool started 4 years ago and new features are currently added. Utilization of the tool includes product portfolio decisions, product rollovers and discontinuance, lifetime buy decisions and contract manufacturing. The manufacturing environment at Agilent is high mix, low volume and it poses several challenges. Among the unique challenges that TMO (Test and Measurement Organization) faces are long lifetime of the products and assurance of supply for products whose components have shorter lifetime than the product itself. When a part is discontinued by the supplier, it is necessary to make a life-time buy, that is to buy enough of that part so that it can be used in all the products for their lifetime (dependent demand) and ensure all support (independent demand). We call such a component a lifetime buy (LTB) part and we call the LTB process the process of buying for the lifetime of all products containing that LTB part. In the past few years, the users expressed a need to build a stand-alone lifetime buy tool, which would assist decision makers in their current operations involving excess, allocations, assurance of supply and shortages of LTB parts. The current users (planners - engineers) use the LTB tool for LTB calculations. The current LTB tool uses as input the products and computes the necessary quantities of LTB parts assuming infinite overbooking - that is, existence in unlimited supply of all the necessary LTB parts. This assumption is obviously very optimistic, and there is a need to build a tool allowing limited overbooking. In what follows, we understand by overbooking the allocation of parts to a product after one part has actually run out. The current LTB tool does not allow the users to build side constraints (lower bounds on the quantity of product to be built and upper bounds given by production capacity), therefore there is a need for an LTB tool that includes an optimization engine, allowing the users to input side constraints. Another important concept in the LTB problem is equal runout. Equal runout means that all LTB parts run out in their products at about the same time, or equivalently, demand in immediate periods is preferred to demand in later periods. The purpose of the paper is to analyze and optimize of the lifetime buy process in order to improve the lifetime buy decision. The paper gives the description of the lifetime buy tool that has not being yet implemented. Chapter II of the thesis is dedicated to the determination of a runset on which optimization is performed. In the existent tool, a runset is composed only of a set of products and their components (a single explosion down or up through the bill of materials). For optimization purposes, we propose the utilization of larger runsets, obtained by iterating consecutive explosions up and down. The criteria for stopping the iterations are given by the products in the runset or the LTB parts at the frontier of the runset. Chapter III presents two different one-period optimization models: A linear model for the optimal use of LTB parts on hand, structured as a trade off between maximizing profitability, minimizing deviation from equal runout and maximizing customer service level represented by insurance of parts for support. A linear model for the case of overbookings, structured as a trade off between maximizing profit, minimizing deviation from equal runout and minimizing value of overbookings. Two objective functions are built for the deviation from equal runout, one for the one period case and the other for the multiperiod case. Also, a binary model is built in order to build the number of overbookings objective function. The MIP solver is not available at Agilent, therefore the model containing the binary variables cannot be implemented yet. Heuristics are built for the overbooking of LTB parts as follows: number of overbookings is limited by a constant; value of overbookings in each product cannot exceed a given constant; value of overbookings for an LTB part cannot exceed a given constant. Some of the decisions that can be made using the models are: optimal use of LTB parts on hand, what products are candidates for discontinuance, when a product or LTB part will be discontinued, what LTB parts should be overbooked and in what quantities, how large the redesign investment can be. The legacy system at Agilent is very complex and the management information systems and the MRP databases used are different from site to site. The PLM Toolkit is a management information system that pulls data from the legacy systems at all sites and can be used globally. Given the fact that data necessary for the life time buy model has not being extracted from the legacy system to the date of the presentation of this thesis, in a form that would allow the GAMS program to run, we have not been able to the present date to test and run the GAMS program on a real set of data. Therefore the LTB one period model is applied to a toy data set and run in Excel Solver, in the Example in Chapter III, Optimization. From the modeling point of view, the problem is very difficult because it is clearly a one period, multi-item stochastic model, close to the newsboy problem. However, the demand distributions for the products are not available, and moreover, even if they were made available, it would be very hard to see how demand at the upper level in the bill of materials translated in dependent demand at the raw material - LTB part level. This is the reason why we model the LTB problem using deterministic linear programming.
3974673 bytes
application/pdf
L I F E T I M E B U Y M O D E L I N G A T A G I L E N T T E C H N O L O G I E S By Dragomirna Rugina B.A. Mathematics, University of Iasi, Romania, 1988 Ph.D. Mathematics, University of South-Paris, France, 1995 A THESIS SUBMITTED IN PARTIAL FULFILLMENT OF THE REQUIREMENTS FOR THE DEGREE OF MASTER OF SCIENCE (BUSINESS ADMINISTRATION) in THE FACULTY OF GRADUATE STUDIES , ~ (Facul ty\bf Commerce and Business Administration) We accept this thesis as conforming To the required standard; THE UNIVERSITY OF BRITISH COLUMBIA December 2000 (§> D r a g o m i r n a R u g i n a , 2000 In presenting this thesis in partial fulfilment of the requirements for an advanced degree at the University of British Columbia, I agree that the Library shall make it freely available for reference and study. I further agree that permission for extensive copying of this thesis for scholarly purposes may be granted by the head of my department or by his or her representatives. It is understood that copying or publication of this thesis for financial gain shall not be allowed without my written permission. Department of The University of British Columbia Vancouver, Canada Date DE-6 (2/88) Abstract The PLM (Product Lifecycle Management) Toolkit at Agilent is a decision-support system used in support of Product Lifecycle Management decisions across the supply chain. The development of the tool started 4 years ago and new features are currently added. Utilization of the tool includes product portfolio decisions, product rollovers and discontinuance, lifetime buy decisions and contract manufacturing. The manufacturing environment at Agilent is high mix, low volume and it poses several challenges. Among the unique challenges that TMO (Test and Measurement Organization) faces are long lifetime of the products and assurance of supply for products whose components have shorter lifetime than the product itself. When a part is discontinued by the supplier, it is necessary to make a life-time buy, that is to buy enough of that part so that it can be used in all the products for their lifetime (dependent demand) and ensure all support (independent demand). We call such a component a lifetime buy (LTB) part and we call the LTB process the process of buying for the lifetime of all products containing that LTB part. In the past few years, the users expressed a need to build a stand-alone lifetime buy tool, which would assist decision makers in their current operations involving excess, allocations, assurance of supply and shortages of LTB parts. The current users (planners - engineers) use the LTB tool for LTB calculations. The current LTB tool uses as input the products and computes the necessary quantities of LTB parts assuming infinite overbooking - that is, existence in unlimited supply of all the necessary LTB parts. This assumption is obviously very optimistic, and there is a need to build a tool allowing limited overbooking. In what follows, we understand by overbooking the allocation of parts to a product after one part has actually run out. The current LTB tool does not allow the users to build side constraints (lower bounds on the quantity of product to be built and upper bounds given by production capacity), therefore there is a need for an LTB tool that includes an optimization engine, allowing the users to input side constraints. Another important concept in the LTB problem is equal runout. Equal runout means that all LTB parts run out in their products at about the same time, or equivalently, demand in immediate periods is preferred to demand in later periods. The purpose of the paper is to analyze and optimize of the lifetime buy process in order to improve the lifetime buy decision. The paper gives the description of the lifetime buy tool that has not being yet implemented. 11 Chapter II of the thesis is dedicated to the determination of a runset on which optimization is performed. In the existent tool, a runset is composed only of a set of products and their components (a single explosion down or up through the bill of materials). For optimization purposes, we propose the utilization of larger runsets, obtained by iterating consecutive explosions up and down. The criteria for stopping the iterations are given by the products in the runset or the LTB parts at the frontier of the runset. Chapter III presents two different one-period optimization models: A linear model for the optimal use of LTB parts on hand, structured as a trade off between maximizing profitability, minimizing deviation from equal runout and maximizing customer service level represented by insurance of parts for support. A linear model for the case of overbookings, structured as a trade off between maximizing profit, minimizing deviation from equal runout and minimizing value of overbookings. Two objective functions are built for the deviation from equal runout, one for the one period case and the other for the multiperiod case. Also, a binary model is built in order to build the number of overbookings objective function. The MIP solver is not available at Agilent, therefore the model containing the binary variables cannot be implemented yet. Heuristics are built for the overbooking of LTB parts as follows: number of overbookings is limited by a constant; value of overbookings in each product cannot exceed a given constant; value of overbookings for an LTB part cannot exceed a given constant. Some of the decisions that can be made using the models are: optimal use of LTB parts on hand, what products are candidates for discontinuance, when a product or LTB part will be discontinued, what LTB parts should be overbooked and in what quantities, how large the redesign investment can be. The legacy system at Agilent is very complex and the management information systems and the MRP databases used are different from site to site. The PLM Toolkit is a management information system that pulls data from the legacy systems at all sites and can be used globally. Given the fact that data necessary for the life time buy model has not being extracted from the legacy system to the date of the presentation of this thesis, in a form that would allow the GAMS program to run, we have not been able to the present date to test and run the GAMS program on a real set of data. Therefore the LTB one period model is applied to a toy data set and run in Excel Solver, in the Example in Chapter III, Optimization. From the modeling point of view, the problem is very difficult because it is clearly a one period, multi-item stochastic model, close to the newsboy problem. However, the demand distributions for the products are not available, and moreover, even if they were made 111 available, it would be very hard to see how demand at the upper level in the bill of materials translated in dependent demand at the raw material - LTB part level. This is the reason why we model the LTB problem using deterministic linear programming. iv Table of Contents Abstract ; ii Table of Contents v List of Figures vf List of Tables vii I. Introduction 1 1.1 Problem Background 1 1.2 Company Background 3 1.3 Literature Overview 8 II. Description and Functionality of the Tool 11 2.1 F low di agram of the Tool 11 2.2 Degrees of Separation 13 2.3 Runset Generation 15 2.4 Infinite Overbooking Product Mix 20 III. Optimization 3.1 One-period Model 23 3.2 Multi-period Model 31 3.3 Binary Model 33 3.4 Manual Allocations and Overbookings 36 3.5 Other Outputs of the Tool 37 IV. Conclusion and Recommendation 39 References 40 APPENDIX. GAMS Code for the One-period Model 41 v List of Figures Figure 1 3 Figure 2 5 Figure 3. 11 Figure 4..., •. 13 Figure 5 14 Figure 6 19 Figure 7 24 Figure 8 ...25 Figure 9 27 Figure 10 28 Figure 11 34 vi List of Tables Table 1 16 Table 2 28 Table 3 30 vn I. INTRODUCTION 1.1 Problem Background The context of the problem is that of the complex MRP (material requirements planning) system at Agilent. By definition, the BOM (Bill of Materials) and the MPS (Master Production Schedule) are joined together in the Material Requirements Planning (MRP), which is a management information system enabling production decisions, giving the product structure, quantity per and lead times. The BOM can be represented as a diagram in which moving down the diagram is analogous to reversing the production operations and disassembling the product to its constituent parts. This process terminates at nodes on the diagram corresponding to parts and raw materials that are purchased. We say that end-item demand is independent demand, whereas component demand is dependent demand. Independent demand is typically uncertain and we have to develop forecasts for it, whereas dependent demand is known and can be determined using MRP logic. Under MRP logic, time is viewed in discrete intervals sometimes called time buckets (In our case, daily buckets). The bill of materials is represented in the current tool by 20 levels. In the LTB context, for the sake of simplicity, we represent the bill of materials as having only two levels: end items - products and raw materials. Most LTB parts are raw materials therefore are represented in the BOM at the lower level. There are 3 inputs to MRP logic: Master Production Schedule (MPS), Bill of Materials (BOM), and Inventory status, maintained at Agilent in various databases depending on site. The MPS is a time-phased plan for completion of end-items. The MPS describes which end items (products) the production system will build in each time bucket. The BOM contains the components that go into each final product and contains information such as quantity per and lead times. If a product PI contains 2 parts pi, we say that PI contains pi at quantity per of 2. The inventory status contains current information on the quantity of parts and materials on hand and on order. From the MRP logic, we determine the net requirements, that is determine specific plans for the purchase orders and the shop orders. There are several weaknesses in the basic MRP framework, related to lot sizes, capacity, planned lead-times and uncertainty. Uncertainty is ignored in the standard MRP perspective. All parameters such as customer demands and material lead times, are treated as if they are known with certainty. The way to deal with uncertainty in a traditional MRP system is to build safety stock and/or safety time for the inputs and outputs of the MRP system. If a supplier decides to discontinue the production of a component that is used in several products, management can choose to discontinue those products, redesign that component and supply it from a different supplier, or buy enough components to support the building of 1 all the products during their lifetime, in which case we call that component a lifetime buy (LTB) part. In a complex, high-mix low-volume manufacturing environment such as the manufacturing environment at Agilent, the lifetime buy (LTB) decision, that is the decision to buy a part for the lifetime of all the dependent and independent demand that occurs, is one that deals with a lot of uncertainty. The problem is to determine what quantity of LTB parts to buy, in such a way that it covers both independent and dependent demand over the whole life of the products, to monitor assurance of supply and allocate parts optimally when faced with inevitable shortages of life-time buy parts. The lifetime buy problem is specific to products with long life cycles and to our knowledge, it has not been treated in the current literature on the uncertainty in MRP systems or inventory control. 2 1.2 Company Background Agilent is a spin-off company of Hewlett Packard offering high technology solutions such as: Testing equipment for various industries such as voltmeters and signal analyzers; Testing equipment for telecommunication products (phones); Equipment for digital and optical networks; High-tech medical equipment. The P L M Toolkit is a decision-support system used in support of product lifecycle management decisions across the supply chain. The development of the tool started 4 years ago and new features are currently added. Utilization of the tool includes product portfolio decisions, product rollovers and discontinuance, lifetime buy decisions and contract manufacturing. The manufacturing environment at Agilent is high mix, low volume and it poses several challenges. Among the unique challenges are long lifetime of the products and assurance of supply for products whose components have shorter lifetime than the product itself. The lifetime of a product follows the following stages: Figure 1. Q New Product Introduction Maturity Discontinuance Obsolescence (5-10 years) Ramp Up Ramp Down Guaranteed Minimum Support Period 3 A component of a product is classified by engineering in one of the following states: Active (enter in the composition of an active product, that is a product that is currently on the market), In active support (no longer active but in the reference list (in support) of an active product), In discontinuance support (used in the reference list of a discontinued product), Discontinued, Obsolete. Among the products that have been sold on the market, it is accepted that about 5% will break down and therefore will need support parts to replace the broken parts. The support quantity is taken into consideration when calculations of independent demand are made. If a supplier decides to discontinue the production of a component that is used in several products, management can choose to discontinue those products, redesign that component and supply it from a different supplier, or buy enough components to support the building of all the products during their lifetime, in which case we call that component a lifetime buy (LTB). Each of these alternatives has its disadvantages. Discontinuance of products means losing market share and revenue, redesign is usually very time consuming and costly, and voluminous lifetime buys can result in surplus inventory and scrapped material. If there is not enough demand for a product, its discontinuance might be the best decision. Another challenge is the complexity of the supply chain at Agilent. There are several PLM sites in Western US (Sonoma, Spokane, PCA, Colorado Springs, Loveland and Santa Clara), two sites in Japan (Hachioji and Kobe), and a site in Scotland (Queensferry). Some of these sites produce only boards (PCA), others are final assembly and others are process centers (ie. boards and final assemblies at the same time, such as Sonoma). Every site has its own methodology of dealing with the PLM problems. The Toolkit is used across sites to extract data from the Material Requirements Planning legacy system. The Master Production Schedule is exploded into component materials needed for each product. Different components have different run-out times. The Toolkit contains several tools: The Common-Unique tool determines the strongly unique components (components that are used in only one product), and the common components (components that are used in more than one product). The commonality of a component is measured by its percentage unique, that is what percent of that component is used in a runset. We call runset the part of the Bill of Materials that is included in the analysis. Usually, the bill of materials is huge as each product contains hundreds of components. Therefore, a runset is made of the products that are considered under the analysis, and all the components of those products: 4 Figure 2. LTBl LTB2 LTB3 LTB4 LTB5 LTB6 LTB7 In Figure 2, the runset of Pl and P2 is composed of {Pl, P2, LTBl, LTB2, LTB 3, LTB4, LTB7}. The runset of P2 and P3 is {P2, P3, LTB2, LTB3, LTB4, LTB5, LTB6, LTB7}. Notice that LTB2, LTB3 and LTB7 are common to the 2 runsets. This idea will be exploited in 2.3, where larger runsets are generated for the purpose of optimization. For example, in a product, a 100% unique component is a strongly unique component. A 50% unique component is a component with usage equally split between the runset and products that are not in the runset. Obviously the more "unique" a component is, the easier it is to determine its run out moment. The Where-Used Browser part of the tool gives, for each part, the products and the quantities per in which it is used. Each part of the tool contains information about the lifetime buy (LTB) parts. However, there is a need for a stand-alone LTB tool that addresses the questions specific only to the LTB parts. There are 3 types of lifetime buy (LTB) parts: - genuine lifetime buy parts: these are lifetime buys already bought and the purchase made is now a hard constraint, because there is no other known source for that part; - potential lifetime buy parts: the supplier has announced a planned discontinuance of a component, but there is still the possibility to make a final buy, or to redesign the component and supply it elsewhere; - bridge buy parts: the decision has been made to redesign the component, but there is enough inventory to carry production over to the date the redesign is complete. The current LTB tool uses as input the products in which the LTB parts are used, and gives the quantity of LTB necessary to cover the independent requirements as they appear in the MRP system. The current and future users of the tool are planners - engineers. Some of the limitations of the current LTB tool are the following: The analysis can be made only at one site. That is, even if an LTB is used at multiple sites, the tool gives only the products at the run site and their requirements. The independent demand, for support in products, of an LTB part does not appear in the calculations. 5 - The tool assumes infinite overbooking, that is assumes that all parts are available for product built until the end of the horizon period, or equivalently, we ignore that any of the components will run out in the future. - The LTB analysis is limited to the duration given by the MRP projections, which is 18 months, whereas the LTB analysis should be done over the whole life of the product which can be as long as 5 to 10 years. The tool does not allow interactive built of side constraints (lower bounds on demand for products, given for example by booked demand, and upper bounds of demand given by capacity constraints). Optimization is necessary in order to model side constraints imposed by the user. The purpose of this thesis is to describe the Life Time Buy Optimization Module, its goals, objectives and modeling alternatives. The Life Time Buy Optimization Module (LTBOM) is part of the advanced data analysis environment that will support decision making regarding the lifetime buy process. The Life Time Buy optimization module (LTBOM) will draw its inputs from the LTB information available in the current MRP system. The paper describes the structure and the optimization engine that can be implemented in the future LTB tool, but it has not being implemented yet because of other priorities and company constraints. In a first step, an LTB database tool can be built to extract the LTB information from the MRP system and can be used across sites in order to: - Support daily operations and decision making, through queries and calculations; - Store and retrieve LTB data efficiently across sites, including supplier information. There are several problems with limiting the LTB analysis to the database solution, and we strongly believe that an optimization tool would add value to a database solution: A database solution without an optimization module does not allow users to perform multidimensional "what-if' analysis based on multiple and contradicting objectives; Does not allow projections in the future, therefore cannot identify a problem before it happens; Without optimization methods, there is no systematic way of moving towards the best solution, only towards an improved solution. The purpose of the LTBOM is the LTB calculation enhancement in the following directions: - Represent the lifetime buy decision on a longer time span in the future, thus providing a tool for strategic decisions regarding LTB parts such as part/assembly redesign and product/option discontinuances; Include in the analysis the many tradeoffs and objectives of the LTB process and move towards the best solution with respect to these objectives; - Include in the analysis the intermediate levels of BOM (boards and assemblies) where LTB parts inventory and independent demand occur; Allow the user to perform complex "what-if analysis on a daily basis based on interactive choices of: the part of bill of materials included in the analysis (up to a desired number of degrees of separation, as defined in 2.3); the modification of the product mix through manual allocations and overbookings; (i.e. part reservations for products in which one or more LTB parts have run out); the length of the time interval considered in the analysis; The choice of side constraints on prduct build (lower and upper bound); the relative importance and levels of achievement of the various objectives. The general requirements on the Lifetime Buy Optimization Module are as follows: - Allow long term, multidimensional scenario analysis of the lifetime buy process, based on given dependent and independent demand forecasts; - Enable users to own the lifetime buy process; - Be interactive and easy to use; - Be integrated with the rest of the components of the PLM Toolkit. Some of the decisions that can be made using the models are: - Optimal use of LTB parts on hand; - Discontinuance times: when a product or LTB part will be discontinued; - What products are candidates for discontinuance; - What LTB parts should be overbooked and in what quantities; - How large the redesign investment can be. 7 1.3 Literature Overview There are several weaknesses in the basic MRP framework, related mainly to uncertainty. Uncertainty is ignored in the standard MRP perspective. All parameters such as customer demands and material lead times, are treated as if they are known with certainty. The way to deal with uncertainty in a traditional MRP system is to build safety stock and/or safety time for the inputs and outputs of the MRP system. Due to the long lifecycle of the products, it is difficult to build distributions of demand for the products. It is estimated that in the future, the lifecyles of products will shorten, making the building of demand distributions easier. However, it is not obvious how distributions of materials at upper (product) level in the bill of materials would translate to distributions of demand at lower (raw materials, LTB parts) levels. The inexistence of distributions of demand and the complexity of the bill of materials makes it very difficult to model uncertainty by using a stochastic, one-period multi-item model, such as the newsboy problem presented in the sequel. The newsboy problem Suppose that demand for a selling good during one period is a random variable D with known cumulative distribution function F(t) and density f(t). Assume it costs c to purchase one unit, inventory remaining at the end of the period costs h per unit and there is a penalty cost of p per unit of unsatisfied demand. Assume p > c. Suppose the initial inventory at the start of the period is x > 0. The decision variable, y, is the inventory on hand after ordering. We assume that the delivery time is 0 so that the order can be used to satisfy the demand during the period. The number of units remaining on hand at the end of the period is the variable y-D, which may be positive or negative. Denote by X+= max{X,0} the positive part of X. It follows that the cost incurred in the period for a given y is: c(y-x) + h(y-D) + + p(D-y) + which is a random variable whose expected value can be minimized. The expected cost is: G(y, x) = c(y-x) + h[(y- t)f(t)dt + p | ° (t - y)f(t)dt = G( v) - cx G(y) is convex in y so that the minimizing value occurs where G'(y*)=0, that is for: F(y*) = ^ p + h The optimal solution is: if x < y* order y* - x, otherwise do not order. The newsboy problem is used to decide the stock quantity of an item when there is a single purchasing opportunity before the start of the selling period and the demand for the item is random. The tradeoff is between the risk of overstocking (forcing disposal below the unit purchasing cost) and the risk of understocking (losing the opportunity of making a profit). 8 The newsboy problem is often used to aid decision making in the fashion and sporting goods industries, both at the manufacturing and the retail level. In most cases, the distributional information of the demand is very limited. Sometimes all that is available is an educated guess of the mean and the variance of the demand, and the tendency in this case is to approximate the demand with a normal distribution. However, many demand distributions can be very far from normal. In 1958, Scarf addressed the newsboy problem whereonly the mean and the variance are known without any further assumptions about the form of the distribution of the demand. Scarfs ordering rule, presented in the following paragraph for the multi-item case, is of practical value because it is optimal and can be extended to the following situations: recourse case, where there is a second opportunity to purchase after observing the demand. To the fixed ordering case, where a fixed cost is charged for placing an order. To the multi-item case, where multiple items compete for a scarce resource. We describe the multi-item problem in the presence of a budget constraint. This is typically the problem faced at the time when purchasing or production decisions are made in the fashion and sporting goods industries where the purchasing manager must allocate his budget or resource among competing items. In the case of production, there may be a capacity constraint rather than a budget constraint. Let Cj , pj = Cj (1 + mj), and Sj = Cj (1 - dj) be the unit cost, the unit selling price and the unit salvage value, where mj and dj denote the mark-up and the discount on item i = 1, ..., N. Let Pi and a; denote the mean and the variance of the demand for item i =1, .. .,N. Suppose that the cost of purchasing all the items cannot exceed a predetermined budget of B dollars. We want to find the production quantities of products that maximize the expected profit against the worst possible distribution of demand without exceeding the budget constraint. It can be shown that maximizing profit is equivalent to minimizing the following expression: minZcorfi-2.- + K+rf.-) Q QN 1=1 [ subject to constraint: i>,e,.<i?. i=i We form the Lagrangian function: ;=1 X where X is the Lagrange multiplier associated with the budget constraint. Computing the partial derivatives 5L/8Qj = 0 for all i, the solution is of the form: 9 and 0 otherwise. ( i ^ m- - A 1/2 u 1/2 A V -k) ) dt+A p.\ The problem is to find the smallest non-negative A- such that the budget constraint is satisfied. The following algorithm is essentially a line search to find the optimal value A,. Algorithm Step 1. Check if Qj(0) satisfies the budget constraint. If yesm the solution is optimal and we can stop. Else go to step2. Step 2. Start from an arbitrary X > 0. Set s > 0. Step 3. If m ' ~ ^ > ^ - , set Qj(A.) as above. Else set Oj(X) = 0. N Step 4. If ^CiQj < B -E decrease X and go to step3. i=i N If ^c,f3, > B + s increase X and go to step 3. /=i N If - e < ^_c\Qi ^ £ stop. Other papers related to the newsboy problem are the problem of buying fashion goods for the 'big book" of a catalogue, in the case where the owner also has outlet stores and thus has the opportunity to divert inventory, originally purchased for the big book. The questions in this case are: (1) how much to order initially and (2) how much to divert to the outlet store as actual demand is observed. A model of demand for one item is developed in the paper "Improved Fashion Buying with Bayesian Updates" by Gary Eppen and Ananth Iyer, motivated by data in women fashion. A dynamic program is developed that gives the optimal policy for this 2-stage newsboy problem. As mentioned before, the one and two period stochastic newsboy models are of limited practical use in the lifetime buy problem because of the fact that there is no information on demand distribution and the complexity of the bill of materials. 10 II DESCRIPTION AND FUNCTIONALITY OF THE TOOL 2 . 1 Logical flow diagram of LTBOM The following diagram shows the structure of the LTB tool to be built. The user determines the runset based on the product and LTB criteria described in 2.3. Then the current LTB situation is assessed as described in 2.4. Finally the optimization step developed in Chapter III is applied to determine optimal use of LTB parts, products candidates for discontinuances, what LTB parts should be overbooked and in what quantities based on the value of an LTB part. Figure 3. User User - decision making 11 The feedback loops represent the fact that the tool is interactive and that the output of one optimization step can be used as input to another optimization step, until the user obtains the desired result. For example, the user can apply the optimization step globally and obtain the value of the LTB parts. These can be used to determine the boundaries of the runset (as described in 2.3). This step is represented in the tool by the loop between User decision making box and the Runset generation box. The maximum profit and the equal runout mix obtained in a first optimization step are used to assess the current LTB situation. This is represented in the feedback loop between the User decision making box and the Assessing the current LTB situation box. Once the user has fixed the level for one objective function, he can optimize with respect to one or two of the remaining objective functions. This step is represented between the loop between the User decision making box and the Optimization and analysis of tradeoffs box. 12 2.2 Degrees of separation in the Bill of Materials In order to apply the optimization models, we need to focus on the whole bill of materials or zoom in on a section of it, based on different selection criteria such as a particular site, or product line, or set of products allocated to a customer. In the previous parts of the tool, a runset is defined as a set of products and the lifetime buy parts that are contained in at least one of these products (downward explosion), or as the set of LTB parts together with the products in which these parts are contained (upward explosion). Figure 4. Pl P2 P3 P4 LTBl We want to extend this definition to more consecutive upward and downward explosions, based on the following definition of degrees of separation: We consider a simplified, two-level compressed bill of materials in which all components have been exploded down to the raw materials and the upper level is composed of products, that is all items that have independent demand. Denote by p(i) the part set of product i, that is the LTB parts used in product i and by P(j) the product set of part j, that is the end items (products) or intermediate levels - boards, assemblies and protected LTB parts having independent demand for support). We say that two products Pl and P2 are at 0 degrees of separation if they have parts in common: p(Pl) n p(P2) *0 Two products are at 1 degree of separation if their part sets are disjoint, but at least one of these parts can be used in common products: p(Pl) n p(P2) = O P(p(Pl)) n P(p(P2)) *0 Two products are at 2 degrees of separation if their part sets are disjoint, the product sets of their part sets are also disjoint, but they have common parts: p(Pl) n p(P2) = O P(p(Pl))nP(p(P2)) = <D 13 p(P(p(Pl)))np(P(p(P2)))*0 Figure 5. PI O P 2 PI L T B l PI , P2 at 0 degrees of separation PI L T B l PI, P4 at 2 degrees of separation Higher degrees of separation can be thus defined recursively. We note that if the user forces an increase in production on one product PI (which is called a manual allocation), and wants to use only the LTB parts available on hand, then the parts used in PI will be consumed and that will decrease the supply of parts available for the other products containing the same LTB part. Since the quantities of products at zero degree of separation decrease, the need for their parts decreases and therefore there will be more parts available for the products within one degree of separation from PI, and so on. Therefore a manual allocation in a product produces a decrease in availability of LTB parts for production of products within even degrees of separation and an increase in availability of LTB parts for products within odd degrees of separation. The quantitative approach is done by optimization, as described in the manual allocations and overbookings section. 14 2.3 Runset generation The size of the runset to be considered for optimization can be determined based on the following product criteria, LTB criteria or a combination of both. Based on product criteria, we determine the size of the runset. Based on LTB part criteria, we determine at which point to stop the explosion (that is, the frontier of the runset): A. Product criteria. 1) Family. A runset is roughly speaking a family of products and its corresponding LTB parts. The LTB components at the boundary of the runset can be distributed proportionally to total demand, or percent unique (that is, the percentage of the LTB part used in the runset). 2) Families within a number of degrees of separation. There might be a need for the user to include in the analysis more than one family of products (for example in the case where two or more families share a large number of LTB parts). In this case, we can extend the definition of degrees of separation to families of products. The user can look first into the families at zero degrees of separation (that is, families that share some LTB parts), then the analysis can be extended to one degree of separation and so on. 3) Market research criteria (classification, clustering and segmentation, associations). Market research can help find patterns in sales that are useful for determining runsets and ease the task of producing sales forecasts. For example, the user can include products that he sells together in the same runset (testers that are part of the same system are in this situation). 4) Descriptive statistics. Statistical analysis on historical data goes more in depth in discovering patterns and can show what products have sales positively or negatively correlated with a given product. Highly correlated products should be included in the same runset. Establishing correlation patterns in the data can be very helpful in forecasting future sales. 5) Product mix per customer. A market driven criterion for defining a runset is the product mix for an important and/or loyal customer. The user would want to know what products in the mix and in what quantities to sell to such a customer in order to maximize profits. B. L T B criteria. 1) Difficulty of procurement. 15 The number of suppliers and the quantity that these suppliers will be willing to provide measures difficulty of procurement for an LTB part. At sites where we can define how critical an LTB part is based on its difficulty of procurement, one can start the generation of the runset with the most critical LTB up to the desired number of degrees of separation. At boundaries, the tool should check that the combined difficulty of procurement of all LTB parts is less than a constant defined by the user, otherwise the number of degrees of separation can be increased or decreased within the runset until the most critical LTB parts are interior points of the runset and none is at the frontier, so that their use gets optimized by the optimization module to be implemented. The least critical LTBs at the frontier can be partitioned proportionally to demand within and outside the runset. A classification based on the difficulty of procurement of the LTB parts has been suggested according to the following table: Table 1. Difficulty Comment 1 No more in the world, all used for existing products 2 More available in support of another product 3 Commercially available or more at other sites 4 There are other manufacturers of similar parts, possibly with design restrictions The table above suggests that in assessing the difficulty of procurement of an LTB, one can consider the following factors, which will be the input to the LTB tool that will be built: Quantity available on hand and time of discontinuance if the LTB is consumed at current rate; Quantity available in support of other products, at the same site; - Quantity available at other sites (production and/or support); - Number of suppliers, quantity they can supply and cost of procurement; Cost and duration of redesign of the LTB part itself; - Extent of redesign (number of parts, boards or subassemblies that need to be redesigned after the discontinuance of the chosen LTB); estimation of cost and duration of redesign. 2) Value of an LTB. If we want to define the value of an LTB, we note that we cannot assign it as simply being the market price of that LTB part. Indeed, there are parts with a very small market price without which very expensive products cannot be built. Therefore the value of an LTB part depends on the product it is used in and varies with the product mix, and with the quantity of that LTB part already on hand. This suggests defining the value of an LTB part as the shadow price of the following linear programming problem: 16 Consider the following maximizing profit problem P and its dual D: Denote by JC,- the quantity of product i to be built, by p{ the profit per unit of product i, by ai} the quantity of LTB part j per product i and by bj the quantity of LTB j available on hand. « max ^ p. Y < a i j x i - b j Forj = l,...,m 1=1 x>0 m m Y s a v w j - P i Fori = l,...,n 7=1 w>0 P is a product mix produced using m types of resources (LTB parts). A unit of product brings a profit of p; and consumes a^ units of LTB j. There are bj units of LTB j. Denote by Wj the shadow price or the fair price for a unit of LTB j. In the case where we have side constraints defined by the user, the problem is: n max Pl: 1 = 1 i=i x. > m, which can be brought to form P by putting yx = x; -mj and again we consider the shadow prices corresponding to the side constraint problem Pl. Then the marginal value of LTB j can be defined as Wj. It depends on the quantity of LTB part on hand, product mix ( as defined by the user as set of side constraints) and profit per product (which is not constant in time, as it depends on excess reduction and market price, but for computation purposes and shorter periods of time we can assume that the profit per unit of product is a constant). The value of an LTB part thus defined can be used to formulate the tradeoff between maximizing profit and minimizing value of LTB overbookings (constraint violations), without the help of binary variables: 17 min^w.(^a..x. -bjY j constraints: - the side constraints: Lj < Xj < Uj. n - a given level of profit: ^ pixi = P i=\ The optimal (maximizing profit) mix P is a product mix produced using m types of resources (LTB parts). The value of LTB j can be defined as the shadow price corresponding to the constraint of the LTB j. The value of an LTB thus defined depends on the quantity of LTB on hand, product mix (side constraints) and profit per product. If the network is of reasonable size and the optimization can be run globally, then a value for each LTB part can be defined globally (ie. does not depend on a runset). The value can be used as a stopping criterion in the network: one can start generating a runset with an LTB part with a large value and the bounds of the runset at a chosen number of degrees of separation, so that the combined value of the LTB parts at the frontier is smaller than a predefined constant. Note that the runsets thus defined depend on the product mix, based on the side constraints fixed by the user (that is lower and upper bounds on the quantity of product built). 3) Inventory control: A - B - C classification of parts The inventory system can be improved upon by adopting decision rules that do not treat all stock keeping units the same. The 80-20 rule states that somewhere in the order of 20% of the parts account for approximately 80% of the total annual dollar usage. Here dollar usage is defined as the sum of products of the value of a part and its total requirements (dependent and independent). Therefore parts with large annual dollar volume deserve more managerial attention, because they can potentially yield higher profits, and a priority rating can be assigned to each part in inventory according to its value: A (most important parts), B (intermediate in importance) and C (least important). By the definition of the dollar value of a part, an expensive slow moving item (with low demand and high per unit cost) and a less expensive fast moving item (with high demand and low value) could receive a similar priority ranking. The distribution by value curve is usually reasonably fit by a lognormal distribution. Class A items should receive the most personalized attention and contain the first 5% to 10% of the parts, as ranked by the distribution by value. Usually these items account for 50% or more of the total annual dollar of the items under consideration. Class B items are of secondary importance. They get a moderate attention but significant, because more than 50% of the total of stock keeping units, accounting for most of the remaining 50% of the annual dollar usage, fall under this category. 18 Class C items are the remaining relatively numerous items that make up only a minor part of total dollar investment. It is common to specify a large safety stock for C items, because of the low unit cost. An A-B-C classification of parts (regular parts and potential LTB parts) is useful in diminishing inventory costs, which can be significant. The ABC classification of LTB parts can also be used in building the following heuristic: allow, in each product, at most one overbooking of an A part, at most 3 overbookings of a B part and at most 5 overbookings of a C part. 4) LTB Commonality. As mentioned before, we can extend the definition of degrees of separation to families of products. There will be LTB parts that are used in a unique family and LTB parts that are shared between two or several families: L T B l LTB2 LTB3 The use of an LTB that is used in only one family can be optimized within that family. Within the family, there are LTB parts that are used in just a few products and LTB parts that are heavily used in (almost) all the products in the family. The LTB parts that are heavily used in many families are the most critical ones. Discontinuance of such LTB parts will result in the disappearance of all their families. If they are hard to procure or redesign, the user might want to look into cost of violation of their constraints versus discontinuance of all (or some of) the families in which such LTB components are heavily used. The heavier the use of an LTB part in multiple families, the harder the constraint of that LTB part should be. We can penalize the constraints in the objective, by using as weights the number of families in which the respective LTB part is heavily used. 19 2.4 Assessing the current LTB situation with respect to the target: the infinite overbooking solution When an LTB part runs out in a product, the product ceases to be produced, but we might want to save (overbook) the other LTB components for it just in case the runout LTB part becomes available again through special procurement or redesign, in which case the product becomes active again. The questions are in which products should we allow overbookings, and how many and what type of LTB parts should we overbook in each product? The current tool allows all demand to pass to the products, that is allocate all parts to products until they all run out. This is called infinite overbooking. If all LTB parts could be made available through special procurement or overbooking, this would result in the highest profit, no discontinuances of products and satisfaction of all demand, until the end of the horizon. On the other hand, this also means the largest amount of investment in procurement of LTB parts. The problem is to balance LTB investment with profit. In analyzing the lifetime buy problem, the user starts with the infinite overbooking assumption, which assumes production of all products at maximum demand levels, until the end of the horizon. This is also the equal runout mix, (that is the product mix obtained by always satisfying immediate demand in favor of demand in future periods, as explained in the following paragraph) assuming there is no restriction on the supply of LTB components and it is also the absolute maximum profit that one could achieve, assuming he has all the necessary parts on hand. Let us denote by N the profit obtained by the LTB unconstrained situation described above, assuming infinite overbooking. For example, the profit N that can be achieved in 10 years for products A and B, having profit per unit pi and P2 and demand per month Di and D2 is: N = 10*(p1D,+p2D2). We call equal runout mix ( E R M ) the product mix obtained when immediate demand, in periods close to the present, is always preferred to demand in subsequent periods, and this regardless of the product and its profitability. For example, we give the LTB part to all products in the first period, then we give LTB part to the products in the second period, and so on, until it runs out. In the last period, we give the LTB part proportional to its demand (that is demand for product times the quantity per of the LTB part in that product). For example, suppose we have 2 products, A using 1 LTB part and B using 2 LTB parts, and we have demand of 40 for A and 20 for B in a month. Suppose we satisfied all demand for that LTB part in periods one and two and we have 60 LTB parts left for period 3. Then the LTB parts are sufficient for 60/(1 *40+2*20)=0.75 months, three weeks, so the LTB part runs out in both products at the same time in 0.75 months. Let us denote by ERM the equal runout mix that the user can obtain with the LTB parts on hand, plus the side constraints that he can define interactively in the tool, which are the lower bounds on product builds. The ERM is obtained as the solution of a linear program with an 20 objective function that ensures that close demand satisfaction is always better than late demand satisfaction for any product. Let M denote the maximal profit solution that corresponds to the same supply of LTB parts on hand and side constraints defined by the user (this is in fact the solution of the initial problem P, with the side constraints defined by the user as above). Then (see also the example in Chapter III): ERM < M< N. These three quantities can be in different relative position with respect to each other, and the user can get a hint regarding his allocation/discontinuance/overbooking decisions based on them. ERM, M and N will be closer together for short time horizons, but the differences between them will increase for longer planning horizons (for example 10 years). In order to improve the profitability of the product mix, the user faces two main decisions: Discontinuance of some products, streamlining the product mix and reallocating the remaining L T B parts. This would move the production from an equal runout mix (ERM) to a maximum profit (M). Looking into violation of constraints (special procurement or redesign of L T B parts). This would move the solution from a maximum profit mix (M) to the infinite overbooking solution N). According to the relative position of ERM, M and N, the user can do the following tradeoffs: 1) Best-case scenario: ERM is close to N: ERM = N. The user can define the degree of closeness, for example ERM = 0.8N is a reasonable definition of close. If a site is in this situation, it can satisfy 80% of demand only by burning LTB parts at the current rate, without any special procurement or redesign. This means there is no LTB problem (assuming the current demand forecasts). 2) M close to N, but far away from ERM: ERM « M = N. Then streamlining the product mix, discontinuing products and reallocating the freed LTB parts, without looking into constraint violations, can achieve a substantial increase in profit. To achieve this purpose, the user can focus on the tradeoff between the equal runout mix and the profit maximization objective. 3) M far away from N, but close to ERM: ERM = M « N. If a site is in this situation, it means that it doesn't have the LTB parts necessary to achieve the levels of demand given by the forecasts and the user should look into violating constraints and procuring more LTB parts. This can be achieved by the tradeoffs regarding the overbooking decision, as described in the sequel. 4) M relatively far away from N and ERM relatively far away from M: ERM « M « N. In this case, the user needs to look into all tradeoffs in order to improve the profitability of his product mix: equal runout versus profit, and also violation of constraints. In conclusion, the assessment of the current LTB situation is fundamental in determining the optimization step (that is in determining whether it is worthwhile from a profitability point of 21 view to optimize only the use of the LTB parts on hand or allow overbookings - violations of constraints). N represents the maximum profit with no constraints at all, M represents the maximum profit with side constraints (resource and capacity constraints) and ERM represents the profit with both side constraints and preferring immediate demand to future demand (that is, both resource, capacity constraints and timing constraints). Constraining LTB parts We can make an attempt to define an LTB component with the earliest runout date for a product as the constraining LTB part of that product. However, the definition depends on the allocation. For example, if we make more of that LTB part available to the product, then it will no longer be constraining and some other LTB part will become the constraining LTB part. One way of defining the "absolute" constraining power of an LTB component (that is, not depending on the allocation of that LTB part) is by looking at the infinite overbooking solution. The constraining power of an LTB part can be defined as the number of periods that an LTB part would have until discontinuance in the infinite overbooking mix (that is assuming that all the other LTB parts are around in infinite quantities and all LTB parts are consumed at maximum demand rates). This is also the discontinuance time as defined in the existent LTB tool and is useful in assessing the current LTB supply, while ignoring profit maximization. This can also be used to assess if an LTB part is in excess or in shortage. For example, if we have 7-10 years of infinite overbooking supply of an LTB part, then we can consider it as being non-constraining; if we have one year of supply we can consider it as being a future candidate for shortage and if we have a 12 year supply (according to current sales forecasts) we consider it to be in excess. 22 III. OPTIMIZATION 3.1 One Period LTBOM We present a one-bucket optimization LTB model, whose GAMS code is given in the Appendix. The reasons to prefer a one-period model for the LTB decision are: A one period model has reasonable size and can be run quickly in GAMS; Equations and objectives corresponding to allocations and overbookings are not time-phased, therefore well suited for a one-period model; Profit, equal runout and customer service level objectives can be expressed in a meaningful way without time-phasing; The drawbacks of a one-period model are: Equal runout and profit objectives can be expressed in a more precise manner with a multiperiod model; With a one-period model, a postprocessing step will be necessary in order to allocate the product mix to periods; One way of dealing with uncertainties in the model is to discount every period with a discount factor. A one period model cannot account for discounting as is (discounting can be applied in the postprocessing step); The formulation of the one period model is the same as the initial problem P for the MAXIMUM PROFIT objective function: The quantity of product i to be built: xt Profit per unit of product i: /?, Quantity of LTB j per product i: atj Quantity of LTB j available on hand: bj max 1=1 1=1 Y^ayX^bj Forj = l,...,m x>0 The user can choose interactively side constraints for the quantity of product according to his preferences as follows: - If the analysis is focused on what products to discontinue, use side constraints: 0 < xt < Uj fo r a n i 5 where Uj is the upper part on demand for product i. Then an optimal solution with Xj = 0 indicates that product i is a candidate for discontinuance. If all quantity produced can be sold, the only upper bound on the product build are the production capacity constraints and the side constraints can be written as follows: D. < xt < Ci fo r au j5 where Cj is the maximum available capacity for product line i and Dj is a lower bound on demand of product i. 23 The "DEVIATION FROM EQUAL RUNOUT" objective function for a one-period model is obtained as follows: If demand for a product per period is constant, the runout time for that product is: Runout time = (Total quantity of product produced) / (Demand per period) Since demand is not constant over time, but is assumed known, we can use the average demand per period instead for the definition of the runout time. Then the objective function corresponding to the deviation from equal runout function can be written mathematically as: MinX £ j i\,i2eP(j) yn yn Di2 Where j is an LTB index, il and i2 are indices for the products that contain j, yn and y,2 are the quantities of products il and i2 produced and Dn and D i 2 are their respective average demands per period. In this expression, the second sum represents how far from each other are discontinuance times for products containing LTB j from an equal runout (that is, j running out in all its products at the same time, triggering all its products to run out at the same time). Figure 7. • Infinite overbooking mix • Maximum profit mix • Equal runout mix • Booked demand Products Figure 7 shows the various product mixes for 6 products: the already booked demand, the equal runout mix, the maximum profit mix and the infinite overbooking mix, up to the end of the horizon period. The CUSTOMER SERVICE OBJECTIVE FUNCTION is given as the quotient between the quantity provided as support, and the total support quantity required, denoted by Q for each LTB j. Q is supposed to be known. 24 All LTB quantities that do not go towards product build go to customer service that is to insurance of support, therefore the customer service level objective function can be written as follows: Where Wj is the value of LTB j as defined above by the shadow price. The user will be able to choose in the interface levels for the two objective functions and input them as constraints, while solving for the third objective function. For example, one possible scenario can be described as follows: find the maximum profit mix with the LTB parts available on hand, for a given value of deviation from equal runout and a given customer service level. Alternatively, the user can take a weighted combination of the three objectives and modify interactively the weights in an unique objective function. The tradeoff (Pareto) curves of this problem are as follows: Figure 8. Profit Profit Dev ia t i on from e q u a l runout C u s t o m e r S e r v i c e l eve l In the case overbookings are allowed, the value of LTB parts can be used to define the TOTAL LTB VALUE objective function of overbookings, without using binary variables, as follows: j With the help of value of an LTB part thus defined we can build the following overbooking heuristics: 25 1) Value of overbookings in a product i must be less than a given constant A(i), that the user can choose: max£/>,.7. where Xj is the solution of the initial problem Pl. 2) Value of overbooking of each LTB part is less than a constant B(j) that the user can choose: max £ - 6 ; ) < 73(7) x,.>Z,. The LTB value can be used as generating and stopping criterion for runsets as follows: If the problem Pl can be run on the whole network, and a value for each LTB part can be defined globally (as a shadow price and does not depend on the runset) then the value can be used as a stopping criterion in the network: start generating a runset with an LTB part with big value and the bounds of the runset are at a chosen number of degrees of separation, so that the LTB parts on the boundary have small value. The value of LTB parts thus defined is based on the current situation (product mix and quantity on hand) and it doesn't give insight into costs of special procurement or redesign. The value of LTB parts as shadow prices can also be interpreted as marginal value (ie. Wj is the change in profit due to a unit increase in LTB j). Therefore, it can be built into the following greedy redesign heuristic: redesign first the LTB parts with higher value (higher Wj). More precisely, once a level of overbookings (5 per product) has been established, redesign or look into the violated constraints in decreasing order of their values. Note that in the case overbookings are allowed (that is, violations of constraints), we can combine various levels of the objectives in order to build complex what-if scenarios: for example, maximize profit for a given level of deviation from equal runout and a given number of overbooked LTB parts. The Pareto tradeoffs corresponding to the overbooking case are as follows: 26 Figure 9. Profit Profit Deviation from equal runout Value of overbookings Deviation from equal runout Value of overbookings The user can also choose interactively between several time windows for the one-period model. The periods of interest are: 1 month, 3 months, 6 months, a year, 18 months, three years, 5 years and 10 years. In conclusion, the user can fix interactively in the interface the levels for two of these objective functions and solve optimally for a third objective. For example, the user can run the following scenario: for a given level of customer service and deviation from equal runout, what is the maximum profit that can be obtained? The following example illustrates answers to some of these questions: E X A M P L E We present a numerical example of 2 products and 5 LTB parts, illustrating the one-period model described in the text and the decisions that can be made based on this model and its tradeoffs between profit, deviation from equal runout, and customer service level. Consider the following runset (part of the bill of materials): 27 Figure 10. L T B l LTB2 LTB3 LTB4 LTB5 The quantity of LTB per product is given in Table 2: Table 2. Product LTBl LTB2 LTB 3 LTB4 LTB 5 A 2 1 0 1 0 B 0 2 3 0 1 Suppose profit per product A is $100, profit per product B is $50, upper and lower bounds on demand are as follows: 10<xA<50 (1) 0 < xB < 75 (2) Suppose the quantities on hand of LTBs are 200, 100, 300, 100, 50 respectively and the quantities demanded for support are 10, 50, 20,10 and 10 respectively. Suppose the time window is 3 months and average demands are 30 and 50 respectively. We are using this model to answer the following questions illustrating concepts and decisions specific to the lifetime buy problem: a) Value of an LTB part. What are the (marginal) values of the LTB parts under consideration, considering that the runset is independent in the bill of materials (that is there are no other interactions with products and parts in the BOM)? Answer: wi = 25, w3=75, w2 = w4 = W5 = 0. b) ERM < M < N. What are the equal runout mix, maximal profit that can be obtained with the LTB parts on hand and infinite overbooking product mix corresponding to the side constraints (1) and (2)? Answer: Infinite overbooking mix means producing all products for three months respectively, as if we would have enough of all LTB parts on hand: N = 3*(30*100 + 50*50) = 16500. M = 6250, where xA = 50 and xB = 25 is the solution of the linear program: Max(100x + 50y) Such that: 10<xA<50 28 0 < xB < 75 xA+2 xB < 100 xB < 50 xA, xB > 0. ERM = 2750, for xA = 15 and xB = 25. Is the solution of the linear program: Min | x/30 - y/50 | Subject to the same constraints as above, where we applied the linearization for the absolute value as follows: Min ( z + t ) Such that z -1 = x/30 - y/50 and z, t > 0. c) Manual Allocation. If we suppose demand is known and equal to the average, and we force 50 LTB2 to be used in the first product, what is the maximum profit that can be obtained? Answer: The solution is M = 6250, with xA = 50 and xB = 25. For the same linear program, with xA ^ 50. d) Overbooking of L T B parts in B. If we suppose demand known and equal to the average values, what is the maximum profit that can be obtained if we overbook LTB 2 up to 200 parts? Answer: Overbooking means we treat the problem as if we have 200 LTB2 on hand, with same constraints for the other LTB parts. The solution is then M = 8750, xA = 50 and xB = 75. e) Determine the optimal customer service value, that is the maximum of the objective « ™ ^ w A b J - a i J x i ) function: Max > —-— . J QJ Answer: The optimal value is 1500, for xA = 25 and xB = 0. f) Maximize profit for a given level of equal runout and customer service level. Maximize profit if deviation from equal runout is zero, and the customer service value is 80% (that is the objective function value is 1200). g) Minimize deviation from equal runout for a given level of profit, customer service level. Minimize deviation from equal runout if profit is $5000 and customer service level is 0.8. h) Maximize customer service level for given levels of profit, deviation from equal runout and value of L T B . The results from the Excel solver are presented in the following table: 29 Table 3. Profit Equal runout Customer service x A x B Max = 1833.3 0 0.8 10 16.6 g) 5000 Min = 1.33 0.8 45.63 8.75 h) 5000 0 Max = 0.61 38.46 23.07 30 3.2 Multiperiod Linear LTBOM A multiperiod model has the following advantages: Time-phasing can be applied within the optimization process, therefore obtaining an optimal solution according to each discount rate chosen by the user, for runsets of reasonable size; - The equal runout objective has a more precise definition and it is not a mere estimation as in the case of the one period model (in which we approximated demand in each period with the average demand). The idea behind expressing the equal runout objective is to weigh the quantities produced in each period with heavier and heavier weights in subsequent periods, in order to insure that no immediate demand for a product is bypassed in favor of future demand for any other product, and that no LTB parts are saved for the future; - Inventory holding costs can be expressed accurately for each period left up to the horizon. A multiperiod model can have the following drawbacks: The number of periods, variables and equations can make the problem become huge for large or multisite, multilevel runsets, and increase the run time for the GAMS code; - The overbooking decision is not time-phased, therefore, a time-phased model is not necessary for the problem of constraint violations for LTB parts. The constraints of the multiperiod model are the side constraints for each period: lower bounds (which can be given by booked demand), upper bounds (which can be given by forecasts or capacity constraints) for each period, and one-bucket LTB availability constraints. The multi-period linear "absolute" maximum profit mix can be discontinuous in time, for products that have no booked demand. For example, it can happen that higher demand in the future is preferred to lower demand closer to the present for certain products. If the user prefers a continuous maximum profit mix (that is a mix in which immediate demand for a product is preferred to future demand for that product), a relaxation of the binary formulation described in the next section would ensure continuity of the maximum profit mix. The user could choose between the two product mixes, continuous or discontinuous, according to his demand satisfaction preferences. If demand is constant or decreasing over longer periods of time for the whole runset (family), the "absolute" profit maximization mix will be continuous. Families of newer products (with increasing over time and/or unknown patterns of demand) can be expected to pose continuity problems in the maximum profit mix. Remark that a feasible solution for the multiperiod problem results in a feasible solution for the one-period problem. Therefore, the profit for a multiperiod non-discounted model is less than the one-period profit. 31 Discounting accounts for uncertainty of demand as future periods contribute less to the profit than current periods. For each discounting scheme we get a different expression of the maximum profit objective, therefore a different maximum profit mix. The formulation corresponding to the multiperiod model with tradeoffs between the objectives: Profit, Equal runout and number of overbooked LTB parts is as follows: Y(it) = quantity of product i to be sold in period t U(it) = Upper bound on quantity of product i to be produced in period i, can be an upper bound on demand or a production capacity constraint. L(it) = lower bound, can be defined by the user in the interface and can be zero or a lower bound on demand. A(ij) = quantity of LTB j per product i. b(j) = quantity of LTB j on hand. Constraints: Lit<Yit<Uit The objective functions in the multiperiod case are the following: Maximizing PROFIT objective: Max y—-—p(it)Y(it) V ( l + a)' where a is a discount factor and p(it) is the profit per unit of product i in period t. CLOSENESS TO RUNOUT objective has the following expression: Max £ t f ( f l ) 2 r / ( l - 2 ) y ( , 2 ) + 2E/(fl)2l/(i2)2t/0"3) r ( , 3 ) + '" / i i i i Note that the closeness from equal runout objective in the multiperiod case has a different expression than the deviation from equal runout objective from the one period case. This ensures that no LTB parts go to a product built in subsequent period, unless all products are built up to max levels in preceding periods, that is production in immediate periods is always preferred to future periods and no LTB parts are reserved for future production. NUMBER OF PARTS OVERBOOKED objective function is built as follows: Suppose the user can define the relative difficulty of procurement for every part, that is LTB2 is twice as difficult to procure as LTB 1: Min CLA%)Y{it)-q{jx)Y +2(^A(ij2)Y(it)-qU2)r + i i The user will be able to fix a level in the interface for two of these objectives and solve optimally for the third objective. Observe that the number of parts overbooked objective function gives information on overbookings without the use of binary variables. 32 3.3 Binary LTBOM The problem can be formulated using binary variables, by putting the quantity to be sold equal to a binary variable times demand for the product. A MIP (mixed integer program) is useful: In modeling the overbooking decision, as number of constraint violations which can be modeled only by binary variables; In modeling a profit maximization objective in which for each product, immediate demand is preferred to future demand and all demand, if any, is satisfied in each period, as in Figure 7 (that is, we do not allow partial satisfaction of demand). The number of overbookings objective is expressed with the aid of binary variables and can be tradeoff with profit and equal runout: X(j) = binary variable for overbooking of LTB j, and is equal to 1 if LTB j is overbooked and 0 otherwise. Constraints are given by: (VC)X(j) < (ZA(i/)x,-b(j)T < CX(j) i Minimize the NUMBER OF OVERBOOKINGS objective function: m i n ^ O ) j Another formulation suggested is a MIP formulation in which we trade profit with equal runout but there are constraints on the number of overbookings in a product. The additional constraints are of the following form, allowing for example only 5 overbookings per product: X(ij) is overbooking of j in product i is a binary variable and consider the inequality: (1/C)X Z07)<(X^07K-^(7))+<CX X{ij) i i i X*(i/)<5 An example of MIP formulation is the following: the user will be able to fix interactively levels for profit and equal runout and minimize the number of overbookings. 33 Figure 11. Time Products Multiperiod Linear Product Mixes: • Equal runout mix E R M • Maximum profit mix (binary) P • Infinite overbooking mix N In Figure 11, each filled little box represents demand in one period that has been satisfied completely. The horizontal axis represents the products, while time in discrete periods are represented on the vertical axis. The area of a little box is demand per period and can vary from period to period. Note that demand in close periods is satisfied sooner that demand in later periods for the equal runout mix. For the maximum profit mix, there can be gaps in the product mix, that is demand in later periods can be preferred to immediate demand. Note that the MIP solver of GAMS is not available at Agilent, therefore although the binary variables are an efficient way of modeling the number of overbookings, MIPs cannot be run. 34 The preferred alternative is to run a linear program with the objective function the value of overbookings, as described in 3.1. 35 3.4 Other useful outputs of the LTB tool There are other pieces of information that might be useful for the user and that are not direct results of the GAMS optimization. They can be built inserted in the tool and obtained in a postprocessing step. - For every product mix that is the result of an optimization process, the tool should provide the runout time of the products, as well as the runout time of each LTB part. Given a set of constraint violations and the maximum profit M that can be achieved as a result of these constraint violations, we can estimate the LTB investment that can be undertaken. The maximum amount that one would invest in order to redesign or procure LTB parts in order to achieve the profit level M must be less than the increase in profit that is achieved due to the violation of constraints (or a user defined percentage of that increase in profit). Consider Ml the maximum profit that can be achieved with the LTBs on hand. Then: LTB Investment < M - Ml 36 3.5 Manual allocations and overbookings The tool will have the capability to allow the user to allocate an existent on hand LTB part or overbook LTB parts that have run out to a product as desired, up to a fixed quantity. The tool will then allocate the remaining LTB parts optimally. When performing manual allocations and overbookings, the user will have in the interface the following information regarding the products and the LTB parts concerned: 1) Simple allocation of L T B parts. a,j = quantity of LTB j per product i qj = quantity of LTB j on hand Xj = quantity of product i Pi = profit per unit of product i Consider the following linear program P: max YjPixi (1) 2) One overbooking, simply allocate the other LTBs. In product k, overbook LTB 1 up to quantity Q k i (a given quantity). Denote by qw the quantity of LTB 1 on hand in product k. Then xk = Qki / &k\ is the quantity of product k that would be produced, if the overbooking would work. Constraints: Reallocate the other LTB parts in k (other than 1), by stealing them from the other products: Z a u x i - aj - akjxk > V/ e P(*)» j * 1 (2) where p(k) denotes the set of LTB parts in product k. The LTB parts that are not in k are not affected by the overbooking and satisfy the same constraint as in (1): JX*, <<?,., Vy (3) i*k As for LTB 1, use the quantity on hand in product k and allocate the rest to the other products (LTB 1 is also not affected by the overbooking): i*k Where qki is the quantity of LTB 1 used in product k. 3 ) One forced allocation, simply allocate the other L T B parts. Forced allocation = force an LTB part in a product up to a known level beyond its current supply, and take it from the other products. Take up to Q k i of LTB 1 from other products in order to give to product k. A quantity of Xk = Qki / aki is actually produced. 37 Constraints: Reallocate the other LTB parts in k among the other products, after taking enough to produce Xk. The constraint is similar to (2), only now it is also satisfied for j = 1: The LTBs not used in k are not affected by the allocation and will satisfy the same constraint as (3). The user can also overbook or/and allocate several parts at the same time, and have the tool solve the allocation in a single instance, by combining (2) and (3). In conclusion, overbooking means allocating the other parts to the product as if it continues to be built, although an LTB part has ran out in it and we do not take that part form other products. Allocation means that we take the LTB part that has run out in the product in consideration, from other products in order to produce more of the product. 38 IV. CONCLUSION AND RECOMMENDATION The above results suggest various mathematical models for the lifetime buy decision. Given the real conditions of implementation (size of the problem, number of life time buy materials, multisite analysis), the recommended solution is the one period model. This model would provide satisfaction of demand at maximum levels in each period and in this way would avoid the post-processing step of allocation after the GAMS solution has been obtained. The one period model will provide tradeoffs between the following objective functions, in the case we are making decisions for the LTB parts already on hand: - maximizing profit; minimizing deviation from equal runout; - maximizing customer service level. The one period model will provide the following tradeoffs if we allow overbookings (that is, violations of constraints): - maximizing profit; - minimizing deviation from equal runout; minimizing value of overbooked parts. The user will be able to focus his analysis on one month, 3 months, 6 months, one year, 18 months, 3, 5 and 10 years time windows. The LTB tool will assist planners and higher management with the following decisions: Insurance of supply of LTB parts and optimal distribution of LTB parts on hand, when faced with unavoidable shortages. Recommended or planned discontinuances of products and/or options, for a large time window (18 months, 3 year, 5 year or 10 year perspective). What parts to overbook and in what quantities, in order to maximize profit, minimize deviation from equal runout, or minimize the value of overbooked parts. - How large should the LTB investment be, when comparing the profit that can be realized with the LTB parts on hand with the profit that could be realized by overbooking LTB parts. Heuristics can be implemented for the overbooking of LTB parts as follows: value of overbookings in each product cannot exceed a given constant; - value of overbookings for an LTB part cannot exceed a given constant. 39 References • Bazaraa, Moktar, Jarvis, John J., Sherali, Hanif D., Linear Programming and Network Flows, New York, Wiley 990, 2nd edition. • Eppen, Gary D. and Iyer, Ananth. V., Improved fashion buying with Bayesian updates, Operations research, Vol.45, No.6, pp.805-819. • Gallego, Guillermo and Moon, Ilkyeong, The distribution Free Newsboy problem: Review and Extensions, J. Opl. Res. Soc. Vol. 44, No.8, pp.825-834. • Gass, Saul, Linear Programming: Methods and Applications, 5th edition, New York McGrawHill, 1985. • Hillier, Frederick S., Liebermann, Gerald J., Introduction to Operation Research, 6th edition, New York, McGraw Hill 1995. • Ignizio, James P., Linear Programming in single and multiple objective systems, Englewood Cliffs New York, Prentice Hall 1982. • Optimization, edited by G.L. Nemhauser, A. H. G. Rinnooy, Kan, M.J. Todd, Amsterdam, New York, North-Holland, Elsevier Science Publishing Company 1989. • Peterson, Rein, Silver, Edward, Decision Systems for Inventory Management and Production Planning, John Wiley and Sons, 1985. 40 APPENDIX. $TITLE LTBSOLVE(02.08.2000) SONTEXT LTBOM INPUT tpItemBOM, reduced BOM tdltemDetail details for all items in the BOM tpItemOption options and first predecessor that is either another option or an end product tpItemCanBuy items that can be purchased tpItemCanSell items which are in the MPS tpItemCanMake items which can be manufactured tpItemOptionDemand demand for options as percentages of demand for configurations tpItemReqLTB requirements for support exploded down at LTB level as forecasted by SMO tpItemConfiguration option and parents available for item configuration tpItemCannibalization tpItemDemand demand for this configuration at the stated price tier forecasted in the MPS tpItemLTBInventory LTB inventory data tpItemCBOM quantity per of LTBs or raw materials in end products and options OUTPUT trSummary iteration summary trltemBuy items that can be purchased trltemSell items that can be sold trltemSupport summary of support quantities sent to the SMO trltemMake items that can be made trObjSummary iteration objective summary trProblem problem summary file trSellOptions product options that are sold in item configurations at price tiers trLTBInventory LTB inventory summary SOFFTEXT SOFFSYMXREF OPTION LIMROW = 0000; OPTION LIMCOL = 0; OPTION SOLPRINT = OFF; OPTION LP = CPLEX; OPTION RESLIM = 20000; OPTION ITERLIM = 50000; SET ITEM items related to CANSELL items through BOM 44 SIMPORT SET ITEM*(item,child,parent,optio^ ltb,bridge_buy) ALIAS (ITEM,P ARENT); ALIAS (ITEM, CHILD); ALIAS(ITEM,OPTION); ALIAS(ITEM,OPT); ALIAS(ITEM,OLD); ALIAS(ITEM,NEW); ALIAS(ITEM,GLTB); ALIAS (ITEM,PLTB); ALIAS(ITEM,BB); SET TIER product pricing tiers SIMPORT SET TIER*(tier) SET CONFIG product configuration number $IMPORT SET CONFIG*(config) SET CLASS mutually exclusive classes SIMPORT SET CLASS*(option_class) SET CANBUY(ITEM) items which can be procured SIMPORT TABLE tpItemCanBuy(item) SET CANMAKE(ITEM) items which can be made SIMPORT TABLE tpItemCanMake(item) SET CANSELL(ITEM) items that have MPS SIMPORT TABLE tpItemCanSell(item,average_demand) PARAMETER CANSELL1 (ITEM) parameter alias of CANSELL; CANSELL1 (CANSELL)=1; SET MUTEXCLASS(ITEM,CONFIG,PARENT,OPT,CLASS) mapping of options to classes SIMPORT TABLE tpItemConfiguration(item,config,option_parent,option,option_class,=) PARAMETER BOM(PARENT,CHILD) units of CHILD per unit of PARENT SIMPORT TABLE tpItemBOM(parent,child,qty) PARAMETER CBOM(PARENT,CHILD) units of CHILD per unit of PARENT in compressed BOM SIMPORT TABLE tpItemCBOM(parent,child,qty) 45 PARAMETER OPTIONBOM(PARENT,CHILD) CANSELL item optionBOM SIMPORT TABLE tpItemOption(item,option,qty) PARAMETER CANNIBAL(OLD,CONFIG,TIER,NEW) rate OLD cannibalizes NEW at TIER SIMPORT TABLE tpItemCannibalization(old_item,config,tier,new_item,rate) *Item properties PARAMETER LTB ST ATUS(ITEM) LTB status SIMPORT TABLE tpItemLTBInventory(item,status) SET GLTB genuine LTBs; GLTB(ITEM)=YES$(LTBSTATUS(ITEM) EQ 1); SET PLTB potential LTBs; PLTB(ITEM)=YES$(LTBSTATUS(ITEM) EQ 2); SET BB bridge buys; BB(ITEM)=YES$(LTBSTATUS(ITEM) EQ 3); PARAMETER UNIQUENESS (ITEM) unique items SIMPORT TABLE tpItemDetail(item,unique) PARAMETER EXCESS(ITEM) excess inventory qty of LTB items SIMPORT TABLE tpItemLTBInventory(item,excess_inv) PARAMETER SHARED(ITEM) additional inventory to reallocate SIMPORT TABLE tpItemLTBInventory(item,shared_inv) SHARED(ITEM)$(SHARED(ITEM) EQ 0 AND SH ARED(ITEM))=0; PARAMETER SUNKCOST(ITEM) value per unit of excess item SIMPORT TABLE tpItemLTBInventory(item, excess_value) PARAMETER MAKECOST(ITEM) variable assembly cost per unit of item SIMPORT TABLE tpItemDetail(item, assemblyvalue) PARAMETER PRICE(ITEM) procurement cost per unit for CANBUY item SIMPORT TABLE tpItemDetail(item,purchase_value) PRICE(CANBUY)=PRICE(CANBUY)+0.0001 PARAMETER MATCOST(ITEM) accumulated material cost of CANMAKE items SIMPORT TABLE tdItemDetail(item,accum_material_cost) PARAMETER MAXLTB(ITEM) max qty available for purchase if item is BB or PLTB,input by the user 46 SIMPORT TABLE tpIternLTBInventory(item,maxqty) PARAMETER LTBQTY(ITEM) qty onhand plus on order of LTB ITEM SIMPORT TABLE tpItemLTBInventory(item,qty) PARAMETER DEMAND(ITEM,CONFIG,TIER) extra units of ITEM in CONFIG sellable at TIER SIMPORT TABLE tpItemDemand(item,config,tier,demand) PARAMETER REVENUE(ITEM,CONFIG,TIER) revenue for ITEM in CONFIG sales at TIER SIMPORT TABLE tpItemDemand(item,config,tier,revenue) PARAMETER REQ(ITEM) total requirements for LTB item exploded down, as a result of SMO forecasting SIMPORT TABLE tpItemReqLTB(item,LTBstatus,total_requirements) PARAMETER SUPPREV(ITEM) revenue for which itemLTB can be sold to the Support Material Organization SIMPORT TABLE tpItemReqLTB(item,support_revenue) SCALAR TOTSUPPVAL total support value of independent requirements TOTSUPPVAL=SUM(ITEM,SUPPREV(ITEM)*REQ(ITEM)) PARAMETER LOWERPER(ITEM,CONFIG,TIER,PARENT,OPT) minimum percent of option sales SIMPORT TABLE tpItemOptionDemand(item,config,tier,option_parent,option,lower) PARAMETER UPPERPER(ITEM,CONFIG,TIER,PARENT,OPT) maximum percent of option sales SIMPORT TABLE tpItemOptionDemand(item,config,tier,option_parent,option,upper) PARAMETER REVENUEOPT(ITEM,CONFIG,TIER,PARENT,OPT) incremental revenue with option with respect to revenue in base product SIMPORT TABLE tpItemOptionDemand(item,config,tier,option_parent,option,revenue_delta) *Derived sets SET RAWMAT(ITEM) raw materials; RAWMAT(ITEM)$SUM(CHILD$BOM(ITEM,CHILD),l) EQ 0)=YES; SET CANCONSUME(ITEM) planned items which can be consumed; CANCONSU^E(ITEM)$SUM(OLD,SUM(CONFIG,SUM(TIER$CANNIBAL(OLD,C ONFIG,TIER,ITEM), 1 )))=YES; 47 SET CANOPT(ITEM) items which are valid options; CANOPT(ITEM)$SUM(PARENT$OPTIONBOM(PARENT,ITEM),l)=YES; PARAMETER CANOPTl(ITEM) parameter alias of CANOPT; CANOPTl(CANOPT)=l; SET PAROPT(ITEM) items which are options or end items; PAROPT(CANSELL)=YES; PAROPT(CANOPT)=YES; ALIAS(PAROPT,P AROPT1); SET NULLSET(CLASS) set consisting of null string; NULLSET('null')=YES; LOOP(CANSELL,LOOP(CONFIG,LOOP(TIER,LOOP(PAROPT,LOOP(CANOPT$UP PERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT), IF (LOWERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT) GT UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT), LOWERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)=UPPERPER(CANSELL, CONFIG,TIER,PAROPT,CANOPT); ); ))))); * Solution Parameters SCALAR SCENARIO scenario identification number $IMPORT VALUE tpControlSolve scenarioid SCALAR OBJECTIVE objective identification number SIMPORT VALUE tpControlSolve objective_id SCALAR LEVEL starting iteration level SIMPORT VALUE tpControlSolve level SCALAR LEVELB backup starting iteration level SIMPORT VALUE tpControlSolve level SCALAR DELTA level increment for each iteration SIMPORT VALUE tpControlSolve level_delta SCALAR ITERATIONS number of iterations of level SIMPORT VALUE tpControlSolve iterations IF (ITERATIONS GT 20, ITERATIONS=20; ); 48 SCALAR PERCENT level and delta calculated as percent of maxvalue SIMPORT VALUE tpControlSolve level_is_percent PERCENT$(PERCENT EQ 0 AND PERCENT)=0; IF (PERCENT, IF (LEVEL+DELTA* ITERATIONS GT 1, DELT A=( 1 -LEVEL)/ITERATIONS; ); ); SCALAR REDISTRIBT ensure that inventory is used only for builds SIMPORT VALUE tpControlSolve redistribute REDISTRIBT$(REDISTRIBT EQ 0 AND REDISTRIBT)=0; SCALAR MAXBOPT allow full built of the option SIMPORT VALUE tpControlSolve maxbuildoption MAXBOPT$(MAXBOPT EQ 0 AND MAXBOPT)=0; SET OPTIONBASE(PARENT,CHILD) immediate option for option child; OPTIONBASE(PARENT,CHILD)$BOM(PARENT,CHILD)=YES$(BOM(PARENT,C HILD) EQ 0 AND OPTIONBOM(PARENT,CHILD)); SET IT maximum number of loop iterations 11*201; SCALAR STOREOBJ scalar to store objective function number; SCALAR GROUPID product group id submit demand SIMPORT VALUE tpControlSolve product_group_id GROUPID$(GROUPID EQ 0 AND GROUPID)=0; SCALAR MAXVALUE maximum value of independent variable; SCALAR MAXLEVEL maximum user value of independent variable; SCALAR PLEVEL LEVEL as a percentof MAXVALUE; SCALAR PDELTA DELTA as a percent of MAXVALUE; SCALAR TOTALSUNK total sunk value of excess inventory; TOTALSUNK=0; SCALAR UNIQSUNK total sunk value of unique excess inventory; UNIQSUNK^O; *Calculate maximum option demand MATCOST(GLTB)=l 000000; PARAMETER MAXOPT(ITEM,CONFIG,TIER,OPT) maximum demand for option OPT in units; PARAMETER MAXOPTREV(ITEM,CONFIG,TIER,OPT) maximum demand for option OPT in dollars; 49 MAX0PT(CANSELL,C0NFIG,TIER,CAN0PT)$(1$(SUM(PAR0PT,UPPERPER(CA NSELL,CONFIG,TIER,PAROT,CANOPT)) NE 0)+1$(SUM(PAROPT,UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT))$M AXB0PT))=1; MAXOPTREV(CANSELL,CONFIG,TIER,CANOPT)$MAXOPT(CANSELL,CONFIG, TIER,CAN0PT)=1; PARAMETER SUPPWEIGHT(ITEM) support weight given by the user: max for GLTBs, medium for PLTBs and min for BBs SIMPORT TABLE tpItemWeight(item,weight) PARAMETER AVEDEMND(ITEM) average demand per period for item SIMPORT TABLE tpItemCanSell(item,average_demand) SIMPORT TABLE tpItemCanSell(item,average_demand) *LINEAR PROGRAMMING MODEL FOR LTB USE OPTIMIZATION •OBJECTIVES *1) Maximize Profit given deviation from equal runout; print spend; *2) Minimize equal runout goal given profit level; print spend *3) Maximize profit given value of customer service level; print spend *4) Maximize value of customer service level given level of profit;print spend *5) Minimize equal runout goal given level of customer service level; print spend *6) Maximize level of customer service given level of equal runout objective; print spend *7) Maximize Profit given Spending; print ROI *8) Minimize Spending given Profit; print ROI *9) Maximize Customer service level given Spending; print ROI *10) Minimize Spending given customer service level; print ROI *11) Minimize equal runout objective given Spend (keep as many products as possible going with a given level of spend); print ROI *12) Minimize Spend given level of equal runout objective; print ROI *13) Maximize Profit to ROI level; print Spend *14) Minimize Equal Runout given ROI level; print Spend *15) Maximize customer service level given ROI level; print Spend SCALAR BUDGET budget level for objectives with fixed budget SIMPORT VALUE tpControlSolve budget SCALAR UNIQUEB budget constraint for unique parts only; use budget only for unique parts SIMPORT VALUE tpControlSolve unique_budget UNIQUEBS (UNIQUEB EQ 0 AND UNIQUEB)=0; SCALAR PROCURE budget constraint for procurement cost; use budget only for procurement 50 SIMPORT VALUE tpControlSolve procurement PROCURES (PROCURE EQ 0 AND PROCURE)=0; SCALAR ASSEMBLY budget constraint for assembly cost; use budget only for assembly SIMPORT VALUE tpControlSolve assembly ASSEMBLYS (ASSEMBLY EQ 0 AND ASSEMBLY)=0; *SCALAR SUPPPER initial support level 101 Percentage of total support, measure of customer service level predefined by the user; Can be defined as the minimum service level admitted by the user in order to establish LTB quantity; SCALAR PROFIT scalar for constant level of profit 101; SCALAR ERUNOUT scalar for constant level of equal runout objective 101; SCALAR SUPPT scalar for constant level of support 101; VARIABLES SOLDOPT(ITEM,CONFIG,TIER,PARENT,OPT) units of configuration sold at tier SOLDOPTP(ITEM,CONFIG,TIER,OPT) units of option OPT sold SOLD(ITEM,CONFIG,TIER) units of product sold at tier SUPPORT(ITEM) units of LTB item given to support SHARE(ITEM) units of item reallocated MAKE(ITEM) units of item made SELL(ITEM) units of item sold SUPPVAR variable for support value BUY(ITEM) units of item bought PROFITVAR variable revenue minus cost EROVAR variable equal runout objective function BUDGETVAR variable for spending budget SLACK MARGIN marginal costs for ROI calculations POSITIVE VARIABLE BUY; POSITIVE VARIABLE SOLD; POSITIVE VARIABLE SELL; POSITIVE VARIABLE MAKE; POSITIVE VARIABLE SHARE; POSITIVE VARIABLE SLACK; POSITIVE VARIABLE SOLDOPT; POSITIVE VARIABLE SOLDOPTP; POSITIVE VARIABLE SUPPORT; SOLD.UP (CANSELL,CONFIG,TIER)=DEMAND(CANSELL,CONFIG,TIER); SHARE.UP(ITEM)$SHARED(ITEM)=SHARED(ITEM); SUPPORT.UP(ITEM)$GLTB(ITEM)=LTBQTY(ITEM); 51 EQUATIONS DOLLARS Maximizes variable revenue minus cost SUPPVALUE Maximizes variable support value ROISTOP Objective to stop at given level of ROI SPENDING spending budget constraint PROFTLEVEL Minimum profit level SUPPLEVEL Minimum support level CONSUME(ITEM) Demand cannibalization balance B ALANCE(ITEM) Inventory balance equations for items TOTALSOLD(ITEM) Demand per price tier balance constraint GLTBQTY(ITEM) LTB qty constraint for genuine LTBs SOLDBYPAR(ITEM,CONFIG,TIER,OPT) Total of OPT sold in ITEM CONFIG TIER LOWERDEMND(ITEM,CONFIG,TIER,PARENT,OPT) Lower demand bound on OPT sales for PARENT ITEM CONFIG TIER PLTBQTY(ITEM) LTB qty constraint for potential LTBs BBQTY(ITEM) LTB qty constraint for bridge buys UPPERDEMND(ITEM,CONFIG,TIER,PARENT,OPT) upper demand bound on OPT sales for PARENT ITEM CONFIG TIER EXCLUSIVE(ITEM,CONFIG,TIER,PARENT,CLASS) Constraints on sell qty of mutually exclusive class, that is sales of mutually exclusive options cannot exceed sales of base products EROVALUE Equal runout objective function value; ROISTOP$() .. MARGIN =E= PROFITVAR$()+SUPPVAR$()-ROI*BUDGETVAR; SPENDLNGS () .. BUDGETS () +BUDGETVAR$ () =E= (SUM(CANBUY$UNIQUE(CANBUY), PWCE(CANBUY)*BUY(CANBUY))$(PROCURE)+ SUM(CANMAKE$UMQUE(CANMAI^),MATCOST(CANMAK£)*MAKE(CANMA KE))$(PROCURE$ASSEMBLY)+ SUM(CANMAI^$UMQUE(CANMAKE),MAJG5COST(CANMAKE)*MAKE(CANM AKE))$(ASSEMBLY$UNIQUEB) +(SUM(CANBUY,PWCE(CANBUY)*BUY(CANBUY))$PROCURE+ +SUM(CANMAKE,MATCOST(CANMAKE)*MAKE(CANMAKE))$(PROCURE$AS SEMBLY) +SUM(CAmiAKE,MAKECOST(CANMAKE)*MAKE(CANMAKE))$ASSEMBLY$( 1-UNIQUEB); DOLLARS$().. PROFIT$()+SLACK$()+PROFITVAR$() =E= SUM(CANSELL,SUM(CONFIG,SUM(TIER,REVENUE(CANSELL,CONFIG,TIER)* SOLD(CANSELL,CONFIG,TIER))))+SUM(CANSELL,SUM(CONFIG,SUM(TIER,SU M(PAROPT,SUM(CANOPT$( 1 $(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CA NOPT) NE 0)+1$(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$MAXBOPT)),REV ENUEOPT(CANSELL,CONFIG,TIER,PAROPT,CANOPT)*SOLDOPT(CANSELL,CO 52 NFIG,TIER,PAROPT,CANOPT))))))+SUM(ITEM,SW^ M))-SUM(ITEM$SHArlED(ITEM),SHAPvE(ITEM)*SUPPREV(ITEM SUM(CANBUY,BUY(CANBUY)*^ SUM(CANMAKE,MAKE(CANMAKE)*MAKECOST(CANMAKE))-SUM(CANMAKJi,MAJ^(CANMAXE)*MATCOST(CANMAI^))$ASS SUPPVALUE$() .. SUPPT$()+SLACK$()+SUPPVAR$() =E= SUM(ITEM,(REQ(ITEM)-SUM(PAROPT, SELL(PAROPT)$CBOM(PAROPT,ITEM)))*SUPPREV(ITEM) SCALAR TTLSUPP total support value required by SMO TTLSUPP-SUM(ITEM,MAXLTB(ITEM)*SUPPREV(ITEM)); SCALAR CUSTOMSERV customer service level, defined as quotient support provided/total requirements CUSTOMSERV=(SUPPT$0+SLACK$()+SUPPVAR$())/TTLSUPP; EROVALUE$() .. ERUNOUT$()+SLACK$()+EROVAR$() =E= SUM(ITEM,SUM(PAROPT$CBOM(PAROPT,ITEM),SUM(PAROPT 1 $CBOM(PARO PT1, ITEM),ABS(SELL(PAROPT)/AVEDEMND(PAROPT)-SELL(P AROPT1 )/AVEDEMND(P AROPT1))))); •CONSTRAINTS BALANCE(ITEM) .. EXCESS(ITEM)+SHARE(ITEM)$SHARED(ITEM) =E= -BUY(ITEM)$CANBUY(ITEM)-MAKE(ITEM)$CANMAKE(ITEM)+SUM(PARENT,CBOM(PARENT,ITEM)*MAKE( PARENT))+SELL(ITEM)$CANSELL(ITEM)+SELL(ITEM)$CANOPT(ITEM)+SUPP ORT(ITEM)$(NOT CANOPT(ITEM)); EXCLUSIVE(CANSELL,CONFIG,TIER,PAROPT,CLASS)$((l$(SUM(CANOPT,UPP ERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)) NE 0)+1$(SUM(CANOPT,UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT))$ MAXBOPT))$(NOT NULLSET(CLASS))) .. SUM(C ANOPT$(( 1 $UPPERPER(C ANSELL,CONFIG,TIER,P AROPT,C ANOPT) NE 0)+1$(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$MAXBOPT))$MU TEXCLASS(CANSELL,CONFIG,PAROPT,CANOPT,CLASS)),SOLDOPT(CANSELL ,CONFIG,TIER,PAROPT,CANOPT)/OPTIONBOM(PAROPT,CANOPT)) =L= SOLDOPTP(CANSELL,CONFIG,TIER,PAROPT)$CANOPT(PAROPT)+ SOLD(PAROPT,CONFIG,TIER)CANSELLl(P AROPT); LOWERDEMND(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$ LOWERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT) NE 0) .. SOLDOPT(CANSELL,CONFIG,TIER,PAROPT,CANOPT) =G= 53 S0LD(PAR0PT,C0NFIG,TIER)$CANSELL1(PAR0PT)*0PTI0NB0M(PAR0PT,CA NOPT)* LOWERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)+ SOLDOPTP(CANSELL,CONFIG,TIER,PAROPT)$CANOPTl(PAROPT)*OPTIONBO M(PAROPT,CANOPT) *LOWERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT); SOLDBYPAR(CANSELL,CONFIG,TIER,CANOPT)$ (1 $(SUM(PAROPT,UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)) NE 0)+ l$(SUM(PAROPT,UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT))$MAX BOPT)) .. SOLDOPTP(CANSELL,CONFIG,TIER,CANOPT) =E= SUM(PAROPT$ (l$(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT) NE 0)+ l$(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$MAXBOPT)), SOLDOPT(CANSELL,CONFIG,TIER,PAROPT,CANOPT)); UPPERDEMND(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$ (l$(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT) NE 0)+ 1 $((UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$MAXBOPT)) .. SOLDOPT(CANSELL,CONFIG,TIER,PAROPT,CANOPT)=L= SOLD(PAROPT,CONFIG,TIER)$CANSELLl(PAROPT)*OPTIONBOM(PAROPT,CA NOPT) *(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$(NOT MAXBOPT)+l $MAXBOPT)+ SOLDOPTP(CANSELL,CONFIG,TIER,PAROPT)$CANOPTl(PAROPT)*OPTIONBO M(PAROPT,CANOPT) *(UPPERPER(CANSELL,CONFIG,TIER,PAROPT,CANOPT)$(NOT MAXBOPT)+l $MAXBOPT); TOTALSOLD(PAROPT) .. SELL(PAROPT) =E= (SUM(CONFIG,SUM(TIER,SOLD(PAROPT,CONFIG,TIER))))$CANSELL(PAROPT) + (SUM(CANSELL,SUM(CONFK},SUM(Tffi^ ELL,CONFIG,TIER,PAROPTl ,PAROPT))$MAXBOPT+l $(SUM(PAROPTl ,UPPERP ER(CANSELL,CONFIG,TIER,P AROPT1 ,P AROPT)) NE 0)),SOLDOPTP(CANSELL,CONFIG,TIER,PAROPT)))))$CANOPT(PAROPT); CONSUME(CANCONSUME).. SUM(CONFIG,SUM(TIER,SOLD(CANCONSUME,CONFIG,TIER)))=L= SUM(CONFIG,SUM(TIER,DEMAND(CANCONSUME,CONFIG,TIER))) SUM(CANSELL,SUM(CONFIG,SUM(TIER,CANNIBAL(CANSELL,CONFIG,TIER, CANCONSUME)* SOLD(CANSELL,CONFIG,TIER)))); 54 GLTB QTY(ITEM) .. SUM(PARENT$CBOM(PARENTJTEM),CBOM(PARENTJTEM)*SELL(P +SUPPPER(ITEM)*SUPPORT(ITEM)) =L= M AXLTB(ITEM)$ GLTB (ITEM); PLTBQTY(ITEM).. SUM(PARENT$CBOM(PARENT,ITEM),CBOM(PARENT,ITEM)*SELL(PARENT)) +SUPPPER(ITEM)*SUPPORT(ITEM)) =L= LTBQTY(ITEM)$MAXLTB(ITEM) BBQTY(ITEM) .. SUM(PARENT$CBOM(PARENT,ITEM),CBOM(PARENT,ITEM)*SELLPARENT)) +SUPPPER(ITEM)*SUPPORT(ITEM)) =L= LTBQTY(ITEM)$MAXLTB(ITEM) MODEL LTB SOLVE / DOLLARS BALANCE CONSUME TOTALSOLD SOLDBYPAR EXCLUSIVE SUPPVALUE LOWERDEMND UPPERDEMND GLTBQTY(ITEM) PLTBQTY(ITEM) BBQTY(ITEM) /; SEXPORT TABLE trProblem(PROBFILE) SEXPORT TABLE trProbleml(PROBlFILE) SEXPORT TABLE trltemBuy(B GHTFILE) SEXPORT TABLE trltemSell(SELLFILE) SEXPORT TABLE trltemMake(MAKEFILE) SEXPORT TABLE trltemSupport(SUPPFILE) SEXPORT TABLE trSellProduct(DSELLFILE) SEXPORT TABLE trSellOptions(OSELLFILE) SEXPORT TABLE trSumrnary(SUMFILE) SEXPORT TABLE trObjSumrnary(OBJFILE) SEXPORT TABLE trLTB Summary(LTBFILE) •Display parameters OBJFILE.PC-3; OBJFILE.ND=2; OBJFILE.NR=0; OBJFILE.PW=255; PROBFILE.PC=3; PROBFILE.ND-2; PROBFILE.NR=0; PROBFILE.PW=250; BGHTFILE.PC=3; BGHTFILE.ND=2; BGHTFLLE.NR=0; BGHTFILE.PW=255; 55 SELLFILE.PC=3; SELLFILE.ND=2; SELLFILE.NR=0; SELLFILE.PW=255; MAKEFILE.PC=3; MAKEFILE.ND=2; MAKEFILE.NR=0; MAKEFILE.PW=255; DSELLFILE.PC=3; DSELLFILE.ND=2; DSELLFLLE.NR=0; DSELLFILE.PW=255; SUMFILE.PC=3; SUMFILE.ND=2; SUMFILE.NR=0; SUMFILE.PW=255; 0SELLFILE.PC=3; 0SELLFILE.ND=2; OSELLFILE.NR=0; OSELLFILE.PW=255; PR0B1FILE.PC=3; PR0B1FILE.ND=2; PROB1FILE.NR=0; PR0B1FILE.PW=255; SUPPFILE.PC-3; SUPPFILE.ND=2; SUPPFILE.NR=0; SUPPFILE.PW-255; LTBFILE.PC=3; LTBFILE.ND=2; LTBFILE.NR=0; LTBFILE.PW=225; *PRECOMPUTE VALID RANGES IF (OBJECTIVE EQ 7, OBJECTIVES 6; SOLVE LTB SOLVE USING LP MAXIMIZING PROFITVAR; PROFIT=(PROFITVAR.L-0.0001)$(PROFITVAR.L GT 0); OBJECTIVE=8; SOLVE LTBSOLVE USING LP MINIMIZING BUDGETVAR; MAXVALUE=(BUDGETVAR.L-0.0001)$(BUDGETVAR.L GT 0); OBJECTIVE=7; ELSE IF (OBJECTIVE EQ 8, OBJECTIVE=16; SOLVE LTBSOLVE USING LP MAXIMIZING PROFITVAR; MAXVALUE=(PROFITVAR.L-0.0001)$(PROFITVAR.L GT 0); OBJECTIVE=8; ELSE IF (OBJECTIVE EQ 13, OBJECTIVE=7; BUDGET=1; SOLVE LTBSOLVE USING LP MAXIMIZING PROFITVAR; MAXVALUE=-SPENDING.M; OBJECTIVE=13; ELSE IF (OBJECTIVE EQ 9, OBJECTIVES 7; SOLVE LTBSOLVE USING LP MAXIMIZING SUPPVAR; SUPPT=(SUPPVAR.L-0.0001)$(SUPPVAR.L GT 0); OBJECTIVES 0; SOLVE LTBSOLVE USING LP MINIMIZING BUDGETVAR; MAXVALUE=(BUDGETVAR.L-0.0001)$(BUDGETVAR.L GT 0); OBJECTIVE=9; ELSE IF (OBJECTIVE EQ 10, OBJECTIVES 7; SOLVE LTBSOLVE USING LP MAXIMIZING SUPPVAR; 56 MAXVALUE=(SUPPVAR.L-0.0001)$(SUPPVAR.L GT 0); OBJECTIVES; ELSE IF (OBJECTIVE EQ 15, OBJECTIVE=9; BUDGET=1; SOLVE LTB SOLVE USING LP MAXIMIZING SUPPVAR; MAXVALUE=-SPENDING.M; OBJECTIVE=15; ELSE IF (OBJECTIVE EQ 4, OBJECTIVE=7; SOLVE LTB SOLVE USING LP MAXIMIZING PROFITVAR; MAXVALUE=(PROFITVAR.L-0.0001)$(PROFITVAR.L GT 0); OBJECTIVE=4; ELSE IF (OBJECTIVE EQ 3, OBJECTIVE=9; SOLVE LTB SOLVE USING LP MAXIMIZING SUPPVAR; MAXVALUE=(SUPPVAR.L-0.0001)$(SUPPVAR.L GT 0); OBJECTIVE=3; ELSE IF (OBJECTIVE EQ 1, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MAXIMIZING PROFITVAR; PROFIT=(PROFITVAR.L-0.0001)$(PROFITVAR.L GT 0); OBJECTIVE=2; SOLVE LTBSOLVE USING LP MINIMIZING EROVAR; MAXVALUE=(EROVAR.L-0.0001)$(EROVAR.L GT 0); OBJECTIVES; ELSE IF (OBJECTIVE EQ 2, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MAXIMIZING PROFITVAR; MAXVALUE=(PROFITVAR.L-0.0001)$(PROFITVAR.L GT 0); OBJECTIVE=2; ELSE IF (OBJECTIVE EQ 6, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MAXIMIZING SUPPVAR; SUPPT=(SUPPVAR.L-0.0001)$(SUPPVAR.L GT 0); OBJECTIVES; SOLVE LTBSOLVE USING LP MINIMIZING EROVAR; MAXVALUE=(EROVAR.L-0.0001)$(EROVAR.L GT 0); OBJECTIVE=6; 57 ELSE IF (OBJECTIVE EQ 5, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MAXIMIZING SUPPVAR; MAXVALUE=(PROFITVAR.L-0.0001)$(SUPPVAR.L GT 0); OBJECTIVE=5; ELSE IF (OBJECTIVE EQ 11, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MINIMIZING EROVAR; ERUNOUT=(EROVAR.L-0.0001)$(EROVAR.L GT 0); OBJECTIVES 2; SOLVE LTBSOLVE USING LP MINIMIZING BUDGETVAR; MAXVALUE=(BUDGETVAR.L-0.0001)$(BUDGETVAR.L GT 0); OBJECTIVES 1; ELSE IF (OBJECTIVE EQ 12, OBJECTIVES 6; SOLVE LTBSOLVE USING LP MINIMIZING EROVAR; MAXVALUE=(EROVAR.L-0.0001)$(EROVAR.L GT 0); OBJECTIVES2; ELSE IF (OBJECTIVE EQ 14, OBJECTIVES 1; BUDGETS; SOLVE LTBSOLVE USING LP MINIMIZING EROVAR; MAXVAJLUE—SPENDING.M; OBJECTIVES 4; ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ; MAXLE VEL=LE VEL+DELT ALTERATIONS; *MODIFY ITERATIONS AS REQUIRED IF(NOT PERCENT, IF (LEVEL GT MAXVALUE, LEVEL=0; DELTA=M AX VALUE/ITERATIONS; ELSE IF (MAXLEVEL GT MAXVALUE, DELT A=(M AXV ALUE-LE VEL)/ITERATIONS; )); IF (MAXVALUE GT 0), PLEVELS.EVEL/M AX VALUE; PDELTASDELT A/MAX VALUE; ); ELSE 58 PLEVEL=LEVEL; PDELTA=DELTA; LEVEL=LEVEL*MAXVALUE; DELTA=DELTA*MAXVALUE; ); *SETUP FIXED VARIABLE LEVELS IF (OBJECTIVE EQ 7, BUDGET=LEVEL; ELSE IF (OBJECTIVE EQ 8, PROFIT=LEVEL; ELSE IF (OBJECTIVE EQ 13, ROI=LE VEL+DELT A* ITERATIONS; LEVEL=ROI; DELTA=-DELTA; ELSE IF (OBJECTIVE EQ 9, BUDGET=LEVEL; ELSE IF (OBJECTIVE EQ 10, SUPPT=LEVEL; ELSE IF (OBJECTIVE EQ 15, ROI=LEVEL+DELTA*ITERATIONS; LEVEL=ROI; DELTA=-DELTA; ELSE IF (OBJECTIVE EQ 4, PROFIT=LE VEL; ELSE IF (OBJECTIVE EQ 3, SUPPT=LEVEL; ELSE IF (OBJECTIVE EQ 1, ERUNOUT=LEVEL; ELSE IF (OBJECTIVE EQ 2, PROFIT=LE VEL; ELSE IF (OBJECTIVE EQ 6, ERUNOUT=LEVEL; ELSE IF (OBJECTIVE EQ 5, SUPPT=LEVEL; ELSE IF (OBJECTIVE EQ 11, BUDGET =LEVEL; ELSE IF (OBJECTIVE EQ 12, ERUNOUT=LEVEL; ELSE IF (OBJECTIVE EQ 14, ROI=LEVEL+DELTA*ITERATIONS; LEVEL=ROI; DELTA=-DELTA; ))))))))))))))); 59 *LOOP TO GENERATE ITERATION POINTS * LOOP(IT$(ORD(IT) LE ITERATIONS+1), PUT OBJFILE; PUT SCENARIO 'V IT.TL 'V LEVEL 'V; IF (OBJECTIVE EQ 7, SOLVE LTBSOLVE USING LP MAXIMIZING PROFITVAR; PUT PROFITVAR.L 'V (-SPENDLNG.M) 'V; IF ALTOPT1, OBJECTIVES; PROFIT=PROFITVAR.L-0.0001; SOLVE LTBSOLVE USING LP MAXIMIZING SUPPVAR; OBJECTIVE=7; PUT SUPPVAR.L 'V (DOLLARS.M) 'V; ELSE IF ALTOPT2, OBJECTIVES; PROFIT=PROFITVAR.L-0.0001; SOLVE 60
Thesis/Dissertation
eng
Business Administration
Vancouver : University of British Columbia Library
For non-commercial purposes only, such as research, private study and education. Additional conditions apply, see Terms of Use https://open.library.ubc.ca/terms_of_use.
Graduate
Life time buy modeling at Agilent Technologies
Text