Theorem 2, pp. 494–495 — optimal dual-sourcing quantities region by region (corrected Ω₃–Ω₅ bounds)
ProvedMitigateSupplyRisk.DualSourcing.theorem_2Consider the two-supplier random-capacity newsvendor at reliability indices and suppose that
- demand is deterministic, equal to ;
- there is no committed cost, , so ;
- for , that is, ;
- each capacity-loss distribution is strictly increasing on its support , with , so that ;
- (a labelling of the suppliers).
Write , , and . Then an optimal procurement vector , maximizing over all , is given by
In the claim is that some solves the displayed equation and makes optimal.
The regions trace the firm's strategy as demand grows: single sourcing from the preferred supplier when capacity is ample (), dual sourcing with total order equal to demand (), dual sourcing with over-ordering, the quantity hedge (, , ), and finally ordering both full capacities (, ).
Formalization Note. Three corrections to the printed theorem. (i) The printed bounds of use where belongs and vice versa; as printed, is empty and overlaps , and the printed formula can order more than from supplier 1 (e.g. uniform losses on , , , , gives ). The bounds above are the corrected ones. (ii) Hypothesis 4 is added: without the claim is false (exponential losses with give a counterexample), and strict increase makes and the equation well posed; continuity of is the paper's own assumption. (iii) Hypothesis 3 is added; it makes and evaluate inside . is the generalized inverse , the ordinary inverse under hypothesis 4. Deterministic demand is the point mass . Optimal vectors need not be unique (in any is optimal), so the theorem asserts that the displayed vector is an optimal one. In the Lean statement supplier 1 is index 0 and supplier 2 is index 1.
import Mathlib import Definitions.Def_MitigateSupplyRisk_DualSourcing_Model import Definitions.Def_MitigateSupplyRisk_DualSourcing_Regions open MeasureTheory ProbabilityTheory
namespace MitigateSupplyRisk.DualSourcing
/-- Theorem 2 (Wang, Gilland, Tomlin 2010, pp. 494–495), with the region bounds of `Ω₃, Ω₄, Ω₅`
corrected (the printed `min`/`max` are swapped) and the hypotheses the printed statement needs.
Demand is deterministic (`μ = δ_x`, `x ≥ 0`), `η = 0`, `0 < φ_i < 1`, each capacity-loss CDF
`G_i(·, a_i)` is strictly increasing on its support `[0, b_i]` with `b_i ≤ K_i` (so
`G_i(K_i, a_i) = 1`), and `φ₁ G₁(K₁) ≥ φ₂ G₂(K₂)`. With `A₁ = G₁^{-1}(φ₂)`, `A₂ = G₂^{-1}(φ₁)`,
`B = G₁^{-1}((φ₂/φ₁) G₂(K₂))` and `S = K₁ + K₂`, an optimal procurement vector is
* `Ω₁` (`x ≤ K₁ − B`): `(x, 0)`;
* `Ω₂` (`K₁ − B < x ≤ S − (A₁ + A₂)`): `(x − q₂, q₂)` for some `q₂ ∈ [0, x]` solving
`φ₁ G₁(K₁ − (x − q₂)) = φ₂ G₂(K₂ − q₂)`;
* `Ω₃` (`S − (A₁ + A₂) < x ≤ S − max(A₁, A₂)`): `(x − (K₂ − A₂), x − (K₁ − A₁))`;
* `Ω₄` (`S − max(A₁, A₂) < x ≤ S − min(A₁, A₂)`): `(x − (K₂ − A₂), K₂)` if `A₁ ≥ A₂`, and
`(K₁, x − (K₁ − A₁))` if `A₁ < A₂`;
* `Ω₅ ∪ Ω₆` (`x > S − min(A₁, A₂)`): `(K₁, K₂)`.
Supplier 1 of the paper is index `0`, supplier 2 is index `1`. -/
theorem theorem_2 (M : Model) (a : Fin 2 → ℝ) (x : ℝ) (hx : 0 ≤ x)
(hη : ∀ i, M.η i = 0)
(hφpos : ∀ i, 0 < M.phi i) (hφlt : ∀ i, M.phi i < 1)
(hsupp : ∀ i, ∃ b : ℝ, 0 < b ∧ b ≤ M.K i ∧ M.G i b (a i) = 1 ∧
StrictMonoOn (fun t => M.G i t (a i)) (Set.Icc 0 b))
(hord : M.phi 1 * M.G 1 (M.K 1) (a 1) ≤ M.phi 0 * M.G 0 (M.K 0) (a 0)) :
-- Ω₁
(x ≤ M.K 0 - M.B a →
M.IsOptimal (Measure.dirac x) a ![x, 0]) ∧
-- Ω₂
(M.K 0 - M.B a < x ∧ x ≤ M.K 0 + M.K 1 - (M.A1 a + M.A2 a) →
∃ q₂ : ℝ, 0 ≤ q₂ ∧ q₂ ≤ x ∧
M.phi 0 * M.G 0 (M.K 0 - (x - q₂)) (a 0) = M.phi 1 * M.G 1 (M.K 1 - q₂) (a 1) ∧
M.IsOptimal (Measure.dirac x) a ![x - q₂, q₂]) ∧
-- Ω₃ (corrected upper bound)
(M.K 0 + M.K 1 - (M.A1 a + M.A2 a) < x ∧ x ≤ M.K 0 + M.K 1 - max (M.A1 a) (M.A2 a) →
M.IsOptimal (Measure.dirac x) a ![x - (M.K 1 - M.A2 a), x - (M.K 0 - M.A1 a)]) ∧
-- Ω₄ (corrected bounds)
(M.K 0 + M.K 1 - max (M.A1 a) (M.A2 a) < x ∧ x ≤ M.K 0 + M.K 1 - min (M.A1 a) (M.A2 a) →
(M.A2 a ≤ M.A1 a → M.IsOptimal (Measure.dirac x) a ![x - (M.K 1 - M.A2 a), M.K 1]) ∧
(M.A1 a < M.A2 a → M.IsOptimal (Measure.dirac x) a ![M.K 0, x - (M.K 0 - M.A1 a)])) ∧
-- Ω₅ ∪ Ω₆ (corrected lower bound of Ω₅)
((M.K 0 + M.K 1 - min (M.A1 a) (M.A2 a) < x ∧ x ≤ M.K 0 + M.K 1) ∨ M.K 0 + M.K 1 < x →
M.IsOptimal (Measure.dirac x) a ![M.K 0, M.K 1]) := by sorry
end MitigateSupplyRisk.DualSourcing
Confirmed by the mission captain (proposal self-audit).
Confirmed by the moderator at approval.