Signature
E_c1 = c_low + (c_high - c_low) / (N + 1); E_p = c_low + 2 * (c_high - c_low) / (N + 1); M_w = E_p - E_c1
| Inputs | Definition | Unit |
|---|---|---|
c_low | Lower end of the range from which each supplier's unit cost is drawn | currency per unit, for example GBP per pack |
c_high | Upper end of the cost range, at least c_low | currency per unit |
N | Number of suppliers that submit bids, at least 2 | count |
E_c1 | Expected value of the lowest of the N unit costs, the expected cost of the winning supplier | currency per unit |
|---|---|---|
E_p | Expected price per unit paid by the purchaser, the expected second-lowest of the N unit costs | currency per unit |
M_w | Expected price less the expected cost of the winning supplier | currency per unit |
Function
Expected price and equilibrium bids of a single-winner reverse auction with independent uniform costs
Maps the lowest and highest possible unit costs c_low and c_high, the number of bidding suppliers N and, for a bid, one supplier's own cost c to the expected lowest cost E_c1, the expected price E_p the purchaser pays, the winner's expected margin M_w, the symmetric equilibrium bid b of a first-price (pay-as-bid) tender and the expected winning bid E_b, for a single-winner procurement auction in which each supplier knows only its own cost. HE-FM-AUCT-001 gives the expected costs, price and margin under the second-price rule, which by revenue equivalence is also the expected price under the first-price rule, and HE-FM-AUCT-002 gives the first-price bid and checks that its expected winning bid equals HE-FM-AUCT-001's price. HE-CF-AUCT-001 runs one tender under both rules and checks the closed forms by a seeded simulation. Both closed forms take the affine form of the Nash bargaining price HE-FM-BARG-001, a lower limit plus a weight times a range, but the weights 2 / (N + 1) and 1 / N come from order statistics of the cost draws, not from bargaining power (derived). The article's supply-risk comparison of one winner against two is an expected cost over delivery branches, HE-FM-CHN-001, with branch probabilities such as 0.81 that both suppliers deliver given by path products, HE-FM-CHN-002, so it is not restated here. The two-type screening of one supplier with a hidden cost is HE-FN-MECH-001, and the Medicare DMEPOS single payment amount, a median, maximum or 75th percentile of winning bids, is a programme rule and has no record here. Notation follows the Auction Theory article, with c_low and c_high for its lowest and highest possible unit costs.
Computational function
Computational function for one tender under both pricing rules and a seeded check of the uniform-cost closed forms
Runs one tender under both pricing rules and checks the closed forms of HE-FM-AUCT-001 and HE-FM-AUCT-002 by simulating many tenders with a fixed seed. In one tender the second-price rule pays the winner the second-lowest cost, since every supplier bids its cost, and the first-price rule pays the lowest equilibrium bid. The lowest of the bids is the min form used for observed prices in HE-FM-BOC-003, and the scalar line writes the second-lowest of three costs as the median of three. The simulation draws N uniform costs per tender, sorts them, and averages the lowest cost, the second-lowest cost and the winning first-price bid, which converge to E_c1, E_p and E_b.
Inputs and outputs:
c_1,c_2andc_3are three suppliers' unit costs andc_highthe top of the cost range (currency per unit),Nthe number of bidders (3 in the scalar line). The chain returns the bidsb_1,b_2andb_3, the first-price pricep_FP, the second-price pricep_SPand their differenced(currency per unit). The R and Python functions takec_low,c_high,N, the number of simulated tendersSand a seed, and return the mean lowest cost, the mean second-price price, the mean first-price price and the closed-form price.Assumption: As in HE-AS-AUCT-001 to HE-AS-AUCT-006. The calculator line is for exactly three suppliers; the code handles any N of 2 or more. Equal costs are allowed in the scalar line and give a price equal to that cost under the second-price rule.
Worked example (the article's draw): With
c_1 = 2.60; c_2 = 3.20; c_3 = 4.40; c_high = 5; N = 3the bids areb_1 = 3.40; b_2 = 3.80; b_3 = 4.60, sop_FP = 3.40,p_SP = 3.20andd = 0.20; the same supplier wins under both rules.Worked example (seeded simulation, for reading against the R and Python code): With
c_low = 2; c_high = 5; N = 3; S = 100000and seed 2026, Python'srandommodule returns a mean lowest cost of 2.7485, a mean second-price price of 3.4959 and a mean first-price price of 3.4990, and R returns 2.7488, 3.5005 and 3.4992, against the closed forms 2.75 and 3.50. The standard error of the second-price mean is about 0.0021 at this S (derived from the variance of the second-lowest of three uniforms), so the two second-price means lie 1.95 and 0.25 standard errors from 3.50. The scalar worked example above is the one that runs in the calculator.Excel: With costs in cells named CostSupplierA, CostSupplierB and CostSupplierC, the range top in CostTopCF and the bidder count in BiddersCF, enter
=CostSupplierA+(CostTopCF-CostSupplierA)/BiddersCFand the same for B and C in BidSupplierA, BidSupplierB and BidSupplierC, then=MIN(BidSupplierA,BidSupplierB,BidSupplierC)in PriceFirstPrice and=MEDIAN(CostSupplierA,CostSupplierB,CostSupplierC)in PriceSecondPrice, the second-lowest of three costs. For the simulation with three bidders and a range bottom in CostBottomCF, paste 100,000 rows of uniform draws as values (not live RAND) into the rangeA2:C100001, named UniformDraws, enter=CostBottomCF+(CostTopCF-CostBottomCF)*A2in E2 and copy it across to G2 and down, then=SMALL(E2:G2,1)in H2,=SMALL(E2:G2,2)in I2 and=H2+(CostTopCF-H2)/BiddersCFin J2, copied down.=AVERAGE(H2:H100001),=AVERAGE(I2:I100001)and=AVERAGE(J2:J100001)give MeanLowestSim, MeanSecondPriceSim and MeanFirstPriceSim, and=STDEV(I2:I100001)/SQRT(ROWS(UniformDraws))gives SESecondPriceSim. More bidders need more draw and cost columns.R:
tender_sim <- function(cl, ch, N, S, seed) { if (N < 2 || ch < cl || S < 2) stop("needs N >= 2, c_high >= c_low and S >= 2"); set.seed(seed); m <- matrix(runif(S*N, cl, ch), S, N); srt <- t(apply(m, 1, sort)); lo <- srt[, 1]; sp <- srt[, 2]; fp <- lo+(ch-lo)/N; c(lowest = mean(lo), second_price = mean(sp), first_price = mean(fp), closed = cl+2*(ch-cl)/(N+1)) }tender_sim(2, 5, 3, 100000, 2026)returns 2.748819, 3.500529, 3.499212 and 3.5;tender_sim(2, 5, 5, 100000, 2026)returns 2.500546, 2.999899, 3.000437 and 3. Withclequal tochevery output is that cost, and N of 1 stops with the message.Python:
import randomthendef tender_sim(cl, ch, N, S, seed): assert N >= 2 and ch >= cl and S >= 2, "needs N >= 2, c_high >= c_low and S >= 2"; rng = random.Random(seed); T = [sorted(rng.uniform(cl, ch) for _ in range(N)) for _ in range(S)]; return dict(lowest=sum(t[0] for t in T)/S, second_price=sum(t[1] for t in T)/S, first_price=sum(t[0]+(ch-t[0])/N for t in T)/S, closed=cl+2*(ch-cl)/(N+1))Standard library only;tender_sim(2, 5, 3, 100000, 2026)returns lowest 2.74854, second_price 3.49587, first_price 3.49903 and closed 3.5;tender_sim(2, 5, 5, 100000, 2026)returns 2.49980, 2.99660, 2.99984 and 3.0. Equalclandchreturn that cost for every output, and N of 1 raises AssertionError.Test (the article's draw): With the costs 2.60, 3.20 and 4.40, a top of 5 and three bidders typed in, PriceFirstPrice is compared with 3.40 and PriceSecondPrice with 3.20, the article's hand values, at a tolerance of 0.005. Expected result TRUE. FALSE shows a second-price rule that pays the lowest cost (2.60), and doubling either price cell (6.80 or 6.40) or halving it (1.70 or 1.60) also gives FALSE. Excel check
=AND(ABS(PriceFirstPrice-3.4)<0.005,ABS(PriceSecondPrice-3.2)<0.005)Test (simulation against the closed form): With a fixed table of draws, MeanSecondPriceSim is compared with the closed-form price CostBottomCF + 2 (CostTopCF minus CostBottomCF) / (BiddersCF + 1) and must lie within 4 standard errors. Expected result TRUE. FALSE shows the helper column taking the lowest cost in place of the second-lowest, which with S = 100000 sits about 410 of its own standard errors below 3.50, and doubling or halving the MeanSecondPriceSim cell also gives FALSE. Excel check
=ABS(MeanSecondPriceSim-(CostBottomCF+2*(CostTopCF-CostBottomCF)/(BiddersCF+1)))<4*SESecondPriceSimCommon error (fresh random draws in the check): Using live RAND() in the draw table changes the simulated means at every recalculation, and with a 4 standard error band a correct sheet then fails about 6 times in 100,000 recalculations (normal approximation, derived), so the table is pasted as values or the seed is fixed in R and Python.
Source: Klemperer P. Auction theory: a guide to the literature. Author's copy dated May 1999, posted on the author's Nuffield College page (full text read), which states that it is published in Journal of Economic Surveys 1999;13(3):227-286, doi:10.1111/1467-6419.00083 (journal version not seen; page numbers below are the author's copy's). Appendix D, page 57, for the expected order statistics and the bids; Royal Swedish Academy of Sciences. Improvements to auction theory and inventions of new auction formats. Scientific background on the Sveriges Riksbank Prize in Economic Sciences in Memory of Alfred Nobel 2020. 12 October 2020 (full text read). Section 2.2 (Private Values) for the second-price and first-price rules.
b_1 = c_1 + (c_high - c_1) / N; b_2 = c_2 + (c_high - c_2) / N; b_3 = c_3 + (c_high - c_3) / N; p_FP = min(min(b_1, b_2), b_3); p_SP = max(min(c_1, c_2), min(max(c_1, c_2), c_3)); d = p_FP - p_SP
Try this function
Implementations
Excel
Excel expected lowest cost, price and margin of a uniform-cost reverse auction
With the cost range in cells named CostLowest and CostHighest and the number of bidders in NumberOfBidders, the formulas return the expected lowest cost in a cell named ExpLowestCost, the expected price in ExpWinningPrice and the winner's margin in WinnerMargin, in that order.
=CostLowest+(CostHighest-CostLowest)/(NumberOfBidders+1); =CostLowest+2*(CostHighest-CostLowest)/(NumberOfBidders+1); =ExpWinningPrice-ExpLowestCost
Assumptions
Independent uniform private costs on a common range in a reverse auction
Each supplier's unit cost is an independent draw from the same uniform distribution on the interval [c_low, c_high] and is known only to that supplier, the independent private-values setting of Vickrey described in section 2.2 of the 2020 Nobel scientific background and the uniform case of Klemperer's Appendix D. Costs that are correlated, such as a shared input price, or drawn from different ranges for an incumbent and an entrant, break the closed form.
Truthful second-price bidding with no binding price ceiling and at least two bidders
Each supplier bids its own cost, its dominant strategy under the second-price rule (the mirror for a reverse auction of the statement in section 2.2 of the Nobel background that each bidder's dominant strategy is to bid her value). One supplier wins the whole contract, there is no reserve price below c_high that could bind, and N is at least 2 so that a second-lowest bid exists.
Risk-neutral symmetric suppliers for the first-price equality of the expected price
The statement that the first-price rule yields the same expected price rests on revenue equivalence, which section 2.2 of the Nobel background reports for risk-neutral, ex-ante symmetric bidders, and which Vickrey proved first for a uniform distribution of values. The second-price result for E_p does not need risk neutrality, since Klemperer's section 5 (Risk Aversion) states that risk aversion has no effect on a bidder's optimal second-price strategy.
Worked examples
Three suppliers with unit costs uniform on [2.00, 5.00] GBP per pack
The article's illustrative tender. The expected lowest cost is 2.00 plus 3.00 / 4, which is 2.75, the expected price is 2.00 plus 6.00 / 4, which is 3.50, and the winner's expected margin is 0.75 per pack, GBP 750,000 on 1,000,000 packs.
c_low = 2; c_high = 5; N = 3; E_c1 = 2.75; E_p = 3.5; M_w = 0.75
Two suppliers bidding for the same uniform-cost tender
The article's evaluation section. With only two bidders the expected price rises to GBP 4.00 per pack and the winner's expected margin to GBP 1.00.
c_low = 2; c_high = 5; N = 2; E_c1 = 3; E_p = 4; M_w = 1
Five suppliers bidding for the same uniform-cost tender
The article's evaluation section. Five bidders bring the expected price down to GBP 3.00 per pack, with an expected margin of GBP 0.50.
c_low = 2; c_high = 5; N = 5; E_c1 = 2.5; E_p = 3; M_w = 0.5
Ninety-nine suppliers approach the lowest possible cost
Limiting case with illustrative inputs. With 99 bidders the expected price is 2.06 and the margin 0.03 per pack, close to c_low and zero, since the gap (c_high minus c_low) / (N + 1), which E_c1 adds to c_low once and E_p twice, shrinks as N grows (derived).
c_low = 2; c_high = 5; N = 99; E_c1 = 2.03; E_p = 2.06; M_w = 0.03
Common errors
Selling-auction weight applied to procurement costs
Klemperer's expected revenue of a selling auction, v_low + ((n minus 1) / (n + 1)) (v_high minus v_low), is the expected second-highest value. Copying it to costs gives the expected second-highest cost, not the second-lowest. With three suppliers the two coincide at 3.50, so the article's example does not reveal the slip, but with five suppliers it gives GBP 4.00 in place of GBP 3.00 and it rises, rather than falls, as bidders are added (computed here).
Expected lowest cost taken as the tender price
The purchaser pays the second-lowest cost under the second-price rule, or a bid above cost under the first-price rule, never the winner's cost. Budgeting at the expected lowest cost of 2.75 in place of the price of 3.50 understates spend by 0.75 per pack, GBP 750,000 on the article's 1,000,000 packs (computed here).
Number of rivals used in place of the number of bidders
N counts every bidding supplier, the winner included. Entering the two rivals of a three-supplier tender gives an expected price of 4.00 in place of 3.50 and a margin of 1.00 in place of 0.75 (computed here).
Sources
Klemperer on expected order statistics of uniform values and second-price revenue
Klemperer P. Auction theory: a guide to the literature. Author's copy dated May 1999, posted on the author's Nuffield College page (full text read), which states that it is published in Journal of Economic Surveys 1999;13(3):227-286, doi:10.1111/1467-6419.00083 (journal version not seen; page numbers below are the author's copy's). Appendix D (Examples Using the Uniform Distribution), page 57, states that the expected k-th highest value among n values independently drawn from the uniform distribution on [v_low, v_high] is v_low + ((n + 1 minus k) / (n + 1)) (v_high minus v_low), and, under the heading Bidding with Independent Private Values, Revenue Equivalence, and Marginal Revenues, for risk-neutral bidders with independent private values, that everyone bids her true value in a second-price auction, so the seller's expected revenue is the expected second-highest value, v_low + ((n minus 1) / (n + 1)) (v_high minus v_low). Section 5 (Risk Aversion) states that risk aversion has no effect on a bidder's optimal second-price strategy. The procurement forms E_c1 and E_p are the printed fact with k = N and k = N minus 1; the reverse-auction reading is derived here.
Nobel 2020 background on independent private values, truthful second-price bids and revenue equivalence
Royal Swedish Academy of Sciences. Improvements to auction theory and inventions of new auction formats. Scientific background on the Sveriges Riksbank Prize in Economic Sciences in Memory of Alfred Nobel 2020. 12 October 2020 (full text read). Section 2.2 (Private Values) describes Vickrey's model of statistically independent private valuations with risk-neutral, ex-ante symmetric bidders, states that in the second-price auction each bidder's dominant strategy is to bid exactly what the object is worth to her, and that all four standard formats yield the same expected revenue, the revenue-equivalence theorem. Under the heading Extensions and Further Research in the same section it states that Vickrey proved the theorem for a uniform distribution of values in 1961, and section 2.1 (A General Framework) states that first-price auctions are common vehicles for procuring goods and services and for awarding public contracts.
Canonical Identity
Stable URI · Machine-readable · Resolvable · CC BY 4.0
