Reserve Prices and Optimal Auctions
A reserve price is a floor: the seller announces that no sale happens below
r, and the auction proceeds normally above it. It looks like a small operational detail bolted onto an auction. It is not. Roger Myerson’s 1981 paper Optimal Auction Design (Math. Oper. Res. 6(1):58–73, February 1981, DOI10.1287/MOOR.6.1.58— read for this note from a Princeton course mirror of the JSTOR scan) showed that for a single item and independent private values, the revenue-maximizing auction among all conceivable auctions is simply the second-price auction plus one well-chosen reserve — and that this auction is deliberately, structurally inefficient. Myerson says so in his own second paragraph: “Although these auctions generally sell the object at a discount below what the highest bidder is willing to pay, and sometimes they do not even sell to highest bidder, we shall prove that no other auction mechanism can give higher expected utility to the seller.” It sometimes refuses to sell to a bidder who genuinely wants the item, and that refusal is not a bug, an oversight, or a bargaining tactic; it is the source of the extra revenue. The machinery that makes this precise is the virtual valuationψ(v) = v − (1 − F(v)) / f(v), and the optimal auction is “run a Vickrey auction on virtual values instead of real ones, and withhold the item if every virtual value is negative” (Roughgarden, CS364A Lecture 5). This note derives that, computes the uniform-[0,1]reserve (it is1/2, and — surprisingly — it does not depend on the number of bidders at all), measures the whole thing in C, and then measures the result that deflates it: Bulow and Klemperer’s theorem that one extra bidder is worth more than any reserve price you could ever choose.
This note is the revenue-maximization rung of Games and Strategic Systems in C MOC’s P4 stage. Its siblings cover the formats (First-Price and Second-Price Auctions, English and Dutch Auctions) and the equivalence between them (Revenue Equivalence). This note covers what happens when you stop asking which format to use and start asking what the best possible mechanism is — which is the doorway into Mechanism Design proper.
1. Mental Model: The Seller Is a Monopolist in Disguise
The single most useful reframing in this entire subject, due to Bulow and Roberts (1989) and popularised by Paul Klemperer’s survey, is this: an auction seller is a price-discriminating monopolist, and the optimal auction is the usual “marginal revenue equals marginal cost” rule wearing a costume.
Bulow and Roberts open The Simple Economics of Optimal Auctions (Journal of Political Economy 97(5), October 1989) by saying exactly that: “We show that the seller’s problem in devising an optimal auction is virtually identical to the monopolist’s problem in third-degree price discrimination. More generally, many of the important results and elegant techniques developed in the field of mechanism design can be reinterpreted in the language of standard micro theory.” Their motivation is pedagogical and worth repeating, because it is the reason this reframing exists at all: “Unfortunately, this field has been a difficult one for most economists, seemingly bearing little relation to traditional price theory. This paper greatly simplifies the analysis of optimal auctions by showing that it is essentially equivalent to the analysis of standard monopoly third-degree price discrimination. The auctions problem can therefore be solved by applying the usual logic of marginal revenue versus marginal cost.” Their name for Myerson’s mechanism — the “second marginal revenue auction” — is the most descriptive one in the literature: it is a second-price auction run on marginal revenues instead of values.
Klemperer relays the same point (Auction Theory: A Guide to the Literature, §4):
“Bulow and Roberts (1989) greatly simplified the analysis of optimal auctions by showing that the problem is, in their own words, essentially equivalent to the analysis of standard monopoly third-degree price discrimination. […] So in an optimal auction the objects are allocated to the bidders with the highest marginal revenues, just as a price-discriminating monopolist sells to the buyers with the highest marginal revenues. And just as a monopolist should not sell below the price where marginal revenue equals marginal cost, so an auctioneer should not sell below a reserve price set equal to the value of the bidder whose marginal revenue equals the value to the auctioneer of retaining the unit.”
Everything else in this note is bookkeeping on top of that sentence. A shop owner with a downward-sloping demand curve does not price at marginal cost; she prices where marginal revenue equals marginal cost, and deliberately fails to serve every customer whose willingness to pay lies between those two points. Those unserved customers are not a market failure she is trying to fix — they are the price she pays for charging everyone else more. The auction reserve price is exactly the same object, and the bidders it turns away are exactly those unserved customers.
flowchart TB subgraph MONO["Monopolist selling to a continuum of buyers"] M1["Demand curve<br/>price p, quantity q = 1 − F(p)"] M2["Marginal revenue<br/>MR(q) = derivative of p(q)·q"] M3["Set MR = marginal cost<br/>Serve only buyers above that price"] M4["Buyers between MC and p:<br/>willing to pay, deliberately unserved"] M1 --> M2 --> M3 --> M4 end subgraph AUCT["Auctioneer selling one item to n bidders"] A1["Value distribution F,<br/>bidder value v"] A2["Virtual valuation<br/>psi(v) = v − (1−F(v))/f(v)"] A3["Allocate to highest psi,<br/>only if psi ≥ seller's own value"] A4["Bidders with 0 ≤ v < psi-inverse(0):<br/>willing to pay, deliberately unserved"] A1 --> A2 --> A3 --> A4 end M2 -. "same object" .-> A2 M4 -. "same deliberate loss" .-> A4
What this shows and what to take from it: the two columns are the same computation. The virtual valuation ψ(v) is the monopolist’s marginal revenue evaluated at the price equal to v; the reserve price is the monopoly price; and the bidders excluded by the reserve are the customers a monopolist deliberately declines to serve. The insight to carry away is that “the revenue-maximizing auction is inefficient” should be no more surprising than “monopoly pricing is inefficient” — it is literally the same statement, and every intuition you have about the second carries over to the first.
2. Virtual Valuations, Symbol by Symbol
2.1 The setting
There is one indivisible item and n bidders indexed i = 1 … n. Bidder i privately knows a value v_i — the most money they would part with for the item. Values are independent private values (IPV): v_i is drawn from a distribution F_i with density f_i on [0, v_max], draws are independent across bidders, and knowing someone else’s value would not change your own. (Drop that last assumption and you are in the world of The Winner’s Curse, where the analysis is completely different.)
The seller knows the distributions F_1 … F_n but not the realizations v_1 … v_n. That asymmetry is the whole problem. Roughgarden is explicit that in practice these distributions “are typically derived from data, such as bids in past auctions” (Lecture 5, §1.3) — a point that turns out to matter enormously in production, and which the Production Notes return to.
A direct-revelation mechanism is a pair of functions:
- an allocation rule
x_i(b)— given the bid profileb = (b_1, …, b_n), the probability bidderigets the item, withΣ_i x_i(b) ≤ 1because there is only one item; - a payment rule
p_i(b)— how much bidderipays.
We restrict to dominant-strategy incentive compatible (DSIC) mechanisms, meaning truthful bidding b_i = v_i is optimal for each bidder regardless of what anyone else does. This is not a real restriction: the Revelation Principle (see The Revelation Principle) says any equilibrium outcome of any mechanism can be replicated by a truthful direct mechanism, and Roughgarden notes the optimal auctions derived below “are optimal even amongst the much larger set of Bayesian incentive compatible mechanisms” — so a first-price format cannot beat them at equilibrium either.
2.2 The derivation, step by step
The starting point is Myerson’s payment identity: in any DSIC mechanism, the payment rule is forced by the allocation rule. Specifically,
p_i(b_i, b_-i) = ∫₀^{b_i} z · x_i′(z, b_-i) dz
Reading this symbol by symbol: b_-i is everyone else’s bids held fixed; x_i(z, b_-i) is the probability bidder i wins if they bid z; x_i′ is its derivative in z; and the integral accumulates “value times the rate at which extra bidding buys you allocation.” For a second-price auction x_i(z, b_-i) is a step function that jumps from 0 to 1 at the highest competing bid B, so x_i′ is a spike of size 1 at B, and the integral collapses to exactly B — the second-highest bid. The identity reproduces the Vickrey rule as a special case.
Now compute expected revenue. Roughgarden’s Lecture 5 does this in six steps; the three that do real work are:
Step 2 — reverse the order of integration. The expected payment of bidder i is a double integral over z (the integration variable of the payment identity) and v_i (the draw). Swapping them turns the inner integral ∫_z^{v_max} f_i(v_i) dv_i into 1 − F_i(z), the survival function:
E[p_i] = ∫₀^{v_max} (1 − F_i(z)) · z · x_i′(z, v_-i) dz
Step 3 — integrate by parts, taking f = (1 − F_i(z)) · z and g′ = x_i′(z, v_-i). The boundary term vanishes at both ends (z = 0 kills it at the bottom; 1 − F_i(v_max) = 0 kills it at the top — remember this, §8.2 breaks it deliberately), leaving:
E[p_i] = ∫₀^{v_max} [ z − (1 − F_i(z)) / f_i(z) ] · x_i(z, v_-i) · f_i(z) dz
Step 4 — name the bracket. That bracket is the virtual valuation:
ψ_i(v_i) = v_i − (1 − F_i(v_i)) / f_i(v_i)
v_i— the bidder’s actual value; what you would love to charge them.F_i(v_i)— the probability a draw fromF_icomes in at or belowv_i.1 − F_i(v_i)— the probability a draw exceedsv_i; the “how much of the demand curve is above this price” term.f_i(v_i)— the density atv_i.(1 − F_i(v_i)) / f_i(v_i)— the inverse hazard rate, and the amount of revenue you must forfeit because you do not knowv_iin advance. Roughgarden calls it the “information rent” earned by the bidder.
Because the remaining expression is an expectation over z ~ F_i, summing over bidders gives the punchline:
EXPECTED REVENUE = EXPECTED VIRTUAL WELFARE
E[ Σ_i p_i(v) ] = E[ Σ_i ψ_i(v_i) · x_i(v) ]
Roughgarden’s own comment is the right one: “It is shocking that a formula as simple as this holds. It says that even though we only care about payments, we can focus on an optimization problem that concerns only the mechanism’s allocation rule.”
flowchart LR P["Payment rule<br/>p_i(v)<br/>(what we care about)"] MPI["Myerson payment identity<br/>payments determined by allocation"] DI["Double integral<br/>over z and v_i"] SW["Swap integration order<br/>-> survival function 1−F(z)"] IBP["Integrate by parts<br/>boundary terms vanish"] VV["Virtual valuation<br/>psi(v) = v − (1−F(v))/f(v)"] VW["EXPECTED REVENUE<br/>= EXPECTED VIRTUAL WELFARE"] P --> MPI --> DI --> SW --> IBP --> VV --> VW VW --> OPT["Maximize pointwise:<br/>allocate to argmax psi,<br/>if that psi ≥ 0"]
What this shows and what to take from it: the chain converts a hard optimization (over payment rules, coupled to incentive constraints) into a trivial one (pointwise, over allocation rules). Once you have the last box, you no longer optimize an auction — you just evaluate n numbers per input and take the maximum. The intellectual work is entirely in getting to the last box.
2.3 The optimal auction
Because expected revenue is an expectation of virtual welfare, and the seller chooses x(v) freely for each v, the optimum is obtained pointwise: for each valuation profile, allocate to whoever maximizes Σ_i ψ_i(v_i) x_i(v). For a single item that means:
Give the item to the bidder with the highest virtual valuation, provided that virtual valuation is non-negative. If every virtual valuation is negative, keep the item.
One condition is needed for this to actually be implementable. The allocation rule must be monotone (bidding higher must never make you less likely to win) or no DSIC payment rule exists. Monotonicity holds if ψ is increasing:
Definition (regularity).
Fis regular ifv − (1 − F(v)) / f(v)is (strictly) increasing. — Roughgarden L5, Def. 3.1; Hartline, Mechanism Design and Approximation, Def. 3.3.1
Hartline lists uniform, normal and exponential distributions as regular, and notes that “many relevant distributions are irregular, e.g. bimodal,” requiring an ironing procedure that flattens the non-monotone stretches of ψ (§8.1 below).
When bidders are i.i.d. (all F_i = F) and F is regular, all bidders share the same increasing ψ, so the highest virtual value belongs to the highest actual value. The rule collapses to something you have used:
Optimal auction for i.i.d. regular bidders = the Vickrey auction with reserve price
r* = ψ⁻¹(0).
Roughgarden: “for i.i.d. bidders and a regular valuation distribution, eBay (with a suitable opening bid) is the optimal auction format! Given the richness of the DSIC auction design space, it is amazing that such a simple and practical auction pops out as the optimal one.”
Hartline gives the same quantity a name: ψ⁻¹(0) is the monopoly price of F — “the posted price that obtains the highest expected virtual surplus” (Def. 3.3.4). Which brings us back to §1: the reserve is the monopoly price, full stop.
3. The Uniform Case: Why the Reserve Is 1/2, and Why n Does Not Appear
3.1 The one-line computation
Take F uniform on [0, 1], so F(v) = v and f(v) = 1 on that interval. Then
ψ(v) = v − (1 − F(v)) / f(v) = v − (1 − v) / 1 = 2v − 1
ψ is strictly increasing (slope 2), so uniform [0,1] is regular. Setting ψ(r) = 0 gives r* = 1/2.
Note immediately what is absent from that computation: n. The virtual valuation of a bidder “depends on its own valuation and distribution, and not on those of the others” (Roughgarden L5, Step 4). Whether you face one bidder or one thousand, the value at which a uniform [0,1] bidder’s marginal revenue crosses zero is 1/2.
3.2 Why this feels wrong, and why it is right
The intuition that fights this is: “with more bidders, competition is already high, so surely I need less of a reserve.” And with fifty bidders, a reserve of 1/2 is almost never binding, so it looks like it should not matter. But “almost never binding” is not the same as “the wrong level.” The reserve only ever does anything in the event that every bidder came in low; conditional on that event, the seller is facing a single-buyer monopoly-pricing problem against the distribution F, and that problem’s answer does not know how many bidders were rejected on the way there.
Klemperer states the result and its reason cleanly:
“One of the more striking results of the basic analysis of optimal auctions is that if bidders have independent private values, the seller’s reserve price is both independent of the number of bidders, and also well above the seller’s cost. The reason is that the optimal reserve price is where marginal revenue equals the seller’s cost, and a bidder’s marginal revenue is independent of other bidders’ marginal revenues when values are independent.”
The independent in “independent private values” is doing all the work. §8.4 shows what happens when it fails.
3.3 The exact revenue function
Since expected revenue equals expected virtual welfare, and a second-price auction with reserve r allocates to the highest bidder exactly when v_(1) ≥ r, we can write the revenue in closed form. The highest of n i.i.d. uniform draws has density n v^{n-1}, so:
Rev(n, r) = ∫_r^1 (2v − 1) · n v^{n−1} dv
= n [ (2 / (n+1)) (1 − r^{n+1}) − (1/n)(1 − r^n) ]
= (2n / (n+1)) (1 − r^{n+1}) − (1 − r^n)
Differentiating in r:
d Rev / dr = −(2n/(n+1)) · (n+1) r^n + n r^{n−1}
= −2n r^n + n r^{n−1}
= n · r^{n−1} · (1 − 2r)
For r ∈ (0,1) the factor n · r^{n−1} is strictly positive, so the sign of the derivative is the sign of (1 − 2r): positive below 1/2, negative above. The unique maximum is at r = 1/2, for every n. The n-dependence cancels out of the first-order condition entirely — it survives only as a positive multiplier that cannot move the root.
The exact cross-check
Verified with Python’s stdlib
fractions.Fraction, so no floating point is involved and a rounding artefact cannot masquerade as a result (script:exact.py, reproduced in §6.4).
n | Vickrey, r = 0 | r = 1/3 | r = 1/2 | r = 2/3 | Vickrey with n+1, r = 0 |
|---|---|---|---|---|---|
| 1 | 0 | 2/9 | 1/4 | 2/9 | 1/3 |
| 2 | 1/3 | 32/81 | 5/12 | 31/81 | 1/2 |
| 3 | 1/2 | 14/27 | 17/32 | 1/2 | 3/5 |
| 4 | 3/5 | 736/1215 | 49/80 | 713/1215 | 2/3 |
| 5 | 2/3 | 1462/2187 | 43/64 | 1426/2187 | 5/7 |
| 6 | 5/7 | 1216/1701 | 321/448 | 3581/5103 | 3/4 |
| 7 | 3/4 | 4922/6561 | 769/1024 | 19427/26244 | 7/9 |
| 8 | 7/9 | 137792/177147 | 1793/2304 | 136501/177147 | 4/5 |
Two sanity anchors from the literature land exactly on this table: Roughgarden’s single-bidder monopoly price of 1/2 earning 1/4, and his two-bidder exercise in which “adding a reserve price of 1/2 turns out to be a net gain, raising the expected revenue from 1/3 to 5/12.” Both reproduce.
The rightmost column is a spoiler for §7. Read across row n = 3: the best reserve you can possibly choose lifts revenue from 1/2 to 17/32 = 0.53125. Adding a fourth bidder and using no reserve at all gets 3/5 = 0.6. That gap is the entire content of the Bulow–Klemperer theorem, and it is already visible here.
xychart-beta title "Expected revenue vs reserve price, n = 3 uniform[0,1] bidders" x-axis "reserve price r" [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0] y-axis "expected revenue" 0.0 --> 0.7 line [0.500, 0.501, 0.506, 0.515, 0.526, 0.531, 0.522, 0.483, 0.398, 0.245, 0.000]
What this shows and what to take from it: the revenue curve is extremely flat near the optimum and brutally steep past it. Between r = 0 and the optimal r = 0.5 the whole gain is 0.031 — about 6% of revenue. But push to r = 0.8 and you have lost more than you ever stood to gain. The asymmetry is the practical lesson: erring low costs you almost nothing; erring high costs you a lot. Ostrovsky and Schwarz relied on exactly this asymmetry when they deployed reserve prices at Yahoo! (see Production Notes), deliberately setting them below the theoretical optimum.
4. The Headline Consequence: Revenue-Maximizing Is Not Efficient
An auction is efficient (in the economists’ sense, which means allocatively efficient, nothing to do with running time) if the item ends up with whoever values it most. The Vickrey auction with no reserve is efficient by construction. The optimal auction is not, and it fails in two distinct ways.
4.1 Failure mode one — withholding
If every ψ_i(v_i) < 0, the optimal auction keeps the item. With n = 3 uniform bidders, that happens whenever all three values fall below 1/2 — probability (1/2)³ = 1/8 = 12.5%. In those cases somebody was willing to pay up to 0.49 for an item the seller values at zero, and no trade occurs. Aggregated over the whole distribution, running r = 1/2 instead of r = 0 destroys 6.26% of the achievable welfare for n = 3 (measured in §6.2; the exact figure below).
Myerson works exactly this example — uniform values on [0, 100], virtual valuation c_i(t_i) = 2t_i − 100, reserve 50 — and states the cost of it plainly (§5): “By announcing a reservation price of 50, the seller risks a probability (1/2)^n of keeping the object even though some bidder is willing to pay more than t_0 for it; but the seller also increases his expected revenue, because he can command a higher price when the object is sold. Thus the optimal auction may not be ex post efficient.” The (1/2)^n is the same 12.5% measured above at n = 3, and the scale-free version of §3’s result: Myerson’s reserve is 100/2, mine is 1/2, and neither depends on n.
His single-bidder explanation of why is the cleanest statement of the whole idea: “Ex post efficiency would require that the bidder must always get the object, as long as his value estimate is positive. But then the bidder would never admit to more than an infinitesimal value estimate, since any positive bid would win the object. So the seller would have to expect zero revenue if he never kept the object. In fact, the seller’s optimal policy is to refuse to sell the object for less than 50, which gives him expected revenue 25.” The willingness to withhold is not a way of extracting more from a given bidder; it is the only thing that makes the bidder reveal anything at all.
Roughgarden flags this as the point where the theory stops being comfortable: “recall that virtual valuations can be negative […] and if every bidder has a negative virtual valuation then the virtual welfare is maximized by not awarding the item to anyone. (We already saw in the single-bidder example that maximizing revenue entails not selling the item in some cases.)”
This is worth dwelling on because it is genuinely counter-intuitive from a systems perspective. A cache that refuses to serve a hit it could serve, a scheduler that idles a core with runnable work — those are bugs. Here it is the specification. The reserve is a commitment device: its value comes entirely from the sales it prevents, because preventing them is what makes the bidders who do buy pay more. A seller who quietly sells anyway when the reserve is not met has destroyed the mechanism (§8.5).
4.2 Failure mode two — allocating to the wrong bidder
The i.i.d. case hides this, because when all bidders share one increasing ψ, highest virtual value = highest actual value. Break symmetry and the two come apart. Roughgarden: “The optimal auction can get weird, and it does not generally resemble any auctions used in practice. For example, someone other than the highest bidder might win. The payment made by the winner seems impossible to explain to someone who hasn’t studied virtual valuations.”
Myerson gives the general uniform formula himself: with t_i uniform on [a_i, b_i] and no revision effects, “we get c_i(t_i) = 2t_i − b_i […] If b_i < b_j, then i may win the object even if t_i < t_j […] In effect, the optimal auction discriminates against bidders for whom the upper bounds on the value estimates are higher. This discrimination discourages such bidders from under-representing value estimates close to their high b_i bounds.” The worked instance below is that formula at b_W = 1, b_S = 2; the virtual valuations are Myerson’s, and only the measurement is mine.
Here is the smallest concrete instance, which I then measure:
- Bidder W (“weak”) has
v_W ~ U[0, 1]. ThenF_W(v) = v,f_W(v) = 1, andψ_W(v) = 2v − 1. - Bidder S (“strong”) has
v_S ~ U[0, 2]. ThenF_S(v) = v/2,f_S(v) = 1/2, so(1 − F_S)/f_S = (1 − v/2)/(1/2) = 2 − v, andψ_S(v) = v − (2 − v) = 2v − 2.
Both are regular (slope 2). But at the same value v, ψ_S(v) = ψ_W(v) − 1: the strong bidder’s virtual value is uniformly one unit lower. The optimal auction therefore hands the item to W whenever
2 v_W − 1 ≥ 2 v_S − 2 ⟺ v_W ≥ v_S − 1/2
subject to v_W ≥ 1/2 (else ψ_W < 0). So the weak bidder wins even when the strong bidder values the item up to 0.5 more. The optimal mechanism systematically discriminates in favour of the bidder who is likely to be cheap, precisely because that bidder’s participation is what disciplines the other one’s price. Klemperer notes the same asymmetry result from Myerson (1981) and Bulow and Roberts (1989): “a revenue-maximizing auction allocates objects to the bidder(s) with the highest marginal revenue(s) rather than to those with the highest value(s).”
Because the auction is DSIC, each winner pays their threshold value — the lowest value at which they still would have won:
- if W wins:
p_W = max(1/2, v_S − 1/2) - if S wins:
p_S = max(1, v_W + 1/2)
flowchart TB IN["values drawn:<br/>v_W uniform on 0 to 1<br/>v_S uniform on 0 to 2"] C1{"psi_W = 2v_W − 1 < 0<br/>AND psi_S = 2v_S − 2 < 0 ?"} HOLD["WITHHOLD<br/>nobody gets the item<br/>(25% of trials)"] C2{"psi_W ≥ psi_S ?<br/>i.e. v_W ≥ v_S − 1/2"} WW["W wins<br/>pays max(1/2, v_S − 1/2)"] SW["S wins<br/>pays max(1, v_W + 1/2)"] NOTE["of these, W wins with the<br/>LOWER value in 12.5% of all trials"] IN --> C1 C1 -- yes --> HOLD C1 -- no --> C2 C2 -- yes --> WW C2 -- no --> SW WW -.-> NOTE
What this shows and what to take from it: the decision tree of Myerson’s optimal auction for two asymmetric bidders. Two of the three leaves are things an efficient auction would never do: withhold from a willing buyer, and hand the item to the lower bidder. The percentages are measured (§6.3) and match exact calculation. The takeaway is that “optimal” in this literature means revenue-optimal, never good, and the two diverge by a measurable amount you can put a number on.
4.3 The measured cost
Running the mechanism above over 2 × 10⁶ trials on each of 20 seeds (program asym.c, §6.3):
| Quantity | Measured | Exact |
|---|---|---|
| Myerson revenue | 0.64588 ± 0.00034 | 31/48 = 0.645833… |
| Vickrey, no reserve | 0.41662 ± 0.00019 | 5/12 = 0.416666… |
Vickrey, best anonymous reserve (r ≈ 0.74) | 0.55726 ± 0.00025 | — |
| Item withheld entirely | 25.00% | 1/4 |
| Item given to the lower-valued bidder | 12.50% | 1/8 |
| Welfare destroyed vs. the efficient rule | 15.38% | — |
The exact revenue check is worth spelling out because it validates the simulation independently. Expected revenue equals expected virtual welfare, which here is E[max(X, Y)⁺] with X = 2v_W − 1 ~ U[−1, 1] and Y = 2v_S − 2 ~ U[−2, 2]:
E[max(X,Y)⁺] = ∫₀² P(max(X,Y) > z) dz
= ∫₀¹ [1 − ((z+1)/2)((z+2)/4)] dz + ∫₁² [1 − (z+2)/4] dz
= (1 − 23/48) + 1/8
= 25/48 + 6/48 = 31/48 = 0.645833…
which the Monte Carlo reproduces to 4 × 10⁻⁵. The simulation and the closed form were written independently and agreeing was not guaranteed; the first attempt at the closed form integrated only to 1 instead of 2 and disagreed with the simulation by 0.125, which is how the error was found.
Read the bottom row of the table as the headline of this note. Squeezing the last 16% of revenue out of this environment (relative to the best simple reserve auction) costs 15% of the social value created. That trade is the whole reason governments selling spectrum tend to state welfare, not revenue, as the objective — Roughgarden: “in government auctions (e.g., to sell wireless spectrum), the primary objective is welfare maximization — revenue is also important but is usually not the first-order objective.” See Ad Auctions and GSP for the opposite case, where the seller is a firm and revenue is unambiguously the objective.
5. Building It in C
The MOC’s discipline is that nothing is believed until it has been written and measured, so here is the reserve-price sweep as a self-contained C program. Everything below was compiled with gcc 16.1.1 -O2 and run on the machine that produced the numbers in §6.
5.1 A reproducible random number generator
Monte Carlo results are worthless without a stated seed and a stated trial count, and rand() differs across libc versions. Twelve lines of splitmix64 remove the dependency entirely:
static uint64_t st; /* the entire RNG state */
static uint64_t nxt(void){
uint64_t z = (st += 0x9E3779B97F4A7C15ULL); /* golden-ratio increment */
z = (z ^ (z >> 30)) * 0xBF58476D1CE4E5B9ULL; /* two xor-multiply-shift */
z = (z ^ (z >> 27)) * 0x94D049BB133111EBULL; /* avalanche rounds */
return z ^ (z >> 31);
}
static double u01(void){
return (double)(nxt() >> 11) * 0x1.0p-53; /* top 53 bits -> [0,1) */
}Line by line: st is a single 64-bit counter, so the generator has no warm-up and no correlation between streams seeded far apart. The increment is 2^64 / φ, chosen so successive states differ in many bits. The two multiply-xorshift rounds are the avalanche function. nxt() >> 11 keeps the top 53 bits, which is exactly the mantissa width of an IEEE-754 double, and 0x1.0p-53 is the hexadecimal float literal for 2⁻⁵³ — writing it this way rather than 1.0/9007199254740992.0 guarantees the constant is exact. Every run in this note seeds st = 0xC0FFEE * (seed_index + 1) + 12345.
5.2 One auction
static double spa(int n, double r, double *val, int *sold, double *welfare){
double hi = -1, sec = -1;
for (int i = 0; i < n; i++) { /* single pass: top two values */
double v = val[i];
if (v > hi) { sec = hi; hi = v; } /* new winner, old winner -> 2nd */
else if (v > sec) sec = v; /* new runner-up */
}
if (hi < r) { *sold = 0; *welfare = 0.0; return 0.0; } /* reserve not met */
*sold = 1; *welfare = hi;
return sec > r ? sec : r; /* pay max(2nd bid, reserve) */
}The only subtlety is the last line: with a reserve, the winner pays the larger of the second-highest bid and the reserve. Roughgarden states the rule the same way: “the payment rule charges the winner (if any) the second-highest bid or r, whichever is larger.” Getting this wrong — charging always the second bid, or always the reserve — silently breaks both the DSIC property and the revenue numbers, and it is the single most common bug when people first write this.
Note also that the program never simulates bidding. It uses values directly, because in a second-price auction truthful bidding is dominant (The Vickrey Auction) and a reserve does not change that: the reserve is just a phantom extra bid by the seller, and adding a bid to a Vickrey auction leaves everyone’s dominant strategy intact. A first-price implementation would need an equilibrium bid function and is a genuinely harder program.
5.3 Reporting variance, not a number
for (int s = 0; s < S; s++) { /* S independent seeds */
st = 0xC0FFEEULL * (s + 1) + 12345u;
double rev = 0;
for (long t = 0; t < T; t++) { ... rev += spa(n, r, val, &sold, &wf); }
double m = rev / T; sum += m; sumsq += m * m; /* per-seed mean */
}
double mean = sum / S;
double sd = sqrt(fmax(0.0, sumsq / S - mean * mean)); /* sd ACROSS seeds */The standard deviation reported everywhere in this note is the spread of the per-seed means, not the spread of individual auction revenues. That is the quantity that answers the question you actually care about (“if I re-ran this experiment, how different would my answer be?”). A single run is not a result: at T = 2 × 10⁵ and n = 3, individual auction revenues have a standard deviation around 0.22, while the per-seed mean has a standard deviation of 0.0005 — a factor of ~450, which is √T as it should be. Reporting the former would suggest the measurement is useless; reporting the latter shows it pins the fourth decimal place.
6. Measured Results
6.1 The sweep reproduces the closed form
./reserve 3 200000 20 — 20 seeds × 200,000 trials each, values i.i.d. U[0,1]:
r | mean revenue | sd across seeds | closed form | sold % | welfare lost % |
|---|---|---|---|---|---|
| 0.00 | 0.49982 | 0.00049 | 0.50000 | 100.00 | 0.000 |
| 0.10 | 0.50066 | 0.00048 | 0.50085 | 99.90 | 0.010 |
| 0.20 | 0.50542 | 0.00048 | 0.50560 | 99.21 | 0.159 |
| 0.30 | 0.51467 | 0.00047 | 0.51485 | 97.30 | 0.810 |
| 0.40 | 0.52547 | 0.00047 | 0.52560 | 93.60 | 2.560 |
| 0.45 | 0.52949 | 0.00049 | 0.52962 | 90.89 | 4.103 |
| 0.50 | 0.53113 | 0.00054 | 0.53125 | 87.49 | 6.255 |
| 0.55 | 0.52887 | 0.00063 | 0.52912 | 83.33 | 9.175 |
| 0.60 | 0.52129 | 0.00076 | 0.52160 | 78.36 | 12.993 |
| 0.70 | 0.48261 | 0.00100 | 0.48285 | 65.67 | 24.035 |
| 0.80 | 0.39748 | 0.00123 | 0.39760 | 48.79 | 40.970 |
| 0.90 | 0.24476 | 0.00124 | 0.24485 | 27.09 | 65.619 |
Every row agrees with the closed form to within 2 × 10⁻⁴, and the residual is systematically negative — the Monte Carlo is consistently a hair below the closed form. That is not bias in the simulation; it is the sampling error of the mean, and it is well inside one standard deviation of the per-seed spread at the small-r end. (It sits at roughly 0.4 sd at r = 0.5, which for 20 seeds is unremarkable.)
The sale probability column is its own check: at r = 0.5 with n = 3 the item should go unsold with probability (1/2)³ = 12.5%, and the measurement says 100 − 87.49 = 12.51%.
The welfare lost column at the optimum, 6.255%, is the price of the 6.25% revenue gain (0.53125 / 0.50000 = 1.0625). In this environment, revenue maximization buys one unit of revenue for almost exactly one unit of destroyed welfare. That coincidence is specific to n = 3 uniform, but the order of magnitude is the point.
6.2 r* = 1/2 at every n, measured
Running the same sweep at n = 2, 3, 5, 8 (columns are r, revenue at that r):
r | n = 2 | n = 3 | n = 5 | n = 8 |
|---|---|---|---|---|
| 0.00 | 0.33314 | 0.49982 | 0.66655 | 0.77771 |
| 0.20 | 0.36248 | 0.50542 | 0.66676 | 0.77772 |
| 0.40 | 0.40786 | 0.52547 | 0.66996 | 0.77790 |
| 0.50 | 0.41643 | 0.53113 | 0.67177 | 0.77815 |
| 0.60 | 0.40496 | 0.52129 | 0.66648 | 0.77658 |
| 0.80 | 0.29056 | 0.39748 | 0.55725 | 0.70682 |
| 0.90 | 0.17127 | 0.24476 | 0.37114 | 0.51922 |
r = 0.50 is the argmax of every column — and look at how the curve flattens as n grows. At n = 2 the reserve is worth +25% of revenue; at n = 8 it is worth +0.06%. The theory says the location of the optimum is n-independent; it says nothing about the height of the bump, and the height collapses. This is the seed of Bulow–Klemperer.
6.3 Other distributions: the reserve depends on F, still never on n
./dists sweeps three distributions at n = 2 and n = 5:
| Distribution | ψ(v) | predicted r* | argmax at n = 2 | argmax at n = 5 |
|---|---|---|---|---|
U[0,1] | 2v − 1 | 1/2 | 0.500 | 0.500 |
Exp(1), F = 1 − e^{−v} | v − 1 | 1 | 1.000 | 1.000 |
Equal-revenue, F = 1 − 1/v on [1, ∞) | 0 everywhere | undefined | flat (see §8.2) | flat (see §8.2) |
The exponential case is a clean second data point for the n-independence claim, and it is a one-line ψ computation: F(v) = 1 − e^{−v}, f(v) = e^{−v}, so (1 − F)/f = 1, giving ψ(v) = v − 1 and r* = 1, which happens to equal the distribution’s mean. (That coincidence is special to the exponential — the inverse hazard rate of an exponential is constant, which is the memorylessness property in another costume.)
6.4 The exact oracle
The Monte Carlo is cross-checked against exact rational arithmetic with no floating point anywhere, following the MOC’s house rule:
from fractions import Fraction as F
def rev(n, r):
"E[revenue] of a second-price auction with reserve r, n i.i.d. U[0,1] bidders"
# = ∫_r^1 (2v−1) · n·v^(n−1) dv, integrated in closed form
return F(2*n, n+1) * (1 - r**(n+1)) - (1 - r**n)
for n in range(1, 9):
print(n, rev(n, F(0)), rev(n, F(1,2)), rev(n+1, F(0)))Passing F(1,2) rather than 0.5 means every intermediate quantity stays a ratio of integers, so rev(3, F(1,2)) returns the literal object Fraction(17, 32) rather than 0.53125. When a C simulation and an exact oracle written from an independently derived formula agree to 10⁻⁴, the remaining risk of a shared bug is small; when they disagree, the disagreement is the finding (which is how the §4.3 integration-limit error surfaced).
7. Bulow–Klemperer: One Extra Bidder Beats Any Reserve Price
Everything above assumes the seller knows F. Estimating F is expensive, error-prone, and — as the Production Notes show — has to be redone per market. Before investing in it, it is worth asking how much the whole exercise is actually worth. Jeremy Bulow and Paul Klemperer answered that in 1996, and the answer is deflating. Their paper is titled Auctions versus Negotiations, and its abstract poses the question as an operational one a board of directors might actually face:
“Which is the more profitable way to sell a company: an auction with no reserve price or an optimally-structured negotiation with one less bidder? We show under reasonable assumptions that the auction is always preferable when bidders’ signals are independent. For affiliated signals, the result holds under certain restrictions on the seller’s choice of negotiating mechanism. The result suggests that the value of negotiating skill is small relative to the value of additional competition.” — American Economic Review 86(1):180–194, March 1996
Their own one-sentence summary in the introduction is the version to memorise: “a seller with no bargaining power who can only run an English auction with no reserve price among N + 1 symmetric bidders will earn more in expectation than a seller with all the bargaining power, including the ability to make binding commitments, who can hold an optimal auction with N buyers. This is true under standard assumptions if buyers have private values, common values, or something intermediate. No amount of bargaining power is as valuable to the seller as attracting one extra bona fide bidder.”
Source note — both primary papers were read for this note
Myerson (1981) and Bulow & Klemperer (1996) are paywalled at their publishers, but both are mirrored as JSTOR scans on a Princeton course page (
cs.princeton.edu/courses/archive/spr09/cos444/papers/) and both carry an extractable text layer — 46 KB and 82 KB of characters respectively, verified by reading page one and matching the masthead (Mathematics of Operations Research Vol. 6, No. 1, February 1981;The American Economic Review, Vol. 86, No. 1, March 1996) against the claimed filenames. Quotations below are from those scans; OCR of mathematical notation is unreliable in both, so every formula in this note is derived or taken from a clean secondary source, never transcribed from the scan. Klemperer’s own survey and Roughgarden’s Lecture 6 were used for the formal statements.
7.1 The theorem
Theorem (Bulow–Klemperer). Let
Fbe a regular distribution andna positive integer. ThenE[ Revenue of the Vickrey auction, no reserve, with n+1 bidders ] ≥ E[ Revenue of the optimal auction for F with n bidders ]— as stated in Roughgarden L6, Thm 4.1.
Bulow and Klemperer’s own Theorem 1 is stated in a slightly different and more general shape, comparing an auction against a negotiation: “Expected revenue from an absolute English auction with N + 1 bidders exceeds expected revenue from an English auction with N bidders followed by a take-it-or-leave-it offer to the last remaining bidder if either (i) bidders’ values are private; or (ii) bidders’ signals are affiliated.” Their Lemma 1 is the marginal-revenue identity that does the work — “The expected revenue from an absolute English auction with N + 1 bidders equals E[max(MR_1(T), MR_2(T), …, MR_{N+1}(T))]” — which is §2’s virtual-welfare identity in the marginal-revenue vocabulary of §1. Their Theorem 2 then establishes that with N risk-neutral bidders and independent signals, the N-bidder English-auction-plus-final-offer mechanism is itself optimal, so beating it means beating everything.
Klemperer’s survey states the same result in its general form: “an additional bidder is worth more to the seller in an ascending auction than the ability to set a reserve price, provided bidders with higher signals have higher marginal revenues,” and adds that this extends “very generally in a private-value auction, and also in a wide class of common-value settings.”
The asymmetry of the comparison is what makes it striking. On the left is a prior-independent mechanism — eBay with no opening bid, whose description mentions F nowhere. On the right is the exactly-tuned optimum for that particular F. As Roughgarden puts it: “a single auction (the Vickrey auction) is simultaneously competitive with an infinite number of different optimal auctions.”
7.2 The proof, which is three sentences
Bulow and Klemperer’s own proof splits on whether the highest of the first N bidders has positive or negative marginal revenue and is deferred to their appendix; Roughgarden’s reworking of it for the i.i.d. private-value case is short enough to reproduce as prose, and it is worth having because it is the clearest possible demonstration of what the virtual-welfare identity buys you. Define a fictitious auction A operating on n+1 bidders:
- Run the optimal auction
OPT_Fon bidders1 … nonly. - If the item was not allocated in step 1, hand it to bidder
n+1for free.
A has two properties by construction. Its expected revenue equals that of OPT_F with n bidders (step 2 collects nothing). And it always allocates the item. Now: among all auctions that always allocate the item, which maximizes revenue? By the virtual-welfare identity, it is the one that gives the item to the highest virtual value — even when that value is negative, since withholding is not permitted. With i.i.d. regular bidders, all share one increasing ψ, so highest virtual value = highest actual value, and that auction is the Vickrey auction. Therefore Vickrey with n+1 bidders beats A, which ties OPT_F with n. ∎
flowchart LR OPT["OPT_F on n bidders<br/>revenue = R"] A["Fictitious auction A on n+1 bidders:<br/>1. run OPT_F on the first n<br/>2. if unsold, give free to bidder n+1"] ALW["A always allocates<br/>A's revenue = R exactly"] BEST["Among always-allocate auctions,<br/>the revenue-max one gives the item<br/>to the highest virtual value…"] IID["…which for i.i.d. regular bidders<br/>is the highest ACTUAL value…"] VA["…which is exactly<br/>the VICKREY auction"] CONC["Vickrey(n+1) ≥ A = OPT_F(n)"] OPT --> A --> ALW --> BEST --> IID --> VA --> CONC
What this shows and what to take from it: the proof works by finding a mechanism that is simultaneously (a) obviously no better than Vickrey-with-n+1 and (b) obviously no worse than optimal-with-n. The insight to take away is the trick itself — “make the two sides comparable by relaxing the constraint that makes one of them special.” Withholding is the only thing the optimal auction can do that Vickrey cannot; take withholding away and the optimal auction is Vickrey.
7.3 Measured
./bk 500000 20 — 20 seeds × 500,000 trials, i.i.d. U[0,1]. The last two columns are the quantities the MOC brief asks for: what a reserve buys you, versus what one more bidder buys you.
n | Vickrey(n) | OPT(n) = SPA(n, ½) | Vickrey(n+1) | BK holds? | reserve gain | extra-bidder gain | ratio |
|---|---|---|---|---|---|---|---|
| 1 | 0.00000 ± 0.00000 | 0.24979 ± 0.00033 | 0.33319 ± 0.00038 | yes | +0.24979 | +0.33319 | 1.33× |
| 2 | 0.33319 ± 0.00038 | 0.41654 ± 0.00029 | 0.49988 ± 0.00037 | yes | +0.08336 | +0.16670 | 2.00× |
| 3 | 0.49988 ± 0.00037 | 0.53117 ± 0.00035 | 0.59994 ± 0.00031 | yes | +0.03129 | +0.10005 | 3.20× |
| 4 | 0.59994 ± 0.00031 | 0.61242 ± 0.00026 | 0.66668 ± 0.00028 | yes | +0.01249 | +0.06674 | 5.34× |
| 5 | 0.66668 ± 0.00028 | 0.67189 ± 0.00025 | 0.71425 ± 0.00020 | yes | +0.00521 | +0.04757 | 9.13× |
| 6 | 0.71425 ± 0.00020 | 0.71646 ± 0.00020 | 0.75001 ± 0.00018 | yes | +0.00222 | +0.03576 | 16.1× |
| 7 | 0.75001 ± 0.00018 | 0.75098 ± 0.00020 | 0.77780 ± 0.00016 | yes | +0.00097 | +0.02779 | 28.6× |
| 8 | 0.77780 ± 0.00016 | 0.77823 ± 0.00015 | 0.80000 ± 0.00015 | yes | +0.00043 | +0.02221 | 51.6× |
Read the last column. At five bidders, one more bidder is worth nine times the perfect reserve price. At eight, it is worth fifty times. And the reserve gains at n ≥ 6 (+0.0022, +0.0010, +0.0004) are of the same order as the seed-to-seed standard deviation (±0.0002), meaning that even in a noiseless simulation with half a million trials per seed, the benefit of optimal reserve pricing at eight bidders is only two or three standard errors from being unmeasurable. In a real market with sampling noise, seasonality, and distributional drift, it would be gone.
xychart-beta title "What a reserve buys vs. what one more bidder buys (uniform[0,1], exact)" x-axis "number of bidders n" [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] y-axis "revenue gain over Vickrey(n)" 0.0 --> 0.35 bar [0.250000, 0.083333, 0.031250, 0.012500, 0.005208, 0.002232, 0.000977, 0.000434, 0.000195, 0.000089] line [0.333333, 0.166667, 0.100000, 0.066667, 0.047619, 0.035714, 0.027778, 0.022222, 0.018182, 0.015152]
What this shows and what to take from it: the bars are the exact gain from the optimal reserve; the line is the exact gain from one extra bidder. The line is above the bars everywhere — that is Bulow–Klemperer, drawn. But the more useful reading is the shape: the bars decay like 2^{−n} (geometrically, because the reserve only bites when all n bidders come in low), while the line decays like 1/n² (polynomially). Reserve pricing becomes irrelevant exponentially fast; market thickness never does.
7.4 The corollary: Vickrey is nearly optimal anyway
Roughgarden notes a further consequence: “in every such environment with n ≥ 2 bidders, the expected revenue of the Vickrey auction is at least (n−1)/n times that of an optimal auction (for the same number of bidders).” Measured against the exact values, the bound is not tight — it is enormously conservative:
n | Vickrey(n) / OPT(n), exact | (n−1)/n bound | slack |
|---|---|---|---|
| 2 | 0.800000 | 0.500000 | +0.300 |
| 3 | 0.941176 | 0.666667 | +0.275 |
| 4 | 0.979592 | 0.750000 | +0.230 |
| 5 | 0.992248 | 0.800000 | +0.192 |
| 6 | 0.996885 | 0.833333 | +0.164 |
| 8 | 0.999442 | 0.875000 | +0.124 |
The guarantee promises 50% at two bidders; the uniform distribution delivers 80%. The guarantee promises 87.5% at eight; uniform delivers 99.94%. The bound is worst-case over all regular F, and the uniform is not the worst case. Practical reading: if you have five or more independent bidders and a roughly uniform-ish value distribution, running plain Vickrey with no reserve at all leaves under 1% of revenue on the table.
Klemperer’s own conclusion is the one to remember: “it is typically worthwhile for a seller to devote more resources to expanding the market than to collecting the information and performing the calculations required to figure out the best mechanism.” Roughgarden’s paraphrase is blunter: “invest your resources into getting more serious participants, rather than sharpening your knowledge of their preferences (of course, do both if you can!).”
Failure Modes and Gotchas
8.1 Irregular distributions: ψ is not monotone and the mechanism is not implementable
The whole construction rests on the virtual-welfare-maximizing allocation rule being monotone, which follows from ψ being increasing. If ψ decreases somewhere — Hartline’s canonical example is a bimodal value distribution — then raising your value can lower your virtual value, so the rule “allocate to the highest ψ” can take the item away from you when you bid more. No DSIC payment rule exists for such an allocation, and the naive construction is simply not a mechanism.
The repair is ironing: replace ψ with the largest monotone function that preserves the relevant integrals, which in quantile space means taking the concave hull of the revenue curve. Myerson builds it explicitly in his §6 (“Optimal auctions in the general case”), defining G_i as “the convex hull of the function H_i” — “the highest convex function on [0,1] such that G_i(q) ≤ H_i(q) for every q” — taking g_i as its derivative (monotone increasing because G_i is convex) and defining the ironed virtual value c̄_i. He notes the consistency check: “in the regular case when c_i(·) is increasing, we get G_i = H_i, g_i = h_i, and c̄_i = c_i.” His name for the ironed virtual value is worth borrowing: it is the bidder’s priority level — “we may think of c̄_i(t_i) as the priority level for bidder i when his value estimate is t_i, in the seller’s optimal auction.” Hartline: “In Section 3.3.5 we will describe a generic procedure for ironing a non-monotone virtual value function to obtain a monotone (ironed) virtual value function. […] even for irregular distributions, the design of optimal mechanisms in expectation for a known distribution on values is equivalent to the pointwise optimization of a virtual surplus that is given by monotone virtual value functions.” The ironed mechanism randomizes (or pools) over the flattened region, which in practice means treating a whole band of values identically.
Symptom in a simulation: you implement argmax ψ_i for a bimodal F, and discover that a bidder occasionally increases revenue by shading their bid. That is not a bug in your code; it is your code correctly reporting that the mechanism is not incentive compatible.
8.2 Heavy tails: the revenue curve goes flat and the reserve becomes meaningless
The equal-revenue distribution, F(v) = 1 − 1/v with density 1/v² on [1, ∞), is the boundary case between regular and irregular (Hartline, Def. 4.1.2). Its virtual valuation is
ψ(v) = v − (1/v) / (1/v²) = v − v = 0 for every v
Every value has virtual value zero. Hartline: “the revenue obtained from posting any price is the same. […] As it is the boundary between regularity and irregularity, it often provides an extremal example for results that hold for regular distributions.”
Measured (./eqrev, 4 × 10⁶ trials × 8 seeds, Vickrey with no reserve, distribution truncated at M so it fits in a double):
truncation M | n = 2 | n = 5 |
|---|---|---|
10³ | 1.9984 ± 0.0014 | 4.9871 ± 0.0042 |
10⁶ | 1.9991 ± 0.0017 | 4.9975 ± 0.0081 |
10⁹ | 1.9991 ± 0.0017 | 4.9975 ± 0.0081 |
Expected revenue is n, to three decimal places, regardless of truncation point — and the reserve sweep in §6.3 is dead flat across the entire range r ∈ [0, 8]. There is no optimal reserve price; every reserve gives the same revenue. The only visible structure is that the small-M rows sit slightly below n, consistent with M · (1 − (1 − 1/M)^n) = n − O(n²/M).
The practical warning is sharp. Real bid distributions in advertising and spectrum have heavy right tails. The closer your fitted F is to equal-revenue, the flatter the revenue-versus-reserve curve is, and the more your “optimal” reserve is an artefact of whatever tail behaviour your parametric family happened to impose. Ostrovsky and Schwarz independently observe the same flatness in production data: “The flatness of the revenue function around the optimal reserve price level also makes distinguishing between different adjustment factors statistically hard. Indeed, our experiment did not find any statistically significant differences between different adjustment factors.”
Uncertain — reconciling the equal-revenue measurement with the virtual-welfare identity uncertain
Verify: the reasoning in this paragraph. If
ψ ≡ 0and expected revenue equals expected virtual welfare, why is measured revenuenrather than0? My reconciliation: Myerson’s integration by parts (§2.2, Step 3) requires the boundary term(1 − F(z)) · z · x(z)to vanish asz → v_max. For the equal-revenue distribution(1 − F(z)) · z = 1identically, so the term does not vanish and the identity acquires a correction. Under truncation atMthe distribution has a point mass1/MatMwhose virtual value isM, contributingM · (1 − (1 − 1/M)^n) ≈ n— which matches the measurement and itsM-dependence. Reason for the flag: this reconciliation is my own, derived to explain a measurement, not read in a source; none of the fetched sources states it in this form. To resolve: check a treatment of Myerson’s theorem that states the boundary/integrability hypothesis explicitly (Myerson 1981 itself, or Hartline §3.3 in full).
8.3 The distribution has to come from somewhere, and it comes from bids
Roughgarden notes almost in passing that F is “typically derived from data, such as bids in past auctions.” That sentence hides a circularity: bids are the output of a mechanism, so fitting F to bids means inverting an equilibrium. Ostrovsky and Schwarz had to do exactly this, and they say so: because search engines run a non-truthful generalized second-price auction, “one cannot expect the bids to be truthful. […] valuations are reversed engineered from the bids under the assumption that bidders are playing the equilibrium that is outcome-equivalent to the dominant-strategy outcome of the DSIC auction.”
Two things can go wrong. The equilibrium selection may be wrong, in which case the fitted F is wrong in a way no amount of data fixes. And changing the reserve changes the bids, so a F fitted before the intervention is stale after it. Roughgarden calls the parametric step “somewhat ad hoc but there is no evidence that the final conclusions depend on its details”; that is an honest statement about one field experiment, not a general guarantee.
8.4 Independence is load-bearing — and it is the assumption most likely to be false
The n-independence of the reserve (§3.2) and the whole virtual-value machinery need values to be independent. When they are affiliated (roughly: high draws come together), Klemperer’s survey says the conclusion reverses:
“if valuations are affiliated, more bidders implies more certainty about any one bidder’s valuation conditional on other bidders’ information, hence flatter marginal revenue curves, so a far higher proportion of bidders have marginal revenues in excess of the seller’s cost. So the reserve price must be set lower. Levin and Smith (1996a) show that the optimal reserve price converges to the seller’s true value as the number of bidders grows.”
So under affiliation the answer flips from “reserve is high and n-independent” to “reserve falls toward the seller’s own value as n grows.” Klemperer adds a further wrinkle: “even with independent signals the reserve price should optimally be set after the auction if there are common-value components to valuations.” A seller running a mineral-rights or advertising auction — both of which plainly have common-value components — is outside the model this note derives. See The Winner’s Curse for that world.
8.5 A reserve you will not honour is not a reserve
The reserve earns revenue only because bidders believe the seller will walk away. If the seller reliably re-lists, negotiates after a failed auction, or quietly accepts the highest bid anyway, then bidders correctly anticipate this and the reserve stops binding — it becomes an announcement rather than a constraint. This is a commitment problem, and it is the reason Bulow and Klemperer frame their paper as “auctions versus negotiations”: the entire value of the optimal auction over a negotiation is the seller’s ability to commit to not trading. They observe in a footnote that the commitment usually is not real: “Many auction houses seem to commit to secret reserve prices before auctions, but there are often further subsequent negotiations if an object is unsold at its reserve price.”
There is a second, subtler timing point in the same footnote: “a seller should also not commit to a reserve price until the end of the auction.” Once bidding has revealed information, the reserve that was optimal ex ante is no longer the one that is optimal now — an implication that only bites when values have a common component (§8.4), but a real one in every market that has one.
8.6 A reserve deters entry, and entry is the thing you cannot afford to lose
Bulow–Klemperer says a marginal bidder is worth several times the optimal reserve. It follows that a reserve which scares off even one marginal bidder can be net-negative — and a high announced floor is exactly the kind of thing that makes a borderline participant not bother. The models in §§2–7 all take n as fixed and exogenous. Klemperer treats endogenous entry separately and notes that with entry costs “the seller optimally adjusts the reserve price and/or sets an entry subsidy.” In an environment where participation is elastic, the sign of the reserve’s effect is not guaranteed, and the Production Notes show a real deployment where it came out negative for a large class of markets.
8.7 The asymmetry of error: overshoot is much worse than undershoot
From §6.1, at n = 3: moving from r = 0 to the optimum r = 0.5 gains 0.031. Overshooting to r = 0.7 loses 0.048 relative to the optimum — more than the entire prize. Overshooting to 0.8 loses 0.134. The curve is quadratically flat on the way up (dRev/dr = n r^{n−1}(1 − 2r), so the derivative vanishes at the top) and then falls off a cliff.
Ostrovsky and Schwarz built their whole deployment around this: “overshooting by the same amount may be considerably more costly, and therefore the seller facing uncertainty about the optimal reserve price will prefer to be conservative. This may, in fact, be a part of the explanation of the reserve price puzzle” — the puzzle being why real sellers use reserves far below the theoretical optimum. Deliberate under-shooting is not sloppiness; it is the correct response to model uncertainty on an asymmetric loss function.
8.8 Anonymous reserves leave real money on the table, and non-anonymous ones are politically hard
With asymmetric bidders, the optimal mechanism needs different reserves per bidder — in §4.3, a per-bidder optimal mechanism earned 0.646 where the best single anonymous reserve earned 0.557, a gap of 16%. Roughgarden notes this is rarely deployable: “Some real-world auctions use such non-anonymous reserve prices — in sponsored search auctions, ‘higher-quality’ advertisers generally face lower reserve prices than lower-quality advertisers — but they are rare. On eBay, for example, you only get to set one opening bid.”
Hartline shows the gap can be worse than 16%: there is a regular two-agent environment where “the optimal auction obtains twice the revenue of the second-price auction with (discriminatory) monopoly reserves” (Lemma 4.1.4) — and that is against per-bidder monopoly reserves, which are already more sophisticated than anything eBay offers. For anonymous reserves against non-i.i.d. regular bidders, Roughgarden reports the state of knowledge as: “there is such an auction that recovers at least 25% of the optimal revenue, and no such auction always recovers more than 50%.”
Alternatives and When to Choose Them
| Mechanism | Needs to know | Revenue | Complexity / deployability | Choose when |
|---|---|---|---|---|
| Vickrey, no reserve (The Vickrey Auction) | nothing | (n−1)/(n+1) for uniform; ≥ (n−1)/n of optimal in general | trivial; DSIC; efficient | n ≥ 5, or you cannot defend a reserve, or welfare is the objective |
| Vickrey + anonymous reserve | one number, ψ⁻¹(0) | optimal for i.i.d. regular F | one config value; explainable to bidders | the default. i.i.d.-ish bidders, thin markets, n ≤ 4 |
| Vickrey + per-bidder reserves | ψ_i⁻¹(0) per bidder | within a factor 2 of optimal for regular F (Hartline 4.1.4 shows 2 is tight) | needs per-bidder classification; looks like discrimination | asymmetric bidders you can classify (advertiser quality tiers) |
| Myerson / virtual-surplus maximization | every F_i | optimal by definition | winner may not be the high bidder; payments not explainable | you have abundant data, revenue is the sole objective, and bidders cannot revolt |
| Ironed Myerson | every F_i, plus concave-hull machinery | optimal for irregular F too | randomized/pooled allocation | bimodal or multi-modal value distributions |
| Prior-independent (Bulow–Klemperer, single-sample) | nothing about F | ≥ OPT(n−1); “single sample” variants get constant-factor guarantees | as simple as Vickrey | thin markets with no usable history — Roughgarden’s motivating case is “keyword auctions for rarely used (but potentially valuable) search queries” |
| Sequential posted prices / prophet-inequality auctions | F_i (for the threshold only) | ≥ ½ of optimal, from the Prophet Inequality | take-it-or-leave-it offers; no auction at all | you want simplicity and can accept 50%; buyers arrive over time |
| Spend the effort on recruiting one more bidder | nothing | ≥ any of the above at n | organisational, not algorithmic | almost always — see §7.3 |
flowchart TB Q0{"Is there a common-value<br/>component to bidders' values?"} WC["Go to The Winner's Curse.<br/>None of this applies:<br/>the reserve should be lower,<br/>set later, and depends on n"] Q1{"Can you recruit<br/>one more serious bidder?"} REC["DO THAT FIRST.<br/>Worth 3x the optimal reserve at n=3,<br/>50x at n=8 (measured §7.3)"] Q2{"Do you have enough history<br/>to fit F credibly?"} PI["Vickrey, no reserve<br/>(prior-independent).<br/>Guaranteed ≥ OPT(n−1)"] Q3{"Are bidders roughly<br/>i.i.d. from a regular F?"} ANON["Vickrey + anonymous reserve<br/>r = psi-inverse(0).<br/>This is provably OPTIMAL."] Q4{"Can you defend charging<br/>different bidders differently?"} PER["Per-bidder reserves.<br/>Within a factor 2 of optimal"] MYE["Full Myerson.<br/>Winner may not be the high bidder;<br/>expect to have to explain that"] Q0 -- yes --> WC Q0 -- no --> Q1 Q1 -- yes --> REC Q1 -- no --> Q2 Q2 -- no --> PI Q2 -- yes --> Q3 Q3 -- yes --> ANON Q3 -- no --> Q4 Q4 -- no --> ANON Q4 -- yes --> PER PER --> MYE
What this shows and what to take from it: a decision procedure for the whole note. Two of the six leaves are “do not use optimal auction theory” — once because you are in the wrong model (common values), once because the cheaper intervention dominates (recruit a bidder). Of the remaining four, the one people actually want (full Myerson) is the last resort, not the default. The insight to take away: this theory’s main practical output is a single number added to an auction you already run, and the elaborate machinery exists to justify that number, not to replace the auction.
The “recruit one more bidder” branch is not a joke. It is the operational content of Bulow–Klemperer, and the measured table in §7.3 says it dominates by 3× at n = 3 and 50× at n = 8.
Two rows deserve expansion. Prior-independent auctions are the research programme that grew out of the Bulow–Klemperer observation: design an auction whose description never mentions F, and prove it competes with the F-tuned optimum. Roughgarden traces the agenda to Dhangwatnotai, Roughgarden and Yan (2010) and notes it “has been an active topic over the past three years” as of 2013. Prophet-inequality auctions come from optimal stopping: the theorem (Samuel-Cahn 1984) says that for independent prizes there is a single threshold t — chosen so that the probability of accepting something is exactly 1/2 — guaranteeing half the expected maximum. Applied to virtual values, it yields an auction that “first filters bidders using reserve prices, and then simply awards the item to the highest bidder remaining,” recovering at least half of optimal revenue with a rule that is genuinely simple.
Production Notes
The Yahoo! field experiment — optimal auction theory, deployed and measured
The best-documented production deployment of Myerson’s theory is Michael Ostrovsky and Michael Schwarz’s field experiment at Yahoo!, run in 2008 and finally published as Reserve Prices in Internet Advertising Auctions: A Field Experiment, Journal of Political Economy 131(12):3352–3376, December 2023, DOI 10.1086/725702. (Roughgarden’s 2013 lecture cites it as a working paper; it took fifteen years to reach print, which is itself a data point about how rare deployed mechanism design is.)
The setup, in the authors’ words: reserve prices for sponsored search had been “10¢ across all keywords.” Assuming lognormal value distributions fitted per keyword from bid data, they computed keyword-specific ψ⁻¹(0). The distribution of theoretically optimal reserves is wide — 9¢ at the 10th percentile of keywords, 20¢ at the median, 72¢ at the 90th, averaging ~35¢. So the flat 10¢ was far too low almost everywhere and roughly right in a large minority of markets.
The experiment: 95% of keywords to treatment, 5% to control; sample of 438,198 treatment keywords and 22,989 control keywords, with the average keyword searched 232 times in a 30-day window and facing 5.9 advertisers. Crucially, the new reserve was set not to the theoretical optimum but to a convex combination of old and optimal, with an adjustment factor of 0.4–0.6 — the deliberate under-shooting discussed in §8.7.
The results, with the authors’ own caveats intact:
| Measure | Effect | Caveat as stated by the authors |
|---|---|---|
| Average revenue per keyword, treatment vs control | +12.85% | “this estimate is not robust: by excluding a single keyword from the control sample, this number can be reduced to around 8%” |
| Same, excluding the top 0.1% of keywords by search volume | +3.8% | the robust headline number |
| Revenue per search, rarely searched keywords | −2.5% | “highly statistically significant” — the intervention hurt these markets |
| Revenue per search, frequently searched keywords | +3.9% | “highly statistically significant” |
| Revenue per search, keywords whose optimal reserve was ≥ 20¢ | +4.9% | “the intervention is very successful” |
| Revenue per search, keywords whose optimal reserve was < 20¢ | −8.7% | the concern about non-anonymous reserves “turned out to be valid” |
| Revenue per search, shallow markets (< 5.5 advertisers) | +7.8% | “not statistically significant, so we view this evidence as merely suggestive” |
| Revenue per search, deep markets (≥ 5.5 advertisers) | +4.5% | significant at 5% |
Four lessons, all of which are in this note’s theory sections:
- The theory works where it is supposed to work and fails where it is not. Keywords whose theoretically optimal reserve was far above the old 10¢ gained ~5%. Keywords whose optimum was near 10¢ lost 8.7% — because the implementation multiplied reserves by an advertiser quality score, which is a crude non-anonymous reserve, and §8.8’s warning about badly-chosen per-bidder reserves bit. The company knew this in advance and shipped it anyway “for consistency with the auction’s ranking rules.”
- Thin markets benefit most, matching Bulow–Klemperer read backwards. The shallow-market point estimate (+7.8%) exceeds the deep-market one (+4.5%), consistent with §7.3’s finding that the reserve’s value decays geometrically in
n. But it is not statistically significant, and the authors decline to claim it. That restraint is the right model for how to report a result of this kind. - Headline effect sizes in this domain are dominated by outliers. 12.85% → 8% by dropping one control keyword; a separate 10.34% figure “is driven by outliers and is not robust. For example, removing just two keywords from the treatment group reduces this number to 0.19%.” Anyone quoting “reserve prices raised Yahoo!‘s revenue by 13%” is quoting the fragile number.
- It stuck, and it spread. “Following the experiment, Yahoo! continued using and further fine-tuning this methodology. […] On Microsoft’s Bing search platform, reserve prices are now set using a similar methodology, which, as a starting point, uses the same approach of finding keyword-specific reserve prices at which virtual valuations given estimated value distributions are equal to zero.” The authors also cite analogous experiments at Yandex (Topinsky 2014) and Tripadvisor (Dimitrellos 2022).
Uncertain — the Yahoo! executive quote is a revenue attribution, not a measurement uncertain
The paper quotes Yahoo! president Sue Decker on the Q3 2008 earnings call attributing revenue-per-search growth of 11% year-over-year substantially to “market reserve pricing,” and Roughgarden’s lecture repeats the attribution (“credited by Yahoo!‘s president as the biggest reason for higher search revenue”). Verify: nothing. Treat this as a corporate statement on an earnings call, not evidence. The controlled experiment’s own robust estimate is
+3.8%on revenue and+3.9%on revenue-per-search for frequently searched keywords. The11%figure has no control group behind it. To resolve: nothing would; the two numbers measure different things and only the experiment is causal.
Bulow–Klemperer in a boardroom: Paramount, Viacom and QVC
Bulow and Klemperer motivate their theorem with corporate control, and the policy conclusion is unusually direct for a theory paper: “Our result shows that a single extra bidder more than makes up for any diminution in negotiating power. This means that there is no merit in arguments that negotiation should be restricted to one or a few bidders to allow the seller to maintain more control of the negotiating process, or to credibly withdraw the company from the market.”
Their worked case: “in late 1993 Paramount agreed to sell itself to Viacom, knowing that QVC was interested in bidding for Paramount. Paramount and Viacom agreed to terms that gave Viacom options to buy 24 million shares of Paramount and a $100 million break-up fee in the event that any other company were to purchase Paramount.” The theorem says a lock-up that excludes one serious bidder cannot be worth what it costs, because that bidder is worth more than any bargaining advantage the lock-up buys — so “a seller should not accept any ‘lock-up’ agreement that a buyer is willing to offer in return for the seller not beginning negotiations with additional potential acquirers.”
The same logic is why procurement teams are told to widen the supplier pool rather than sharpen the negotiation: “in a procurement context, competitive bidding by suppliers will yield lower average prices than negotiating with a smaller number of suppliers. […] More broadly, our results are supportive of the view that optimal regulation of an industry may be less important than attracting additional entry.”
Where reserves show up in systems you already have
- eBay’s opening bid is precisely
ψ⁻¹(0)if the seller has calibrated it; Roughgarden’s “eBay with a suitable opening bid is the optimal auction” is not an analogy. - Ad exchanges run per-publisher price floors, which are anonymous reserves; the “floor optimization” product category is §8.3’s fitting problem sold as a service.
- Cloud spot markets and any admission-control policy with a price face the same trade: a floor that raises unit revenue while idling capacity. §4.1’s framing — the withheld allocation is the product, not the waste — is the transferable idea.
- Spectrum auctions are the standing counter-example: the seller is a government, welfare is the stated objective, and reserves are set to prevent giveaways rather than to maximize revenue. Roughgarden’s Lecture 8 covers that design space; see Ad Auctions and GSP and Mechanism Design.
See Also
- Games and Strategic Systems in C MOC — parent MOC; this note is the revenue-maximization rung of stage P4 · Auctions
- The Vickrey Auction — the second-price auction whose dominant-strategy truthfulness the optimal auction inherits; the optimal auction is this auction plus one number
- Revenue Equivalence — the theorem this note’s derivation generalises; Myerson’s payment identity is the same machinery, pushed one step further
- First-Price and Second-Price Auctions — the formats; a first-price auction with the same reserve raises the same expected revenue under revenue equivalence
- English and Dutch Auctions — the open formats; Bulow–Klemperer is usually stated for the ascending auction
- The Winner’s Curse — the sibling note on common values, where independence fails, the reserve should be set after the auction, and none of §3’s
n-independence survives - Ad Auctions and GSP — where reserve prices are actually deployed at scale, and where the non-truthfulness of GSP complicates estimating
F(§8.3) - Mechanism Design — the general problem; this note is its most successful single-parameter special case
- The Revelation Principle — why restricting attention to truthful direct mechanisms costs nothing
- Incentive Compatibility — DSIC vs Bayes-Nash; Myerson’s optimal auction is optimal among both
- Bayesian Games and Types — the incomplete-information framework the value distributions live in
- Nash Equilibrium — the solution concept underneath; a DSIC mechanism is one where the equilibrium is in dominant strategies, the strongest form
- Common Knowledge and Rationality Assumptions — what the seller and bidders must mutually know for the analysis to bind; the seller knows
F, bidders need not - Simulating Auctions in C — the sibling implementation note; the
splitmix64and seed-variance discipline in §5 is shared