In short
Operations research (OR) is the use of mathematical models to choose the best decision from many feasible ones under limited resources - how much of each product to make, which machine does which job, how many counters to open, which route to send a truck on. Its core tools are linear programming (graphical and simplex), transportation and assignment models, queuing theory, game and decision theory, and simulation. In Indian universities it is the mathematical half of the Industrial Engineering course and carries 5-8 marks in GATE (ME and PI) every year; it is also the standard aptitude-plus-technical ground for analytics and supply-chain interviews (TCS, Mu Sigma, Delhivery, Flipkart, Reliance, IOCL, Tata Steel, Maruti) and for production-planning roles on the shop floor. The same models run inside real systems - refinery blending at IOCL, freight routing on Indian Railways, crew rostering at airlines, warehouse slotting in e-commerce.
Explained
What OR is, and how a study is run
- Definition: the application of scientific method - models, data and optimisation - to management decisions, to get the *optimum* (not merely a workable) solution with the resources available.
- Born in military planning in the Second World War (radar deployment, convoy sizing); the Operational Research Society of India (ORSI, founded 1957) is the professional body here.
- Phases of an OR study: (1) formulate the problem and objective; (2) build the model; (3) collect data and derive a solution; (4) test and validate the model; (5) establish controls on the solution; (6) implement and review.
- Model classification: by purpose - descriptive, predictive, prescriptive; by certainty - deterministic (LP, transportation, assignment) versus stochastic/probabilistic (queuing, inventory with random demand, simulation); by technique - analytical (closed-form), iterative (simplex), Monte-Carlo simulation, heuristic.
- Essential elements of every optimisation model: decision variables, an objective function, constraints, and a non-negativity/integrality restriction.
- Limitations of OR: data-hungry; a model is only as good as its assumptions; mathematically optimal answers can ignore human, legal and political factors; cost of modelling may exceed the gain; needs management acceptance.
Linear programming - formulation and the graphical method
- LPP: optimise a linear objective subject to linear inequality/equality constraints with variables ≥ 0.
- Assumptions: proportionality (output and cost scale linearly), additivity (no interaction between variables), divisibility (fractional values allowed - integer LP is needed otherwise), certainty (all coefficients known and constant), finiteness, non-negativity.
- Formulation steps: identify decision variables with units → write the objective (max profit/contribution, min cost) → write one constraint per scarce resource in consistent units → add non-negativity.
- Terminology: feasible region (set of points satisfying all constraints - always a convex set), extreme point/vertex, basic feasible solution, optimal solution.
- Fundamental theorem: if an optimum exists it occurs at an extreme point of the feasible region - so with two variables, evaluate Z at every corner and pick the best (corner-point method); alternatively slide the iso-profit line outward until it last touches the region.
- Special cases, and how they look:
- Multiple (alternative) optima: the iso-profit line is parallel to a binding constraint - the whole edge is optimal.
- Unbounded solution: feasible region open in the direction of improvement - usually a missing constraint.
- Infeasible solution: no common region - conflicting constraints.
- Redundant constraint: does not bound the feasible region; removing it changes nothing.
- Degeneracy: more than two constraints pass through the optimal vertex (a basic variable is zero).
Simplex method, duality and sensitivity
- Why: the graphical method dies beyond two variables; simplex (Dantzig, 1947) moves from one basic feasible solution to a better adjacent one until no improvement is possible.
- Standard form: all constraints as equalities with RHS ≥ 0, all variables ≥ 0, objective as maximisation. Add a slack (+s) to a ≤ constraint, a surplus (−s) to a ≥ constraint, and an artificial variable where no obvious starting basis exists.
- Steps: (1) set up the initial tableau with slacks as the basis; (2) entering variable = most negative coefficient in the Z-row (most positive improvement); (3) leaving variable = minimum of RHS/pivot-column ratios among *positive* entries (minimum-ratio test, preserves feasibility); (4) pivot (Gauss-Jordan) to make the pivot element 1 and the rest of the column 0; (5) stop when no negative entry remains in the Z-row.
- Reading the tableau: all ratios negative or zero ⇒ unbounded; a tie in the ratio test ⇒ degeneracy; a zero Z-row coefficient for a non-basic variable ⇒ alternative optimum; an artificial variable remaining basic at a positive level ⇒ infeasible.
- Handling ≥ and = constraints: Big-M method (penalty −M for each artificial variable in a max problem) or the two-phase method (Phase I minimises the sum of artificials; Phase II optimises the real objective).
- Duality: every primal (max, ≤) has a dual (min, ≥) - the m constraints become m dual variables and the n variables become n dual constraints, so an m×n primal gives an n×m dual; the dual of the dual is the primal. Weak duality: any feasible dual value ≥ any feasible primal value (max case). Strong duality: at the optimum both objective values are equal. Complementary slackness: if a constraint has slack, its dual variable is zero; if a dual variable is positive, that constraint is binding.
- Dual simplex solves problems that are optimal but infeasible after a RHS change; the dual is also preferred when constraints far outnumber variables.
- Shadow price (dual value): the change in optimal Z per unit increase in a resource - the maximum worth paying for one more machine-hour; zero for a non-binding resource. Read directly from the slack variables' coefficients in the final Z-row.
- Sensitivity (post-optimality) analysis: the range of an objective coefficient over which the current basis stays optimal, and the range of a RHS over which it stays feasible; also the effect of adding a new product or constraint.
- Integer programming (branch-and-bound, Gomory cuts) for indivisible units; goal programming for several conflicting objectives; dynamic programming (Bellman's principle of optimality) for sequential multi-stage decisions.
Transportation and assignment models
- Transportation problem: ship from m sources (supplies aᵢ) to n destinations (demands bⱼ) at least total cost - a special LP solved by a simpler tableau algorithm.
- Balanced when Σaᵢ = Σbⱼ; otherwise add a dummy row/column with zero costs. A feasible solution needs m + n − 1 independent allocations; fewer means degeneracy (place an ε in a suitable empty cell).
- Initial basic feasible solution:
- North-West Corner Rule (NWCR) - fastest, ignores cost, poorest start.
- Least Cost (Matrix Minima) method - allocate to the cheapest cell first.
- Vogel's Approximation Method (VAM) - penalty = difference between the two lowest costs in each row/column; allocate in the row/column with the biggest penalty, at its cheapest cell. Usually optimal or near-optimal.
- Optimality test - MODI (u-v) method: for occupied cells set uᵢ + vⱼ = cᵢⱼ (take one uᵢ = 0); for each empty cell compute the opportunity cost Δᵢⱼ = cᵢⱼ − (uᵢ + vⱼ). If every Δ ≥ 0 the solution is optimal; else enter the most negative cell, trace a closed loop with alternate + and − signs, and shift θ = smallest allocation on a negative corner. (Stepping-stone is the same idea without u, v.)
- Variants: maximisation (convert to a regret/loss matrix by subtracting every element from the largest), prohibited route (cost = M, a very large number), transshipment (intermediate nodes as both source and destination).
- Assignment problem: a square transportation problem with all supplies and demands equal to 1 - one job to one machine/operator, n! possible assignments.
- Hungarian method: (1) subtract the row minimum from each row; (2) subtract the column minimum from each column; (3) cover all zeros with the minimum number of horizontal/vertical lines; (4) if lines = n, make the assignment through the zeros (start with rows/columns having a single zero); (5) if lines < n, subtract the smallest uncovered element from all uncovered elements and add it to elements at line intersections, then return to step 3.
- Assignment variants: unbalanced (add a dummy row/column of zeros), maximisation (subtract all from the largest element, or minimise the negative), restricted/infeasible assignment (cost = M), travelling-salesman type (assignment solution with a no-sub-tour condition).
Queuing theory (waiting lines)
- Why: customers, jobs or trucks arrive randomly and service takes a random time, so a queue forms even when capacity exceeds demand on average. The aim is to balance cost of waiting against cost of providing service - the total-cost optimum.
- Elements: input (arrival) process, queue (capacity, discipline), service mechanism (number of channels c, phases), output. Arrivals usually Poisson with mean λ; the matching inter-arrival time is exponential. Service usually exponential with mean rate μ.
- Customer behaviour: balking (refuses to join), reneging (leaves the queue), jockeying (switches queues), collusion.
- Queue discipline: FCFS (most common), LCFS, SIRO (random), priority (pre-emptive or non-pre-emptive).
- Kendall-Lee notation (a/b/c):(d/e/f) - arrival distribution / service distribution / number of servers : system capacity / population size / discipline. M = Markovian (Poisson/exponential), D = deterministic, G = general. So (M/M/1):(∞/∞/FCFS) is the single-server infinite-queue model.
- Traffic intensity (utilisation) ρ = λ/(cμ); the system is stable only if ρ < 1. As ρ → 1 the queue length rises non-linearly towards infinity - the key practical insight.
- Little's law L = λW holds for any stable queue, whatever the distributions: average number in system = arrival rate × average time in system.
- Standard models: M/M/1 infinite queue; M/M/1/N finite capacity (λ effective < λ because of balking); M/M/c multi-server (a single queue with c servers beats c separate queues); M/D/1; machine-interference (finite population) models used for maintenance crew sizing.
Game theory, decision theory and simulation
- Game theory models conflict between two or more rational players. Two-person zero-sum game: one player's gain is the other's loss; payoffs written from the row player's view.
- Pure strategies and saddle point: row player's maximin (best of the row minima) and column player's minimax (best of the column maxima); if maximin = minimax, that value is the saddle point and the game value V, with pure optimal strategies.
- Dominance rule: delete a row dominated by another row (all payoffs ≤) and a column dominated by another column (all payoffs ≥) to shrink the matrix before solving.
- Mixed strategies: no saddle point ⇒ players randomise. A 2×2 game is solved by the oddments/algebraic formulae; 2×n and m×2 by sub-games or a graphical method; larger games by converting to an LP (any game can be solved as a pair of dual LPs).
- Example: payoffs [[5, 1], [3, 4]] → maximin 3, minimax 4, no saddle point. Denominator = 5 + 4 − 1 − 3 = 5, so A plays (0.2, 0.8), B plays (0.6, 0.4) and V = (5×4 − 1×3)/5 = 3.4 - verified by A's expected payoff against either B strategy.
- Decision theory - decision under risk: probabilities known, choose by EMV (expected monetary value) or minimum EOL (expected opportunity loss); EVPI = value of perfect information = EV with perfect information − EMV of the best act.
- Decision under uncertainty (no probabilities): maximax (optimist), maximin/Wald (pessimist), minimax regret (Savage), Hurwicz (weighted optimism α), Laplace (equal likelihood). Decision trees handle multi-stage choices with chance nodes.
- Simulation (Monte-Carlo): when a system is too complex for a formula - represent each random input by its distribution, assign random-number ranges to the cumulative probability, draw random numbers and run many trials, then read the average performance. Used for queue design, inventory policy and maintenance. Strengths: handles any distribution and logic; weaknesses: gives an estimate, not an optimum, and needs many runs for precision.
- Other standard OR models: sequencing - Johnson's rule for n jobs on 2 machines (shortest time on machine 1 ⇒ place earliest; shortest on machine 2 ⇒ place latest) and its extension to 3 machines; replacement models; network models - shortest route, maximal flow, minimum spanning tree, and PERT/CPM for project scheduling.
- Software used in practice: Excel Solver, LINGO/LINDO, TORA, MATLAB, Python (PuLP, SciPy, Google OR-Tools), IBM CPLEX, Gurobi, AIMMS.
Key points
- Operations research - scientific models for choosing the optimum decision under constraints; six phases from formulation to implementation.
- Decision variables, objective, constraints - the three parts of every optimisation model; always state units.
- Convexity - an LP feasible region is convex, so a local optimum is the global optimum.
- Corner-point theorem - the LP optimum lies at a vertex; graphical method works only for two variables.
- Slack, surplus, artificial - slack added to ≤, surplus subtracted from ≥, artificial to start ≥ and = rows; artificials need Big-M or two-phase.
- Simplex rules - enter on the most negative Z-row coefficient, leave on the minimum positive ratio.
- Shadow price - worth of one extra unit of a binding resource; zero when the resource is not fully used.
- Duality - m×n primal ⇔ n×m dual, equal optimal values, complementary slackness links slack to dual value.
- Degeneracy / unbounded / infeasible / multiple optima - the four LP special cases, each with a tableau signature.
- Transportation feasibility - needs m + n − 1 independent allocations; unbalanced problems need a dummy.
- VAM - penalty-based start, usually closest to optimum; NWCR ignores cost entirely.
- MODI test - optimal when every empty-cell Δᵢⱼ = cᵢⱼ − (uᵢ + vⱼ) ≥ 0.
- Hungarian method - row reduce, column reduce, cover zeros with minimum lines, adjust until lines = n.
- Traffic intensity ρ = λ/cμ - must be < 1; queue length grows steeply as ρ approaches 1.
- Little's law L = λW - distribution-free relation between queue length and waiting time.
- Saddle point - maximin = minimax gives pure strategies; otherwise mixed strategies and a game value.
- EMV and EVPI - choose the act with the best expected value; EVPI caps what any forecast or survey is worth.
- Simulation - estimates performance for systems with no closed-form solution; not an optimiser.
Formulas and examples
Example 1 - LP formulation and graphical solution. A workshop makes brackets (x) and clamps (y). Each bracket needs 2 machine-hours and 1 labour-hour; each clamp 1 machine-hour and 1 labour-hour. Available: 100 machine-hours, 80 labour-hours. Marketing can sell at most 40 brackets. Contribution ₹40/bracket, ₹30/clamp.
- Max Z = 40x + 30y; 2x + y ≤ 100; x + y ≤ 80; x ≤ 40; x, y ≥ 0.
- Corners: (0, 0) → 0; (0, 80) → ₹2,400; intersection of 2x + y = 100 and x + y = 80 → x = 20, y = 60 → 800 + 1,800 = ₹2,600; (40, 20) → 1,600 + 600 = ₹2,200; (40, 0) → ₹1,600.
- Optimum: 20 brackets, 60 clamps, Z = ₹2,600. Machine-hours 2(20) + 60 = 100 (binding), labour 20 + 60 = 80 (binding), brackets 20 < 40 so that constraint is non-binding - its shadow price is zero.
Example 2 - Simplex with shadow prices. Max Z = 5x₁ + 4x₂ subject to 6x₁ + 4x₂ ≤ 24, x₁ + 2x₂ ≤ 6, x₁, x₂ ≥ 0.
Initial | x1 x2 s1 s2 | RHS ratio
s1 | 6 4 1 0 | 24 24/6 = 4 <- leaves
s2 | 1 2 0 1 | 6 6/1 = 6
Z-row | -5 -4 0 0 | 0 (x1 enters)
Iter 1 | x1 x2 s1 s2 | RHS ratio
x1 | 1 2/3 1/6 0 | 4 4/(2/3) = 6
s2 | 0 4/3 -1/6 1 | 2 2/(4/3) = 1.5 <- leaves
Z-row | 0 -2/3 5/6 0 | 20 (x2 enters)
Iter 2 | x1 x2 s1 s2 | RHS
x1 | 1 0 1/4 -1/2 | 3
x2 | 0 1 -1/8 3/4 | 1.5
Z-row | 0 0 3/4 1/2 | 21 all >= 0 -> optimal
- x₁ = 3, x₂ = 1.5, Z = 21. Check: 6(3) + 4(1.5) = 24 ✓, 3 + 2(1.5) = 6 ✓.
- Shadow prices from the final Z-row: y₁ = 0.75 and y₂ = 0.50 per unit of the two resources. Dual check: W = 24(0.75) + 6(0.50) = 18 + 3 = 21 = Z\* ✓ (strong duality).
Example 3 - Transportation: LCM start, then MODI. Supplies P1 = 30, P2 = 40, P3 = 30; demands D1 = 20, D2 = 45, D3 = 35 (balanced, total 100). Costs (₹/unit):
| D1 | D2 | D3 | Supply | |
|---|---|---|---|---|
| P1 | 4 | 8 | 6 | 30 |
| P2 | 3 | 5 | 7 | 40 |
| P3 | 6 | 4 | 5 | 30 |
| Demand | 20 | 45 | 35 | 100 |
- Least-cost start: P2D1 = 20 (₹60), P3D2 = 30 (₹120), P2D2 = 15 (₹75), P2D3 = 5 (₹35), P1D3 = 30 (₹180) → ₹470, with 5 = m + n − 1 allocations (non-degenerate).
- MODI: take u₂ = 0 → v₁ = 3, v₂ = 5, v₃ = 7; u₃ = 4 − 5 = −1; u₁ = 6 − 7 = −1. Empty cells: Δ(P1D1) = 4 − 2 = +2, Δ(P1D2) = 8 − 4 = +4, Δ(P3D1) = 6 − 2 = +4, Δ(P3D3) = 5 − 6 = −1 → improve.
- Loop P3D3(+) → P3D2(−) → P2D2(+) → P2D3(−); θ = min(30, 5) = 5. New plan: P2D1 = 20, P2D2 = 20, P3D2 = 25, P3D3 = 5, P1D3 = 30.
- New cost = 60 + 100 + 100 + 25 + 180 = ₹465 (= 470 − 1 × 5 ✓).
- Re-test: u₂ = 0 → v₁ = 3, v₂ = 5; u₃ = −1 → v₃ = 6; u₁ = 0. Δ values: P1D1 = +1, P1D2 = +3, P2D3 = +1, P3D1 = +4 - all ≥ 0, so ₹465 is optimal. (VAM applied to the same table reaches ₹465 directly, while NWCR gives ₹520 - a 12% worse start.)
Example 4 - Assignment by the Hungarian method. Cost (₹ hundred) of doing job Jᵢ on machine Mⱼ:
| M1 | M2 | M3 | M4 | |
|---|---|---|---|---|
| J1 | 10 | 12 | 19 | 11 |
| J2 | 5 | 10 | 7 | 8 |
| J3 | 12 | 14 | 13 | 11 |
| J4 | 8 | 15 | 11 | 9 |
- Row reduction (subtract 10, 5, 11, 8): J1 (0, 2, 9, 1); J2 (0, 5, 2, 3); J3 (1, 3, 2, 0); J4 (0, 7, 3, 1).
- Column reduction (subtract 0, 2, 2, 0): J1 (0, 0, 7, 1); J2 (0, 3, 0, 3); J3 (1, 1, 0, 0); J4 (0, 5, 1, 1).
- Zeros can be covered only by 4 lines, so assign: J4 has a single zero → J4-M1; then J2 → M3; then J3 → M4; then J1 → M2.
- Cost = 12 + 7 + 11 + 8 = ₹38 hundred = ₹3,800, against ₹4,100 for the plausible-looking J1-M4, J2-M1, J3-M2, J4-M3.
Example 5 - M/M/1 queue and service-cost trade-off. Trucks reach a weighbridge at λ = 12/hour (Poisson); weighing takes an average 4 minutes, so μ = 15/hour (exponential).
- ρ = 12/15 = 0.8; P₀ = 0.2 (bridge idle 20% of the time).
- Ls = 0.8/0.2 = 4 trucks; Lq = 0.64/0.2 = 3.2 trucks waiting.
- Ws = 1/(15 − 12) = 1/3 h = 20 min; Wq = 12/(15 × 3) = 0.2667 h = 16 min. Check Ws = Wq + 1/μ = 16 + 4 = 20 ✓; Little's law: Ls = 12 × (1/3) = 4 ✓.
- P(more than 2 trucks in system) = ρ³ = 0.512.
- Cost: truck detention ₹200/hour → waiting cost = Ls × 200 = ₹800/hour. A second bridge costing ₹250/hour would cut ρ to 0.4 and Ls (M/M/2) to about 0.95 trucks ≈ ₹190/hour of detention - total ₹440/hour against ₹800, so the second bridge pays.
| Technique | Problem it solves | Method | Typical exam output |
|---|---|---|---|
| Graphical LP | 2 variables, few constraints | Corner points / iso-profit line | Optimal mix and Z |
| Simplex | Many variables | Iterative tableau pivoting | Optimal mix, shadow prices |
| Transportation | Supply to demand at least cost | NWCR/LCM/VAM + MODI | Shipping plan and total cost |
| Assignment | One-to-one allocation | Hungarian method | Pairing and total cost |
| Queuing | Random arrivals and service | M/M/1, M/M/c formulae | Lq, Wq, number of servers |
| Game theory | Two rational opponents | Saddle point / mixed strategy | Strategy mix and value V |
Where it is used
- Process industries: LP blending and refinery planning at IOCL, BPCL and HPCL; coal and ore blending at Tata Steel, SAIL and JSW to hit grade specifications at least cost.
- Logistics and e-commerce: vehicle routing, warehouse-to-pincode allocation (a transportation problem) and delivery-slot staffing at Delhivery, Flipkart, Amazon India, Blue Dart; rake and freight-flow optimisation on Indian Railways.
- Manufacturing planning: product-mix and capacity LPs, line-balancing, machine-to-job assignment and maintenance-crew sizing in Maruti, Bosch, Ashok Leyland and Bajaj plants - usually the industrial-engineering or PPC engineer's job.
- Services and queues: counter and gate design at airports, metro stations, toll plazas (FASTag lane sizing), bank branches and hospital OPDs; call-centre agent staffing from Erlang models.
- Job roles: industrial engineer, supply-chain/demand planner, operations research analyst, business/decision analyst, pricing and revenue-management analyst - plus consulting entrance tests and the GATE Industrial Engineering section.
- Software in daily use: Excel Solver for small LPs, SAP APO/IBP and Oracle planning modules in industry, Python OR-Tools/PuLP and CPLEX/Gurobi for large models.
Interview questions
- Q: What are the assumptions behind linear programming? A: Proportionality and additivity of the objective and constraints, divisibility of variables, certainty of all coefficients, and non-negativity - if any fails, LP is the wrong model.
- Q: Why does the LP optimum always lie at a corner point? A: The feasible region is convex and the objective is linear, so moving along an improving direction can only stop at a vertex of that region.
- Q: What is a shadow price, and when is it zero? A: The increase in optimal profit per extra unit of a resource; it is zero for any resource not fully consumed, because extra units add nothing.
- Q: Difference between slack, surplus and artificial variables? A: Slack is added to a ≤ constraint and surplus subtracted from a ≥ constraint - both have physical meaning; an artificial variable is only a mathematical device to start simplex and must leave the basis.
- Q: How do you recognise an unbounded LP in the simplex tableau? A: The entering column has no positive element, so no leaving variable can be chosen by the ratio test.
- Q: Why solve the dual instead of the primal? A: When constraints far outnumber variables the dual has fewer rows and solves faster, and its variables give the resource valuations directly.
- Q: Why does a transportation solution need m + n − 1 allocations? A: That is the number of independent basic variables (one constraint is redundant because total supply equals total demand); fewer allocations means a degenerate solution.
- Q: Which initial solution method would you use in practice, and why? A: VAM - its opportunity-cost penalties usually land on or very near the optimum, so MODI needs few or no iterations, whereas NWCR ignores cost completely.
- Q: An assignment problem has 4 jobs and 6 machines. What do you do? A: Add two dummy jobs with zero costs to square the matrix, then apply the Hungarian method; the dummies identify the idle machines.
- Q: A toll plaza averages 80% utilisation yet queues are long. Why? A: Queue length grows non-linearly with ρ - at ρ = 0.8 an M/M/1 system already holds about 3.2 vehicles waiting; randomness in arrivals and service, not average capacity, creates the queue.
- Q: Is one queue with three servers better than three separate queues? A: Yes - pooling prevents a server idling while another queue waits, so average waiting time falls for the same total capacity.
- Q: When would you simulate instead of using a formula? A: When arrivals or service are not Poisson/exponential, or the logic involves priorities, breakdowns, balking or linked stages that no closed-form model covers - accepting an estimate rather than an exact optimum.
- Q: What does a game with no saddle point mean practically? A: Neither player has a single best move, so each must randomise in the computed proportions; the game value is the long-run average payoff.
Common mistakes
- Writing the objective function in mixed units, or omitting the non-negativity condition in LP formulation.
- Including the RHS ratio for a zero or negative pivot element in the simplex minimum-ratio test, which destroys feasibility.
- Quoting a shadow price for a non-binding constraint, or applying it far outside its validity range.
- Forgetting the dummy row/column in an unbalanced transportation problem, or not converting a maximisation transportation/assignment problem to a regret matrix.
- Counting allocations wrongly and missing degeneracy - MODI cannot run without m + n − 1 independent cells (needs an ε).
- In the Hungarian method, drawing more than the minimum number of lines, or assigning through a non-zero cell.
- Mixing units in queuing - λ per hour with service time in minutes - and using M/M/1 formulae when ρ ≥ 1, where no steady state exists.
- Treating a simulation average as the optimum, and reporting an LP answer in fractions where only whole units (machines, trucks) are possible without noting that integer programming is required.
Related topics
Production planning and control · Inventory control and MRP · PERT/CPM and project scheduling · Statistical quality control · Lean manufacturing and Six Sigma · Engineering economics and costing