{"text_format":"1","workbook":"xlsx","n_sheets":7,"sheets":["Instructions","Inputs","Scenario_Assumptions","Calculations","Optimizer","Dashboard","Methodology"],"not_rendered":{"charts":0,"images":0,"macros":0,"external_links":0,"defined_names":48,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900"}

{"sheet":"Instructions","index":0,"n_rows":44,"n_cols":3,"rows_kept":44,"cut":false,"hidden":false,"merged":[[0,1,0,2],[2,1,2,2],[5,1,5,2],[14,1,14,2],[22,1,22,2],[29,1,29,2],[40,1,40,2]]}
[null,"Pricing & Product-Mix Optimization — Business Case Model"]
[]
[null,"Purpose"]
[null,"What this model does","This workbook answers a pricing question in two stages. First it shows what happens under three judgement scenarios — hold price, discount for volume, or push price selectively. Then it stops guessing: Sheet 5 contains a working optimisation engine that searches every feasible price vector and returns the one that maximises contribution, subject to constraints you set.\nThe central insight survives both stages: more volume does not mean more profit. But judgement alone gets you only part of the way — on the shipped assumptions the solved optimum beats the hand-set \"Optimised\" scenario by roughly 8% of contribution, from exactly the same set of allowable prices."]
[]
[null,"Model Structure"]
[null,"Sheet 1 — Instructions","This sheet. Read before using."]
[null,"Sheet 2 — Inputs","All user-editable assumptions: base units, prices, variable costs, elasticities, effort index. Blue cells are inputs. Change only these."]
[null,"Sheet 3 — Scenario Assumptions","Price change (%) for the three judgement scenarios, plus what each scenario represents strategically. Blue cells are inputs."]
[null,"Sheet 4 — Calculations","Demand, revenue and contribution for all three judgement scenarios. Formulas only — do not edit."]
[null,"Sheet 5 — Optimizer","The optimisation engine. Decision variables, bounds, objective function, constraints, the solved answer, and a validation block that tells you which constraint is actually setting each price. This is the sheet with the \"Run Optimizer\" button."]
[null,"Sheet 6 — Dashboard","All four cases side by side — the three judgement scenarios and the solved optimum — with a plain-language executive readout that updates itself."]
[null,"Sheet 7 — Methodology","The demand model, the optimisation formulation, how to read a binding constraint, and the limitations you should state out loud before using this in a real decision."]
[]
[null,"How to Use"]
[null,"Step 1 — Set the economics","Sheet 2 (Inputs). Base units, prices, variable costs, elasticities and effort index. Everything downstream is driven from here."]
[null,"Step 2 — Frame the question","Sheet 3 (Scenario Assumptions). Set the price changes for the three judgement scenarios. These are your priors — what you would have done without a model."]
[null,"Step 3 — Draw the box","Sheet 5 (Optimizer). This is the important step. In columns G and H set, per product, the deepest discount you would authorise and the largest increase the market would tolerate. In the Constraints block set your volume floor, effort ceiling, revenue floor and per-product unit floor. The optimizer can only search inside the box you draw, so the box is the real analytical work."]
[null,"Step 4 — Solve","On Sheet 5, choose Data ► Solver ► Solve. Every field is already filled in because the model is stored in the sheet, so there is no setup step."]
[null,"Step 5 — Interrogate the answer","Still on Sheet 5. Check the Status column in the Constraints block: whichever constraint reads BINDING is the rule costing you money. Then read the Economic Validation block to see whether each price was set by the maths or by one of your own bounds. A price set by your ceiling is a judgement you should defend, not a model output you can hide behind."]
[null,"Step 6 — Present it","Sheet 6 (Dashboard). Four cases side by side with a self-updating executive readout."]
[]
[null,"Colour Code"]
[null,"Blue text","Hardcoded input — these are the cells you may change."]
[null,"Black text","Formula / calculated value — do not edit directly."]
[null,"Green text","Cross-sheet reference pulling from another tab."]
[null,"Amber fill","Solver decision variable (Sheet 5, column I). The optimizer overwrites these when it runs. You may type into them to test a manual price vector, but anything you type is replaced on the next solve."]
[null,"Green fill","The objective cell and the solved results that flow from it."]
[]
[null,"Key Definitions"]
[null,"Contribution ($K)","Revenue minus variable cost. The value each unit adds before fixed costs."]
[null,"Contribution Margin %","Contribution divided by revenue. Measures pricing efficiency."]
[null,"Effort Index","A soft proxy for production burden per unit. Higher = more resource-intensive. In the Optimizer it becomes a real capacity constraint with a ceiling you set."]
[null,"Price Elasticity (ε)","How sensitive demand is to price. ε = −1.5 means a 10% price increase reduces units by about 15%. More negative = more price-sensitive."]
[null,"Demand Formula","Scenario Units = Base Units × (Scenario Price ÷ Base Price) ^ Elasticity"]
[null,"Decision Variable","A number the optimizer is allowed to choose. Here: the price change % for each of the five products."]
[null,"Objective Function","The single number being maximised. Here: total contribution, cell $M$17 on Sheet 5."]
[null,"Constraint","A rule the answer must satisfy. Bounds limit one variable; portfolio constraints limit totals across all five products."]
[null,"Binding Constraint","A constraint the optimum is pressed right up against. It is the rule currently costing you contribution — and therefore the most valuable thing on the sheet to argue about."]
[]
[null,"Requirements"]
[null,"Excel & Solver","Desktop Excel for Windows or Mac. The Solver add-in ships with Excel but may need enabling: File ► Options ► Add-ins ► Manage: Excel Add-ins ► Go ► tick \"Solver Add-in\". The \"Run Optimizer\" button does this for you automatically. Solver is not available in Excel on the web or in Google Sheets — in those environments the workbook still calculates, but you cannot solve it."]
[null,"Macros","This copy contains no macros at all, so nothing needs to be enabled and no security bar appears. The Solver model itself is stored in Sheet 5, which is what makes Data ► Solver ► Solve work with no setup — that is a saved model, not a macro."]
[null,"Disclaimer","All data in this workbook is illustrative. No real company, customer or transaction is represented. Elasticities are assumptions, not measurements — see the Limitations section on Sheet 7 before using this for a live pricing decision."]

{"sheet":"Inputs","index":1,"n_rows":16,"n_cols":9,"rows_kept":16,"cut":false,"hidden":false,"merged":[[13,1,13,7],[14,1,14,7],[15,1,15,7],[0,1,0,7],[2,1,2,7],[10,1,10,7],[11,1,11,7],[12,1,12,7]]}
[null,"Inputs & Base Assumptions"]
[]
[null,"Base Product Data"]
[null,"Product","Positioning","Base Units","Base Price ($K)","Variable Cost ($K)","Elasticity","Effort Index","Contribution/Unit ($K)"]
[null,"A","Small / standardised",220,9,7,-1.5,1,{"$f":"E5-F5","v":null}]
[null,"B","Lower-mid",180,14,10.5,-1.3,2.2,{"$f":"E6-F6","v":null}]
[null,"C","Mid-tier",140,20,15,-1.1,3.6,{"$f":"E7-F7","v":null}]
[null,"D","Upper-mid",70,33,24,-0.8,6.5,{"$f":"E8-F8","v":null}]
[null,"E","Large / custom",35,52,41,-0.6,10.5,{"$f":"E9-F9","v":null}]
[]
[null,"Model Notes"]
[null,"  •  All data is illustrative only. No real company or transaction is represented."]
[null,"  •  Demand formula: Scenario Units = Base Units × (Scenario Price / Base Price) ^ Elasticity"]
[null,"  •  Effort Index is a soft production-burden proxy, not a hard capacity constraint."]
[null,"  •  Contribution per unit = Price − Variable Cost. Fixed costs are excluded from this model."]
[null,"  •  The three named scenarios are judgement cases. The Optimizer sheet solves for the best price vector mathematically, subject to business constraints."]

{"sheet":"Scenario_Assumptions","index":2,"n_rows":17,"n_cols":5,"rows_kept":17,"cut":false,"hidden":false,"merged":[[0,1,0,4],[2,1,2,4],[10,1,10,4],[16,1,16,4]]}
[null,"Scenario Price Assumptions"]
[]
[null,"Price Change by Product (% vs Base Price)"]
[null,"Product","Current Mix","High Volume","Optimised"]
[null,"A",0,-0.08,0.05]
[null,"B",0,-0.1,0.07000000000000001]
[null,"C",0,-0.07000000000000001,0.08]
[null,"D",0,-0.03,0.1]
[null,"E",0,-0.02,0.06]
[]
[null,"Scenario Definitions"]
[null,"Scenario","Description","Strategic Interpretation","Expected Outcome"]
[null,"Current Mix","Observed baseline pricing — no changes to current list prices.","Reference case for measuring the impact of pricing decisions.","Mid-range results; operationally comfortable but not optimised."]
[null,"High Volume","Across-the-board discounting to capture incremental volume and fill capacity.","Tests the instinct to 'sell more' when the plant is not full.","Higher units shipped; lower contribution margin; often destroys value."]
[null,"Optimised","Selective price increases on products with lower price sensitivity (less elastic demand).","Shows that disciplined pricing — even at lower volume — can produce stronger economics.","Fewer units; higher margin per unit; materially better total contribution."]
[]
[null,"These three columns are hand-set judgement cases, not optimised answers. Sheet 5 (Optimizer) searches the full space of price vectors and returns the contribution-maximising solution subject to explicit business constraints. Use these scenarios to frame the question; use the Optimizer to answer it."]

{"sheet":"Calculations","index":3,"n_rows":30,"n_cols":11,"rows_kept":30,"cut":false,"hidden":false,"merged":[[0,1,0,9],[2,1,2,10],[11,1,11,10],[20,1,20,10]]}
[null,"Scenario Calculations"]
[]
[null,"Current Mix"]
[null,"Product","Base Units","Base Price ($K)","Price Δ (%)","Scenario Price ($K)","Elasticity","Scenario Units","Revenue ($K)","Contribution/Unit ($K)","Total Contribution ($K)"]
[null,"A",{"$f":"Inputs!D5","v":null},{"$f":"Inputs!E5","v":null},{"$f":"Scenario_Assumptions!C5","v":null},{"$f":"D5*(1+E5)","v":null},{"$f":"Inputs!G5","v":null},{"$f":"IF(D5=0,C5,C5*(F5/D5)^G5)","v":null},{"$f":"H5*F5","v":null},{"$f":"F5-Inputs!F5","v":null},{"$f":"H5*J5","v":null}]
[null,"B",{"$f":"Inputs!D6","v":null},{"$f":"Inputs!E6","v":null},{"$f":"Scenario_Assumptions!C6","v":null},{"$f":"D6*(1+E6)","v":null},{"$f":"Inputs!G6","v":null},{"$f":"IF(D6=0,C6,C6*(F6/D6)^G6)","v":null},{"$f":"H6*F6","v":null},{"$f":"F6-Inputs!F6","v":null},{"$f":"H6*J6","v":null}]
[null,"C",{"$f":"Inputs!D7","v":null},{"$f":"Inputs!E7","v":null},{"$f":"Scenario_Assumptions!C7","v":null},{"$f":"D7*(1+E7)","v":null},{"$f":"Inputs!G7","v":null},{"$f":"IF(D7=0,C7,C7*(F7/D7)^G7)","v":null},{"$f":"H7*F7","v":null},{"$f":"F7-Inputs!F7","v":null},{"$f":"H7*J7","v":null}]
[null,"D",{"$f":"Inputs!D8","v":null},{"$f":"Inputs!E8","v":null},{"$f":"Scenario_Assumptions!C8","v":null},{"$f":"D8*(1+E8)","v":null},{"$f":"Inputs!G8","v":null},{"$f":"IF(D8=0,C8,C8*(F8/D8)^G8)","v":null},{"$f":"H8*F8","v":null},{"$f":"F8-Inputs!F8","v":null},{"$f":"H8*J8","v":null}]
[null,"E",{"$f":"Inputs!D9","v":null},{"$f":"Inputs!E9","v":null},{"$f":"Scenario_Assumptions!C9","v":null},{"$f":"D9*(1+E9)","v":null},{"$f":"Inputs!G9","v":null},{"$f":"IF(D9=0,C9,C9*(F9/D9)^G9)","v":null},{"$f":"H9*F9","v":null},{"$f":"F9-Inputs!F9","v":null},{"$f":"H9*J9","v":null}]
[null,"Total",{"$f":"SUM(C5:C9)","v":null},{"$f":"SUMPRODUCT(C5:C9,D5:D9)/SUM(C5:C9)","v":null},{"$f":"SUMPRODUCT(H5:H9,F5:F9)/SUMPRODUCT(H5:H9,D5:D9)-1","v":null},{"$f":"I10/H10","v":null},{"$f":"SUMPRODUCT(H5:H9,G5:G9)/SUM(H5:H9)","v":null},{"$f":"SUM(H5:H9)","v":null},{"$f":"SUM(I5:I9)","v":null},{"$f":"K10/H10","v":null},{"$f":"SUM(K5:K9)","v":null}]
[]
[null,"High Volume"]
[null,"Product","Base Units","Base Price ($K)","Price Δ (%)","Scenario Price ($K)","Elasticity","Scenario Units","Revenue ($K)","Contribution/Unit ($K)","Total Contribution ($K)"]
[null,"A",{"$f":"Inputs!D5","v":null},{"$f":"Inputs!E5","v":null},{"$f":"Scenario_Assumptions!D5","v":null},{"$f":"D14*(1+E14)","v":null},{"$f":"Inputs!G5","v":null},{"$f":"IF(D14=0,C14,C14*(F14/D14)^G14)","v":null},{"$f":"H14*F14","v":null},{"$f":"F14-Inputs!F5","v":null},{"$f":"H14*J14","v":null}]
[null,"B",{"$f":"Inputs!D6","v":null},{"$f":"Inputs!E6","v":null},{"$f":"Scenario_Assumptions!D6","v":null},{"$f":"D15*(1+E15)","v":null},{"$f":"Inputs!G6","v":null},{"$f":"IF(D15=0,C15,C15*(F15/D15)^G15)","v":null},{"$f":"H15*F15","v":null},{"$f":"F15-Inputs!F6","v":null},{"$f":"H15*J15","v":null}]
[null,"C",{"$f":"Inputs!D7","v":null},{"$f":"Inputs!E7","v":null},{"$f":"Scenario_Assumptions!D7","v":null},{"$f":"D16*(1+E16)","v":null},{"$f":"Inputs!G7","v":null},{"$f":"IF(D16=0,C16,C16*(F16/D16)^G16)","v":null},{"$f":"H16*F16","v":null},{"$f":"F16-Inputs!F7","v":null},{"$f":"H16*J16","v":null}]
[null,"D",{"$f":"Inputs!D8","v":null},{"$f":"Inputs!E8","v":null},{"$f":"Scenario_Assumptions!D8","v":null},{"$f":"D17*(1+E17)","v":null},{"$f":"Inputs!G8","v":null},{"$f":"IF(D17=0,C17,C17*(F17/D17)^G17)","v":null},{"$f":"H17*F17","v":null},{"$f":"F17-Inputs!F8","v":null},{"$f":"H17*J17","v":null}]
[null,"E",{"$f":"Inputs!D9","v":null},{"$f":"Inputs!E9","v":null},{"$f":"Scenario_Assumptions!D9","v":null},{"$f":"D18*(1+E18)","v":null},{"$f":"Inputs!G9","v":null},{"$f":"IF(D18=0,C18,C18*(F18/D18)^G18)","v":null},{"$f":"H18*F18","v":null},{"$f":"F18-Inputs!F9","v":null},{"$f":"H18*J18","v":null}]
[null,"Total",{"$f":"SUM(C14:C18)","v":null},{"$f":"SUMPRODUCT(C14:C18,D14:D18)/SUM(C14:C18)","v":null},{"$f":"SUMPRODUCT(H14:H18,F14:F18)/SUMPRODUCT(H14:H18,D14:D18)-1","v":null},{"$f":"I19/H19","v":null},{"$f":"SUMPRODUCT(H14:H18,G14:G18)/SUM(H14:H18)","v":null},{"$f":"SUM(H14:H18)","v":null},{"$f":"SUM(I14:I18)","v":null},{"$f":"K19/H19","v":null},{"$f":"SUM(K14:K18)","v":null}]
[]
[null,"Optimised"]
[null,"Product","Base Units","Base Price ($K)","Price Δ (%)","Scenario Price ($K)","Elasticity","Scenario Units","Revenue ($K)","Contribution/Unit ($K)","Total Contribution ($K)"]
[null,"A",{"$f":"Inputs!D5","v":null},{"$f":"Inputs!E5","v":null},{"$f":"Scenario_Assumptions!E5","v":null},{"$f":"D23*(1+E23)","v":null},{"$f":"Inputs!G5","v":null},{"$f":"IF(D23=0,C23,C23*(F23/D23)^G23)","v":null},{"$f":"H23*F23","v":null},{"$f":"F23-Inputs!F5","v":null},{"$f":"H23*J23","v":null}]
[null,"B",{"$f":"Inputs!D6","v":null},{"$f":"Inputs!E6","v":null},{"$f":"Scenario_Assumptions!E6","v":null},{"$f":"D24*(1+E24)","v":null},{"$f":"Inputs!G6","v":null},{"$f":"IF(D24=0,C24,C24*(F24/D24)^G24)","v":null},{"$f":"H24*F24","v":null},{"$f":"F24-Inputs!F6","v":null},{"$f":"H24*J24","v":null}]
[null,"C",{"$f":"Inputs!D7","v":null},{"$f":"Inputs!E7","v":null},{"$f":"Scenario_Assumptions!E7","v":null},{"$f":"D25*(1+E25)","v":null},{"$f":"Inputs!G7","v":null},{"$f":"IF(D25=0,C25,C25*(F25/D25)^G25)","v":null},{"$f":"H25*F25","v":null},{"$f":"F25-Inputs!F7","v":null},{"$f":"H25*J25","v":null}]
[null,"D",{"$f":"Inputs!D8","v":null},{"$f":"Inputs!E8","v":null},{"$f":"Scenario_Assumptions!E8","v":null},{"$f":"D26*(1+E26)","v":null},{"$f":"Inputs!G8","v":null},{"$f":"IF(D26=0,C26,C26*(F26/D26)^G26)","v":null},{"$f":"H26*F26","v":null},{"$f":"F26-Inputs!F8","v":null},{"$f":"H26*J26","v":null}]
[null,"E",{"$f":"Inputs!D9","v":null},{"$f":"Inputs!E9","v":null},{"$f":"Scenario_Assumptions!E9","v":null},{"$f":"D27*(1+E27)","v":null},{"$f":"Inputs!G9","v":null},{"$f":"IF(D27=0,C27,C27*(F27/D27)^G27)","v":null},{"$f":"H27*F27","v":null},{"$f":"F27-Inputs!F9","v":null},{"$f":"H27*J27","v":null}]
[null,"Total",{"$f":"SUM(C23:C27)","v":null},{"$f":"SUMPRODUCT(C23:C27,D23:D27)/SUM(C23:C27)","v":null},{"$f":"SUMPRODUCT(H23:H27,F23:F27)/SUMPRODUCT(H23:H27,D23:D27)-1","v":null},{"$f":"I28/H28","v":null},{"$f":"SUMPRODUCT(H23:H27,G23:G27)/SUM(H23:H27)","v":null},{"$f":"SUM(H23:H27)","v":null},{"$f":"SUM(I23:I27)","v":null},{"$f":"K28/H28","v":null},{"$f":"SUM(K23:K27)","v":null}]
[]
[null,"Totals row: units, revenue and contribution are sums. Prices, price change %, elasticity and contribution per unit are volume-weighted averages — these measures are not additive across products."]

{"sheet":"Optimizer","index":4,"n_rows":57,"n_cols":15,"rows_kept":57,"cut":false,"hidden":false,"merged":[[0,1,0,14],[2,1,2,14],[3,2,3,14],[4,2,4,14],[5,2,5,14],[6,2,6,14],[7,2,7,14],[9,1,9,14],[19,1,19,7],[28,1,28,14],[29,8,29,14],[30,8,30,14],[31,8,31,14],[32,8,32,14],[33,8,33,14],[34,8,34,14],[35,8,35,14],[38,1,38,14],[39,8,39,14],[40,8,40,14],[41,8,41,14],[42,8,42,14],[43,8,43,14],[44,8,44,14],[45,1,45,14],[47,1,47,14],[56,1,56,14]]}
[null,"Pricing Optimizer — Constrained Contribution Maximisation"]
[]
[null,"How to Run the Optimizer"]
[null,"Run it","Data ► Solver ► Solve. The whole model is already stored in this sheet, so every field in the Solver dialog is pre-filled — there is nothing to set up. Solving takes one press."]
[null,"What Solver is set to","Data ► Solver. The model is already stored in this sheet, so every field is pre-filled: objective $M$17 (Max), variables $I$12:$I$16, six constraints, GRG Nonlinear. Press Solve. If Solver is missing: File ► Options ► Add-ins ► Manage: Excel Add-ins ► Go ► tick Solver Add-in."]
[null,"Before you solve","Set your pricing-power ceilings and discount floors in the amber-bordered blue cells (columns G and H), and the portfolio constraints in the Constraints block below. These are business judgements — the optimizer only searches inside the box you draw."]
[null,"Reset","To re-solve from a clean start, type 0% into every amber cell in column I first."]
[null,"Last Solver run","Not run yet in this session — the amber cells below hold the stored optimal solution."]
[]
[null,"Decision Variables, Bounds and Solved Economics"]
[null,"Product","Base Units","Base Price\n($K)","Variable Cost\n($K)","Elasticity","Min Δ%\n(discount floor)","Max Δ%\n(pricing power)","Price Δ%\nDECISION","Solved Price\n($K)","Units","Revenue\n($K)","Contribution\n($K)","Effort\n(index)","Min Units\n(floor)"]
[null,{"$f":"Inputs!B5&\"  —  \"&Inputs!C5","v":null},{"$f":"Inputs!D5","v":null},{"$f":"Inputs!E5","v":null},{"$f":"Inputs!F5","v":null},{"$f":"Inputs!G5","v":null},-0.1,0.06,0.032334,{"$f":"D12*(1+I12)","v":null},{"$f":"IF(D12=0,C12,C12*(J12/D12)^F12)","v":null},{"$f":"K12*J12","v":null},{"$f":"K12*(J12-E12)","v":null},{"$f":"K12*Inputs!H5","v":null},{"$f":"C12*$F$34","v":null}]
[null,{"$f":"Inputs!B6&\"  —  \"&Inputs!C6","v":null},{"$f":"Inputs!D6","v":null},{"$f":"Inputs!E6","v":null},{"$f":"Inputs!F6","v":null},{"$f":"Inputs!G6","v":null},-0.1,0.08,0.08,{"$f":"D13*(1+I13)","v":null},{"$f":"IF(D13=0,C13,C13*(J13/D13)^F13)","v":null},{"$f":"K13*J13","v":null},{"$f":"K13*(J13-E13)","v":null},{"$f":"K13*Inputs!H6","v":null},{"$f":"C13*$F$34","v":null}]
[null,{"$f":"Inputs!B7&\"  —  \"&Inputs!C7","v":null},{"$f":"Inputs!D7","v":null},{"$f":"Inputs!E7","v":null},{"$f":"Inputs!F7","v":null},{"$f":"Inputs!G7","v":null},-0.1,0.1,0.1,{"$f":"D14*(1+I14)","v":null},{"$f":"IF(D14=0,C14,C14*(J14/D14)^F14)","v":null},{"$f":"K14*J14","v":null},{"$f":"K14*(J14-E14)","v":null},{"$f":"K14*Inputs!H7","v":null},{"$f":"C14*$F$34","v":null}]
[null,{"$f":"Inputs!B8&\"  —  \"&Inputs!C8","v":null},{"$f":"Inputs!D8","v":null},{"$f":"Inputs!E8","v":null},{"$f":"Inputs!F8","v":null},{"$f":"Inputs!G8","v":null},-0.1,0.14,0.14,{"$f":"D15*(1+I15)","v":null},{"$f":"IF(D15=0,C15,C15*(J15/D15)^F15)","v":null},{"$f":"K15*J15","v":null},{"$f":"K15*(J15-E15)","v":null},{"$f":"K15*Inputs!H8","v":null},{"$f":"C15*$F$34","v":null}]
[null,{"$f":"Inputs!B9&\"  —  \"&Inputs!C9","v":null},{"$f":"Inputs!D9","v":null},{"$f":"Inputs!E9","v":null},{"$f":"Inputs!F9","v":null},{"$f":"Inputs!G9","v":null},-0.1,0.18,0.18,{"$f":"D16*(1+I16)","v":null},{"$f":"IF(D16=0,C16,C16*(J16/D16)^F16)","v":null},{"$f":"K16*J16","v":null},{"$f":"K16*(J16-E16)","v":null},{"$f":"K16*Inputs!H9","v":null},{"$f":"C16*$F$34","v":null}]
[null,"Total",{"$f":"SUM(C12:C16)","v":null},{"$f":"SUMPRODUCT(C12:C16,D12:D16)/SUM(C12:C16)","v":null},{"$f":"SUMPRODUCT(C12:C16,E12:E16)/SUM(C12:C16)","v":null},{"$f":"SUMPRODUCT(K12:K16,F12:F16)/SUM(K12:K16)","v":null},"—","—",{"$f":"L17/SUMPRODUCT(K12:K16,D12:D16)-1","v":null},{"$f":"L17/K17","v":null},{"$f":"SUM(K12:K16)","v":null},{"$f":"SUM(L12:L16)","v":null},{"$f":"SUM(M12:M16)","v":null},{"$f":"SUM(N12:N16)","v":null},{"$f":"SUM(O12:O16)","v":null}]
[null,"Amber = Solver decision variables.  Green = objective cell ($M$17), maximised.  Blue = your inputs.  Green text = pulled from Inputs."]
[]
[null,"Objective Function and Portfolio Outcome"]
[null,"Metric","Optimizer","Current Mix\n(baseline)","High Volume","Optimised\n(judgement)","Δ vs Baseline","Δ vs Judgement"]
[null,"Total Contribution ($K)  ◄ OBJECTIVE",{"$f":"M17","v":null},{"$f":"Calculations!K10","v":null},{"$f":"Calculations!K19","v":null},{"$f":"Calculations!K28","v":null},{"$f":"IF(D22=0,\"\",C22/D22-1)","v":null},{"$f":"IF(F22=0,\"\",C22/F22-1)","v":null}]
[null,"Total Revenue ($K)",{"$f":"L17","v":null},{"$f":"Calculations!I10","v":null},{"$f":"Calculations!I19","v":null},{"$f":"Calculations!I28","v":null},{"$f":"IF(D23=0,\"\",C23/D23-1)","v":null},{"$f":"IF(F23=0,\"\",C23/F23-1)","v":null}]
[null,"Total Units",{"$f":"K17","v":null},{"$f":"Calculations!H10","v":null},{"$f":"Calculations!H19","v":null},{"$f":"Calculations!H28","v":null},{"$f":"IF(D24=0,\"\",C24/D24-1)","v":null},{"$f":"IF(F24=0,\"\",C24/F24-1)","v":null}]
[null,"Total Effort (index units)",{"$f":"N17","v":null},{"$f":"SUMPRODUCT(Calculations!H5:H9,Inputs!H5:H9)","v":null},{"$f":"SUMPRODUCT(Calculations!H14:H18,Inputs!H5:H9)","v":null},{"$f":"SUMPRODUCT(Calculations!H23:H27,Inputs!H5:H9)","v":null},{"$f":"IF(D25=0,\"\",C25/D25-1)","v":null},{"$f":"IF(F25=0,\"\",C25/F25-1)","v":null}]
[null,"Contribution Margin %",{"$f":"C22/C23","v":null},{"$f":"D22/D23","v":null},{"$f":"E22/E23","v":null},{"$f":"F22/F23","v":null},{"$f":"(C26-D26)*100","v":null},{"$f":"(C26-F26)*100","v":null}]
[null,"Contribution per Effort Unit ($K)",{"$f":"C22/C25","v":null},{"$f":"D22/D25","v":null},{"$f":"E22/E25","v":null},{"$f":"F22/F25","v":null},{"$f":"IF(D27=0,\"\",C27/D27-1)","v":null},{"$f":"IF(F27=0,\"\",C27/F27-1)","v":null}]
[]
[null,"Constraints — the Business Box the Optimizer Must Stay Inside"]
[null,"Constraint","Value (LHS)","Rel.","Limit (RHS)","Setting","Status","Headroom\n(+ = slack)","What it represents in the business"]
[null,"1. Total units ≥ volume floor",{"$f":"K17","v":null},"≥",{"$f":"$F$31*SUM(Calculations!H5:H9)","v":null},0.92,{"$f":"IF(ABS(C31-E31)<=ABS(E31)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"C31-E31","v":null},"Market presence and customer commitments. You will not walk away from more than 8% of your unit base."]
[null,"2. Total effort ≤ capacity",{"$f":"N17","v":null},"≤",{"$f":"$F$32*SUMPRODUCT(Calculations!H5:H9,Inputs!H5:H9)","v":null},0.95,{"$f":"IF(ABS(C32-E32)<=ABS(E32)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"E32-C32","v":null},"Production burden ceiling. The optimised plan must not work the plant harder than 95% of today."]
[null,"3. Total revenue ≥ revenue floor",{"$f":"L17","v":null},"≥",{"$f":"$F$33*Calculations!I10","v":null},0.96,{"$f":"IF(ABS(C33-E33)<=ABS(E33)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"C33-E33","v":null},"Top-line guardrail for covenants, overhead absorption and market-share optics."]
[null,"4. Units by product ≥ product floor",{"$f":"MIN(K12-O12,K13-O13,K14-O14,K15-O15,K16-O16)","v":null},"≥",0,0.75,{"$f":"IF(ABS(C34-E34)<=ABS(E34)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"C34-E34","v":null},"No product line is quietly abandoned. Each SKU keeps at least 75% of its base volume. (LHS shown is the tightest product; Solver enforces $K$12:$K$16 ≥ $O$12:$O$16.)"]
[null,"5. Price Δ ≥ discount floor",{"$f":"MIN(I12-G12,I13-G13,I14-G14,I15-G15,I16-G16)","v":null},"≥",0,"per product",{"$f":"IF(ABS(C35-E35)<=ABS(E35)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"C35-E35","v":null},"Discount authority. Solver enforces $I$12:$I$16 ≥ $G$12:$G$16 (column G)."]
[null,"6. Price Δ ≤ pricing-power ceiling",{"$f":"MIN(H12-I12,H13-I13,H14-I14,H15-I15,H16-I16)","v":null},"≥",0,"per product",{"$f":"IF(ABS(C36-E36)<=ABS(E36)*0.0005+0.000001,\"BINDING\",\"slack\")","v":null},{"$f":"C36-E36","v":null},"How far each product can be pushed before customers or competitors react. Solver enforces $I$12:$I$16 ≤ $H$12:$H$16 (column H)."]
[null,"A BINDING constraint is where the money is. It is the business rule that is costing you contribution — relax it and the objective improves. A slack constraint is not driving the answer and can be ignored in the discussion."]
[]
[null,"Economic Validation — Does the Solver Answer Make Sense?"]
[null,"Product","Elasticity","Interior Optimum\nPrice ($K)","Implied Δ% vs Base","Solver Δ%","Base Price\n($K)","Solved Price\n($K)","What actually sets this price"]
[null,{"$f":"Inputs!B5","v":null},{"$f":"F12","v":null},{"$f":"IF(F12<-1,E12*F12/(1+F12),\"unbounded\")","v":null},{"$f":"IF(F12<-1,D41/D12-1,\"n/a\")","v":null},{"$f":"I12","v":null},{"$f":"D12","v":null},{"$f":"J12","v":null},{"$f":"IF(ABS(I12-H12)<0.00001,\"Pricing-power ceiling binds — the constraint sets this price, not the maths.\",IF(ABS(I12-G12)<0.00001,\"Discount floor binds — price is held up by your own discount limit.\",\"Interior solution — this product is the swing lever balancing the portfolio constraints.\"))","v":null}]
[null,{"$f":"Inputs!B6","v":null},{"$f":"F13","v":null},{"$f":"IF(F13<-1,E13*F13/(1+F13),\"unbounded\")","v":null},{"$f":"IF(F13<-1,D42/D13-1,\"n/a\")","v":null},{"$f":"I13","v":null},{"$f":"D13","v":null},{"$f":"J13","v":null},{"$f":"IF(ABS(I13-H13)<0.00001,\"Pricing-power ceiling binds — the constraint sets this price, not the maths.\",IF(ABS(I13-G13)<0.00001,\"Discount floor binds — price is held up by your own discount limit.\",\"Interior solution — this product is the swing lever balancing the portfolio constraints.\"))","v":null}]
[null,{"$f":"Inputs!B7","v":null},{"$f":"F14","v":null},{"$f":"IF(F14<-1,E14*F14/(1+F14),\"unbounded\")","v":null},{"$f":"IF(F14<-1,D43/D14-1,\"n/a\")","v":null},{"$f":"I14","v":null},{"$f":"D14","v":null},{"$f":"J14","v":null},{"$f":"IF(ABS(I14-H14)<0.00001,\"Pricing-power ceiling binds — the constraint sets this price, not the maths.\",IF(ABS(I14-G14)<0.00001,\"Discount floor binds — price is held up by your own discount limit.\",\"Interior solution — this product is the swing lever balancing the portfolio constraints.\"))","v":null}]
[null,{"$f":"Inputs!B8","v":null},{"$f":"F15","v":null},{"$f":"IF(F15<-1,E15*F15/(1+F15),\"unbounded\")","v":null},{"$f":"IF(F15<-1,D44/D15-1,\"n/a\")","v":null},{"$f":"I15","v":null},{"$f":"D15","v":null},{"$f":"J15","v":null},{"$f":"IF(ABS(I15-H15)<0.00001,\"Pricing-power ceiling binds — the constraint sets this price, not the maths.\",IF(ABS(I15-G15)<0.00001,\"Discount floor binds — price is held up by your own discount limit.\",\"Interior solution — this product is the swing lever balancing the portfolio constraints.\"))","v":null}]
[null,{"$f":"Inputs!B9","v":null},{"$f":"F16","v":null},{"$f":"IF(F16<-1,E16*F16/(1+F16),\"unbounded\")","v":null},{"$f":"IF(F16<-1,D45/D16-1,\"n/a\")","v":null},{"$f":"I16","v":null},{"$f":"D16","v":null},{"$f":"J16","v":null},{"$f":"IF(ABS(I16-H16)<0.00001,\"Pricing-power ceiling binds — the constraint sets this price, not the maths.\",IF(ABS(I16-G16)<0.00001,\"Discount floor binds — price is held up by your own discount limit.\",\"Interior solution — this product is the swing lever balancing the portfolio constraints.\"))","v":null}]
[null,"Interior Optimum Price is the textbook single-product answer, P* = Variable Cost × ε ÷ (1 + ε). It only exists where demand is elastic (ε < −1). For products D and E (ε = −0.8 and −0.6) contribution rises without limit as price rises, so an unconstrained optimizer would price them into absurdity. That is not a bug in the maths — it is the reason the constraint block above is the real content of this model. Where the textbook answer is far above the solved price, the ceiling in column H is doing the work, and the honest question becomes \"how confident are we in that ceiling?\" rather than \"what does the model say?\"."]
[]
[null,"Where the Gain Comes From — Optimizer vs Current Mix by Product"]
[null,"Product","Units\nBase","Units\nOptimised","Δ Units","Contribution\nBase ($K)","Contribution\nOptimised ($K)","Δ Contribution\n($K)","Contribution\nper Unit Base","Contribution\nper Unit Opt.","Effort\nΔ"]
[null,{"$f":"Inputs!B5","v":null},{"$f":"Calculations!H5","v":null},{"$f":"K12","v":null},{"$f":"D50-C50","v":null},{"$f":"Calculations!K5","v":null},{"$f":"M12","v":null},{"$f":"G50-F50","v":null},{"$f":"Calculations!J5","v":null},{"$f":"J12-E12","v":null},{"$f":"N12-Calculations!H5*Inputs!H5","v":null}]
[null,{"$f":"Inputs!B6","v":null},{"$f":"Calculations!H6","v":null},{"$f":"K13","v":null},{"$f":"D51-C51","v":null},{"$f":"Calculations!K6","v":null},{"$f":"M13","v":null},{"$f":"G51-F51","v":null},{"$f":"Calculations!J6","v":null},{"$f":"J13-E13","v":null},{"$f":"N13-Calculations!H6*Inputs!H6","v":null}]
[null,{"$f":"Inputs!B7","v":null},{"$f":"Calculations!H7","v":null},{"$f":"K14","v":null},{"$f":"D52-C52","v":null},{"$f":"Calculations!K7","v":null},{"$f":"M14","v":null},{"$f":"G52-F52","v":null},{"$f":"Calculations!J7","v":null},{"$f":"J14-E14","v":null},{"$f":"N14-Calculations!H7*Inputs!H7","v":null}]
[null,{"$f":"Inputs!B8","v":null},{"$f":"Calculations!H8","v":null},{"$f":"K15","v":null},{"$f":"D53-C53","v":null},{"$f":"Calculations!K8","v":null},{"$f":"M15","v":null},{"$f":"G53-F53","v":null},{"$f":"Calculations!J8","v":null},{"$f":"J15-E15","v":null},{"$f":"N15-Calculations!H8*Inputs!H8","v":null}]
[null,{"$f":"Inputs!B9","v":null},{"$f":"Calculations!H9","v":null},{"$f":"K16","v":null},{"$f":"D54-C54","v":null},{"$f":"Calculations!K9","v":null},{"$f":"M16","v":null},{"$f":"G54-F54","v":null},{"$f":"Calculations!J9","v":null},{"$f":"J16-E16","v":null},{"$f":"N16-Calculations!H9*Inputs!H9","v":null}]
[null,"Total",{"$f":"SUM(C50:C54)","v":null},{"$f":"SUM(D50:D54)","v":null},{"$f":"SUM(E50:E54)","v":null},{"$f":"SUM(F50:F54)","v":null},{"$f":"SUM(G50:G54)","v":null},{"$f":"SUM(H50:H54)","v":null},{"$f":"F55/C55","v":null},{"$f":"G55/D55","v":null},{"$f":"SUM(K50:K54)","v":null}]
[]
[null,"Read this block before quoting the headline number. The optimizer does not lift every product — it decides which products should give up volume and which should not. Products held at their pricing-power ceiling are conviction calls; the interior product is the valve the model uses to satisfy the binding volume constraint, and it is the one to sanity-check with the commercial team."]

{"sheet":"Dashboard","index":5,"n_rows":27,"n_cols":6,"rows_kept":27,"cut":false,"hidden":false,"merged":[[0,1,0,5],[2,1,2,5],[9,1,9,5],[14,1,14,5],[19,1,19,5]]}
[null,"Pricing & Product-Mix Optimisation — Dashboard"]
[]
[null,"Summary by Scenario"]
[null,"Metric","Current Mix","High Volume","Optimised","Optimizer\n(solved)"]
[null,"Total Units",{"$f":"Calculations!H10","v":null},{"$f":"Calculations!H19","v":null},{"$f":"Calculations!H28","v":null},{"$f":"Optimizer!K17","v":null}]
[null,"Revenue ($K)",{"$f":"Calculations!I10","v":null},{"$f":"Calculations!I19","v":null},{"$f":"Calculations!I28","v":null},{"$f":"Optimizer!L17","v":null}]
[null,"Total Contribution ($K)",{"$f":"Calculations!K10","v":null},{"$f":"Calculations!K19","v":null},{"$f":"Calculations!K28","v":null},{"$f":"Optimizer!M17","v":null}]
[null,"Contribution Margin %",{"$f":"C7/C6","v":null},{"$f":"D7/D6","v":null},{"$f":"E7/E6","v":null},{"$f":"F7/F6","v":null}]
[]
[null,"Operational Efficiency"]
[null,"Metric","Current Mix","High Volume","Optimised","Optimizer\n(solved)"]
[null,"Total Effort (Index Units)",{"$f":"Calculations!H5*Inputs!H5+Calculations!H6*Inputs!H6+Calculations!H7*Inputs!H7+Calculations!H8*Inputs!H8+Calculations!H9*Inputs!H9","v":null},{"$f":"Calculations!H14*Inputs!H5+Calculations!H15*Inputs!H6+Calculations!H16*Inputs!H7+Calculations!H17*Inputs!H8+Calculations!H18*Inputs!H9","v":null},{"$f":"Calculations!H23*Inputs!H5+Calculations!H24*Inputs!H6+Calculations!H25*Inputs!H7+Calculations!H26*Inputs!H8+Calculations!H27*Inputs!H9","v":null},{"$f":"Optimizer!N17","v":null}]
[null,"Contribution per Effort Unit ($K)",{"$f":"C7/C12","v":null},{"$f":"D7/D12","v":null},{"$f":"E7/E12","v":null},{"$f":"F7/F12","v":null}]
[]
[null,"Executive Readout"]
[null,"Current Mix",{"$f":"\"Baseline scenario. Contribution margin of \"&TEXT(C8,\"0.0%\")&\" on \"&TEXT(C5,\"#,##0\")&\" units. Operationally comfortable but leaves value on the table. No pricing signal — this is the starting point, not the goal.\"","v":null}]
[null,"High Volume",{"$f":"\"Discounting to fill the plant lifts volume to \"&TEXT(D5,\"#,##0\")&\" units but compresses margin to \"&TEXT(D8,\"0.0%\")&\", and total contribution falls \"&TEXT(1-D7/C7,\"0.0%\")&\" versus baseline. More units, more effort, less profit — the cost of \"\"selling more at lower prices\"\" when demand is elastic.\"","v":null}]
[null,"Optimised",{"$f":"\"Hand-set price discipline: selective increases on lower-elasticity products lift contribution \"&TEXT(E7/C7-1,\"0.0%\")&\" on \"&TEXT(1-E5/C5,\"0.0%\")&\" fewer units. Directionally right, and this is as far as judgement alone gets you.\"","v":null}]
[null,"Optimizer (solved)",{"$f":"\"Constrained optimum from Sheet 5. Contribution of \"&TEXT(F7,\"#,##0\")&\" $K at \"&TEXT(F8,\"0.0%\")&\" margin — \"&TEXT(F7/C7-1,\"0.0%\")&\" above baseline and \"&TEXT(F7/E7-1,\"0.0%\")&\" above the hand-set scenario, from the same feasible set. The binding constraint is the volume floor: the plan is worth \"&TEXT(F7-E7,\"#,##0\")&\" $K more than judgement produced, and the next unit of value has to be bought by relaxing that floor, not by pricing harder.\"","v":null}]
[null,"At-a-Glance Comparison"]
[null,"Scenario","Volume (Units)","Revenue ($K)","Contribution ($K)","Margin %"]
[null,"Current Mix",{"$f":"C5","v":null},{"$f":"C6","v":null},{"$f":"C7","v":null},{"$f":"C8","v":null}]
[null,"High Volume",{"$f":"D5","v":null},{"$f":"D6","v":null},{"$f":"D7","v":null},{"$f":"D8","v":null}]
[null,"Optimised (judgement)",{"$f":"E5","v":null},{"$f":"E6","v":null},{"$f":"E7","v":null},{"$f":"E8","v":null}]
[null,"Optimizer (solved)",{"$f":"F5","v":null},{"$f":"F6","v":null},{"$f":"F7","v":null},{"$f":"F8","v":null}]
[]
[null,"The Optimizer column is live: it recalculates from the amber decision cells on Sheet 5. Re-solve on that sheet after changing any input, bound or constraint — otherwise this column shows the old solution evaluated against the new assumptions."]

{"sheet":"Methodology","index":6,"n_rows":29,"n_cols":3,"rows_kept":29,"cut":false,"hidden":false,"merged":[[0,1,0,2],[2,1,2,2],[6,1,6,2],[11,1,11,2],[17,1,17,2],[22,1,22,2]]}
[null,"Methodology & Interpretation"]
[]
[null,"Core Logic"]
[]
[null,"Purpose of the model","To show that pricing — not volume — is the primary profit lever when capacity is not the binding constraint, and then to find the best available price vector rather than argue about three guesses."]
[null,"Why an optimizer, not scenarios","A scenario answers \"what if we did this?\". An optimizer answers \"what is the best we could do, and what is stopping us?\". Scenario comparison is limited by the imagination of whoever wrote the scenarios. With five products and a realistic bound on each, the space of allowable price vectors is continuous and infinite — no one enumerates it by hand. On the shipped assumptions the hand-set \"Optimised\" scenario reaches 3,364 $K of contribution and the solved optimum reaches 3,619 $K, a gap of roughly 8% that was invisible in the three-scenario view even though both answers were legal all along."]
[null,"The Demand Model"]
[]
[null,"Demand response","Units = Base Units × (New Price ÷ Base Price) ^ ε\n\nA standard constant-elasticity demand curve. ε is assumed stable over the price range considered, which is why the bounds in columns G and H should be kept within a range where that assumption is defensible — typically ±15–20%."]
[null,"Price elasticity (ε)","The % change in units demanded per 1% change in price.\n•  ε = −1.5 — a 10% increase costs about 15% of units (elastic)\n•  ε = −0.6 — a 10% increase costs only about 6% of units (inelastic)\nProducts with less negative elasticity absorb price increases better."]
[null,"Contribution per unit","Price minus variable cost. It moves with price across scenarios. Fixed costs are excluded — this is a contribution model, not a full P&L, so the optimum here maximises contribution, not net profit. Where fixed costs are step-functions of volume, that distinction matters."]
[null,"The Optimisation Model"]
[]
[null,"Decision variables","Five continuous variables: the price change % for each product, cells $I$12:$I$16 on Sheet 5."]
[null,"Objective function","Maximise total contribution, cell $M$17:\n\n   max  Σᵢ  qᵢ(pᵢ) × (pᵢ − vᵢ)      where  qᵢ(pᵢ) = q⁰ᵢ × (pᵢ/p⁰ᵢ)^εᵢ\n\nSubstituting the demand curve makes the objective a sum of power functions of the decision variables — smooth, continuously differentiable, and nonlinear. That is why the engine is GRG Nonlinear rather than Simplex LP."]
[null,"Constraints","1.  Total units ≥ volume floor — market presence and customer commitments\n2.  Total effort ≤ capacity ceiling — production burden\n3.  Total revenue ≥ revenue floor — covenants, overhead absorption, optics\n4.  Units by product ≥ product floor — no line quietly abandoned\n5.  Price Δ ≥ discount authority (per product)\n6.  Price Δ ≤ pricing-power ceiling (per product)\n\nConstraints 5 and 6 are simple bounds. Constraints 1–4 are portfolio constraints that couple the five products together — they are the reason this is an optimisation problem rather than five independent pricing calculations."]
[null,"Solver settings","Engine: GRG Nonlinear. Multistart enabled with 100 sample points, \"Assume Non-Negative\" switched off (price changes may legitimately be negative), automatic scaling on, convergence 0.0001. Multistart matters: a constant-elasticity objective under coupled constraints is not guaranteed to be concave, so a single-start GRG run can settle on a local optimum. Multistart re-solves from many starting points and keeps the best."]
[null,"Reading the Answer"]
[]
[null,"Binding vs slack constraints","A binding constraint is one the optimum sits exactly on. It is the rule costing you contribution: relax it and the objective improves; tighten it and the objective falls. A slack constraint is not driving the answer at all and should be dropped from the discussion.\n\nOn the shipped assumptions only the volume floor binds. Products B through E are pinned to their pricing-power ceilings, so the model would price them higher if you let it, and Product A sits in the interior — it is the swing lever the optimizer uses to buy back the units the volume floor demands. It buys them from A because A is the most elastic and lowest-contribution product, so units are cheapest to acquire there. That is a real commercial recommendation, and it is one no one produced by hand."]
[null,"The interior optimum benchmark","For a single product with no constraints, contribution is maximised at P* = v × ε ÷ (1 + ε). This exists only where ε < −1. For inelastic products — D at −0.8 and E at −0.6 — contribution rises without limit as price rises, and an unconstrained optimizer prices them into absurdity.\n\nThis is the single most important thing to understand about the model. Where the interior optimum is far above the solved price, the answer is being set by your ceiling, not by the mathematics. The optimizer is then not telling you what the price should be — it is telling you that your assumption about how far the market can be pushed is the entire decision. Test that assumption before you present the number."]
[null,"Sensitivity discipline","Change one bound at a time and re-solve. The change in the objective is the value of that business rule — a shadow price computed the honest way. If loosening the volume floor by 2% adds materially to contribution, that is a concrete negotiation to have with sales, priced."]
[null,"Limitations"]
[]
[null,"Stylised model","Illustrative synthetic data. No fixed costs, no hard capacity constraint, no customer segmentation, no multi-period dynamics, no inventory. A production pricing system would model all of them."]
[null,"Elasticity estimates","Elasticities are inputs, not measurements, and the answer is sensitive to them. If Product E is truly −1.2 rather than −0.6, its price increase destroys contribution instead of creating it. Calibrate against historical price moves or research before trusting the output, and re-solve at the low and high end of your elasticity range to see whether the recommendation survives."]
[null,"No cross-price effects","Each product's demand depends only on its own price. Real portfolios cannibalise: raising the price of Product D pushes some customers to Product C. Adding cross-elasticity terms would change the mix answer, usually reducing the gain from widening price gaps."]
[null,"No competitive response","Competitors are assumed not to react. In practice price increases invite entry and switching. This is a partial-equilibrium, single-firm model."]
[null,"Local vs global optima","Multistart makes a good global solution likely but does not prove one. Treat the output as a strong candidate to be reasoned about, not a proof."]