Efficiency and Competitive Search Equilibrium#

Introduction#

The search and matching models developed in previous notebooks characterize the decentralized equilibrium of the labor market — the outcome that emerges when workers and firms independently optimize given market conditions. A natural question follows: is this equilibrium efficient? Does the decentralized market maximize social welfare, or do the frictions that generate unemployment also generate misallocation?

The answer is not obvious. Search frictions create trading externalities: the probability that any agent finds a trading partner depends on the number of other agents searching in the same market. When a firm opens a vacancy, it makes it easier for unemployed workers to find jobs — a positive externality on workers — but harder for other firms to fill their vacancies — a negative externality on firms. These externalities are not priced by the Nash bargaining process, which takes place between a matched pair after they meet and therefore cannot internalize the effects of their wage agreement on agents still searching.

This lecture develops three interconnected topics:

  1. The social planner’s problem: what allocation would a benevolent planner choose, subject to the same matching frictions as the decentralized economy?

  2. The Hosios condition: the precise condition under which Nash bargaining internalizes the search externalities and delivers the efficient allocation.

  3. Labor market policies: how hiring subsidies, payroll taxes, and layoff taxes can restore efficiency when the Hosios condition fails.

  4. Competitive search equilibrium: a market structure, due to Moen (1997), in which the decentralized equilibrium is always efficient, without requiring the Hosios condition to hold.

The Social Planner’s Problem#

Setup#

To characterize the efficient allocation, we solve the problem of a benevolent social planner who maximizes the present discounted value of aggregate output and leisure net of search costs, subject to the matching technology. The planner controls the number of unemployed workers \(\mathcal{U}\) and vacancies \(\mathcal{V}\) — equivalently, market tightness \(\theta = \mathcal{V}/\mathcal{U}\) — and takes the matching function as given.

Crucially, the planner is not interested in wages. Wages determine only the distribution of output between workers and firms, not the total amount. Since the social welfare function aggregates the welfare of all agents, the wage is irrelevant — it is a transfer from the firm to the worker within the same economy. The planner cares only about how much is produced, how many resources are devoted to search, and how many workers are employed.

The planner’s problem is:

\[\max_{\mathcal{U}, \mathcal{V}} \int_0^\infty e^{-rt} \left[x(1-\mathcal{U}) + z\mathcal{U} - \gamma\theta\mathcal{U}\right]dt \tag{1}\]

subject to the law of motion for unemployment:

\[\dot{\mathcal{U}} = s(1-\mathcal{U}) - \mathcal{M}(\mathcal{U},\mathcal{V}) \tag{2}\]

The objective (1) has three components: output from employed workers \(x(1-\mathcal{U})\), the flow value of leisure for unemployed workers \(z\mathcal{U}\), and the total recruiting cost \(\gamma\mathcal{V} = \gamma\theta\mathcal{U}\). The constraint (2) is the bathtub equation from the benchmark model.

Solving the Hamiltonian#

The problem is a standard optimal control problem. We form the current-value Hamiltonian with co-state variable \(\Psi\):

\[H = e^{-rt}\left[x(1-\mathcal{U}) + z\mathcal{U} - \gamma\theta\mathcal{U}\right] + \Psi\left[s(1-\mathcal{U}) - \mathcal{M}(\mathcal{U},\mathcal{V})\right]\]

The first-order conditions are \(\partial H/\partial \mathcal{V} = 0\) and \(\dot{\Psi} = -\partial H/\partial \mathcal{U}\):

\[\frac{\partial H}{\partial \mathcal{V}} = 0: \qquad -e^{-rt}\gamma - \Psi[1-\eta_L(\theta)]q(\theta) = 0 \tag{3}\]
\[\dot{\Psi} = -\frac{\partial H}{\partial \mathcal{U}}: \qquad \dot{\Psi} = e^{-rt}(x-z) + \gamma e^{-rt}\theta + \Psi[s + \eta_L(\theta)f(\theta)] \tag{4}\]

where \(\eta_L(\theta) \equiv -\theta q'(\theta)/q(\theta)\) is the elasticity of the vacancy-filling rate with respect to tightness.

The Constrained Efficient Job Creation Condition#

Combining conditions (3) and (4) — eliminating the co-state variable \(\Psi\) and its derivative — and evaluating at the planner’s optimal tightness \(\theta^{PP}\) yields the constrained efficient job creation condition:

\[\frac{\gamma}{q(\theta^{PP})} = \frac{(x-z)[1-\eta_L(\theta^{PP})] - \gamma\theta^{PP}\eta_L(\theta^{PP})}{r+s} \tag{5}\]

Compare this to the decentralized job creation condition with Nash bargaining:

\[\frac{\gamma}{q(\theta^*)} = \frac{(1-\alpha)(x-z) - \alpha\gamma\theta^*}{r+s} \tag{6}\]

The two conditions are identical if and only if:

\[\alpha_L = \eta_L(\theta^{PP}) \tag{7}\]

This is the Hosios condition: the worker’s bargaining power must equal the elasticity of the matching function with respect to unemployment evaluated at the planner’s optimum.

The Hosios Condition

The decentralized Nash bargaining equilibrium is constrained efficient if and only if the worker’s bargaining power \(\alpha_L\) equals the elasticity of the matching function with respect to unemployment \(\eta_L(\theta^{PP})\):

\[\alpha_L = \eta_L(\theta^{PP})\]

When the Hosios condition holds, the wage that emerges from Nash bargaining exactly internalizes the search externalities, and the decentralized equilibrium coincides with the planner’s allocation.

Economic Interpretation#

The Hosios condition has a precise economic interpretation in terms of the congestion externalities on each side of the market.

When a firm opens an additional vacancy, it creates two externalities:

  • A positive externality on workers: more vacancies mean a higher job-finding rate \(f(\theta)\), benefiting unemployed workers.

  • A negative externality on other firms: more vacancies reduce the vacancy-filling rate \(q(\theta)\), making it harder for other firms to hire.

The elasticity \(\eta_L(\theta)\) measures the relative magnitude of these two effects: it is the share of the marginal match attributed to the firm’s side of the market. When \(\eta_L\) is high, firms cause more congestion to other firms than workers cause to other workers, so the planner would want to discourage vacancy creation — achieved by giving workers a high bargaining share \(\alpha_L = \eta_L\), which raises wages and reduces firm entry.

Three cases follow:

  • \(\alpha_L > \eta_L\): wages are too high, tightness too low. Workers capture an excessively large share of the surplus, firms create too few vacancies, and the unemployment congestion externality is too high.

  • \(\alpha_L < \eta_L\): wages are too low, tightness too high. Firms capture too large a share of the surplus, create too many vacancies, and impose excessive congestion on other firms.

  • \(\alpha_L = \eta_L\): the Hosios condition holds, the wage correctly prices the externalities, and the decentralized equilibrium is efficient.

An Alternative Derivation: Maximizing Workers’ Welfare#

There is a second, more intuitive derivation of the Hosios condition. The value of being unemployed is:

\[rW_u = z + \frac{\alpha_L}{1-\alpha_L}\gamma\theta\]

where \(\theta\) is determined by the job creation condition:

\[\frac{\gamma}{q(\theta)} = \frac{(1-\alpha_L)(x-z) - \alpha_L\gamma\theta}{r+s}\]

Maximizing \(rW_u\) with respect to \(\alpha_L\), subject to the equilibrium relationship between \(\alpha_L\) and \(\theta\), yields a unique maximum at exactly \(\alpha_L = \eta_L(\theta)\). This result has a powerful implication: if workers and firms agree to share the surplus in a way that maximizes the welfare of unemployed workers — the outsiders in the wage bargain — the search externalities are fully internalized and social output is maximized. The Hosios condition is not just a condition for aggregate efficiency; it is also the condition that is best for the unemployed.

This highlights a fundamental tension in the search and matching model: employed workers and firms are insiders in the wage bargain, and they are unlikely to internalize the welfare of outsiders — the unemployed — when setting the wage. Inefficiency in decentralized search economies is therefore the rule rather than the exception.

Numerical Illustration#

Hide code cell source

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import brentq

# ──────────────────────────────────────────────
# Den Haan et al. matching function
# ──────────────────────────────────────────────
nu = 1.25
def q(theta): return 1.0 / (1 + theta**nu)**(1/nu)
def f(theta): return theta / (1 + theta**nu)**(1/nu)
def eta(theta): return theta**nu / (1 + theta**nu)

# ──────────────────────────────────────────────
# Parameters
# ──────────────────────────────────────────────
r      = 0.04
s      = 0.42
gamma  = 0.26
x      = 1.0
z      = 0.71
alpha  = 0.5

# ──────────────────────────────────────────────
# Decentralized JC condition
#   gamma/q(theta) = [(1-alpha)(x-z) - alpha*gamma*theta]/(r+s)
# Planner's JC condition
#   gamma/q(theta) = [(x-z)(1-eta) - gamma*theta*eta]/(r+s)
# ──────────────────────────────────────────────
def jc_decentralized(theta, alpha_val=alpha):
    lhs = gamma / q(theta)
    rhs = ((1 - alpha_val)*(x - z) - alpha_val*gamma*theta) / (r + s)
    return lhs - rhs

def jc_planner(theta):
    lhs = gamma / q(theta)
    rhs = ((x - z)*(1 - eta(theta)) - gamma*theta*eta(theta)) / (r + s)
    return lhs - rhs

theta_decen = brentq(jc_decentralized, 1e-4, 100)
theta_pp    = brentq(jc_planner, 1e-4, 100)
eta_pp      = eta(theta_pp)

print(f"Decentralized tightness: θ* = {theta_decen:.4f}  "
      f"(α = {alpha})")
print(f"Planner's tightness:  θ^PP = {theta_pp:.4f}")
print(f"Matching elasticity:  η(θ^PP) = {eta_pp:.4f}")
print(f"Hosios condition satisfied: α = η? "
      f"{'Yes' if abs(alpha - eta_pp) < 0.01 else 'No'}")
print(f"  α - η(θ^PP) = {alpha - eta_pp:.4f}")

# ──────────────────────────────────────────────
# Panel 1: Planner vs decentralized JC condition
# ──────────────────────────────────────────────
theta_grid = np.linspace(0.1, 5, 300)
lhs_grid   = gamma / q(theta_grid)
rhs_decen  = ((1-alpha)*(x-z) - alpha*gamma*theta_grid) / (r+s)
rhs_pp     = ((x-z)*(1-eta(theta_grid))
              - gamma*theta_grid*eta(theta_grid)) / (r+s)

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

ax = axes[0]
ax.plot(theta_grid, lhs_grid, color="black", lw=2,
        label=r"$\gamma/q(\theta)$ (LHS)")
ax.plot(theta_grid, rhs_decen, color="#2c7bb6", lw=2,
        ls="--", label=r"Decentralized RHS ($\alpha=0.5$)")
ax.plot(theta_grid, rhs_pp, color="#d7191c", lw=2,
        ls="-.", label="Planner's RHS")
ax.axvline(theta_decen, color="#2c7bb6", lw=1, ls=":",
           alpha=0.7)
ax.axvline(theta_pp, color="#d7191c", lw=1, ls=":",
           alpha=0.7)
ax.scatter([theta_decen], [gamma/q(theta_decen)],
           color="#2c7bb6", zorder=5, s=60)
ax.scatter([theta_pp], [gamma/q(theta_pp)],
           color="#d7191c", zorder=5, s=60)
ax.set_xlabel(r"Market Tightness $\theta$", fontsize=11)
ax.set_ylabel("Value", fontsize=11)
ax.set_title("Planner vs Decentralized\nJob Creation Condition",
             fontsize=11)
ax.legend(fontsize=9)
ax.set_ylim(0, 2)

# ──────────────────────────────────────────────
# Panel 2: rW_u as a function of alpha
# Show maximum at alpha = eta(theta)
# ──────────────────────────────────────────────
alpha_grid = np.linspace(0.01, 0.99, 200)
rWu_grid   = []

for a in alpha_grid:
    try:
        th = brentq(lambda t: jc_decentralized(t, a), 1e-4, 100)
        rWu = z + (a/(1-a))*gamma*th
        rWu_grid.append(rWu)
    except Exception:
        rWu_grid.append(np.nan)

rWu_grid = np.array(rWu_grid)
idx_max  = np.nanargmax(rWu_grid)
alpha_max = alpha_grid[idx_max]

ax = axes[1]
ax.plot(alpha_grid, rWu_grid, color="#2c7bb6", lw=2)
ax.axvline(alpha_max, color="#d7191c", lw=1.5, ls="--",
           label=rf"Max at $\alpha={alpha_max:.3f}$")
ax.axvline(eta_pp, color="#1a9641", lw=1.5, ls="-.",
           label=rf"$\eta(\theta^{{PP}})={eta_pp:.3f}$")
ax.scatter([alpha_max], [rWu_grid[idx_max]],
           color="#d7191c", zorder=5, s=60)
ax.set_xlabel(r"Bargaining Power $\alpha_L$", fontsize=11)
ax.set_ylabel(r"$rW_u$ (value of unemployment)", fontsize=11)
ax.set_title("Workers' Welfare vs Bargaining Power\n"
             "(Hosios condition maximizes $rW_u$)",
             fontsize=11)
ax.legend(fontsize=9)

# ──────────────────────────────────────────────
# Panel 3: Equilibrium tightness vs alpha
# Mark efficient level
# ──────────────────────────────────────────────
theta_alpha = []
for a in alpha_grid:
    try:
        th = brentq(lambda t: jc_decentralized(t, a), 1e-4, 100)
        theta_alpha.append(th)
    except Exception:
        theta_alpha.append(np.nan)

theta_alpha = np.array(theta_alpha)

ax = axes[2]
ax.plot(alpha_grid, theta_alpha, color="#2c7bb6", lw=2,
        label=r"Decentralized $\theta^*(\alpha)$")
ax.axhline(theta_pp, color="#d7191c", lw=1.5, ls="--",
           label=rf"Planner's $\theta^{{PP}}={theta_pp:.3f}$")
ax.axvline(eta_pp, color="#1a9641", lw=1.5, ls="-.",
           label=rf"Hosios: $\alpha^*=\eta={eta_pp:.3f}$")

# Shade inefficiency regions
ax.fill_between(alpha_grid, theta_alpha, theta_pp,
                where=theta_alpha < theta_pp,
                color="#d7191c", alpha=0.15,
                label=r"Too little vacancy ($\alpha>\eta$)")
ax.fill_between(alpha_grid, theta_alpha, theta_pp,
                where=theta_alpha > theta_pp,
                color="#2c7bb6", alpha=0.15,
                label=r"Too many vacancies ($\alpha<\eta$)")

ax.set_xlabel(r"Bargaining Power $\alpha_L$", fontsize=11)
ax.set_ylabel(r"Equilibrium Tightness $\theta^*$", fontsize=11)
ax.set_title("Equilibrium Tightness vs Bargaining Power\n"
             "(efficient level marked)", fontsize=11)
ax.legend(fontsize=8)

fig.suptitle("The Hosios Condition", fontsize=13, y=1.02)
plt.tight_layout()
plt.show()
Decentralized tightness: θ* = 0.1354  (α = 0.5)
Planner's tightness:  θ^PP = 0.5187
Matching elasticity:  η(θ^PP) = 0.3057
Hosios condition satisfied: α = η? No
  α - η(θ^PP) = 0.1943
_images/5fdb7b6985d30d8c18f0dd6982cbca4aebd563ede15d3254a97626e220040d4f.png

The left panel shows the planner’s and decentralized job creation conditions as functions of tightness. The two curves have the same left-hand side \(\gamma/q(\theta)\) but different right-hand sides: the planner’s condition weights the surplus by \(1-\eta(\theta)\) while the decentralized condition weights it by \(1-\alpha\). When \(\alpha \neq \eta(\theta^{PP})\), the two equilibria differ. The middle panel confirms the welfare-maximization interpretation: \(rW_u\) achieves a unique maximum at exactly \(\alpha = \eta(\theta^{PP})\), the Hosios value. The right panel shows how equilibrium tightness varies with bargaining power, with the efficient level marked as a horizontal dashed line: above the Hosios value of \(\alpha\), tightness is too low (too few vacancies); below it, tightness is too high.

Labor Market Policies#

Motivation#

When the Hosios condition fails — which is the generic case, since there is no reason why the structural parameters \(\alpha\) and \(\eta\) should coincide — the decentralized equilibrium is inefficient. Labor market policies can potentially correct for this inefficiency by modifying the incentives for vacancy creation and wage setting. We consider three instruments: a hiring subsidy, a payroll tax, and a layoff tax.

The Augmented Model#

We augment the benchmark model with three policy parameters:

  • Hiring subsidy \(\Upsilon > 0\): for every successful match, the firm receives a lump-sum payment \(\Upsilon\) from the government. This reduces the effective cost of filling a vacancy.

  • Payroll tax \(\tau \in (0,1)\): firms pay \((1+\tau)w\) for each employed worker, raising the marginal cost of labor.

  • Layoff tax \(T > 0\): firms pay a penalty \(T\) each time they destroy a match, raising the effective separation cost.

The Bellman equations for firms become:

\[rJ_v = -\gamma + q(\theta)(J_\pi + \Upsilon - J_v)\]
\[rJ_\pi = x - w(1+\tau) + s(J_v - T - J_\pi)\]

Under free entry (\(J_v = 0\)), the value of a filled job is:

\[J_\pi = \frac{x - w(1+\tau) - sT}{r+s} \tag{11}\]

and the job creation condition for a given wage is:

\[\frac{\gamma}{q(\theta)} - \Upsilon = \frac{x - w(1+\tau) - sT}{r+s} \tag{12}\]

Nash Bargained Wage with Policies#

The presence of policies changes the Nash bargaining outcome. The payroll tax increases the firm’s marginal cost of employing a worker by factor \((1+\tau)\), while the worker’s marginal benefit remains unity. This asymmetry shifts the sharing rule: the modified Nash problem yields:

\[(1+\tau)(1-\alpha)(W_n - W_u) = \alpha(J_\pi - J_v)\]

so that the worker receives fraction \(\alpha/(1+\tau(1-\alpha))\) of the joint surplus and the firm receives \((1-\alpha)(1+\tau)/(1+\tau(1-\alpha))\). The Nash bargained wage is:

\[w = \frac{\alpha}{1+\tau}(x - sT) + (1-\alpha)z + \frac{\alpha}{1+\tau}\left[\gamma\theta - f(\theta)\Upsilon\right] \tag{13}\]

The effects of each policy on wages, holding tightness fixed, are:

  • Hiring subsidy \(\Upsilon\): lowers the wage by improving the firm’s bargaining position — the firm saves on search costs upon meeting the worker.

  • Layoff tax \(T\): lowers the wage by reducing the joint surplus — the firm’s share of the surplus must cover the expected future layoff penalty.

  • Payroll tax \(\tau\): reduces the slope of the wage curve, as the effective return to the firm from any wage increase falls.

Equilibrium Condition#

Substituting the Nash wage (13) into the job creation condition (12) yields the equilibrium condition with all three policies:

\[\frac{\gamma}{q(\theta)} - \Upsilon = \frac{(1-\alpha)[x-(1+\tau)z-sT] - \alpha[\gamma\theta - f(\theta)\Upsilon]}{r+s} \tag{14}\]

All three policies affect tightness qualitatively in the expected direction — subsidies raise \(\theta\), taxes reduce it — but their quantitative effects are moderated by the wage response: policies that reduce firm profitability also reduce wages through Nash bargaining, partially offsetting the demand effect.

Optimal Policy Instruments#

For each instrument in isolation, we can solve for the value that makes equilibrium (14) coincide with the planner’s allocation (5).

Optimal hiring subsidy (\(\Upsilon > 0\), \(T = \tau = 0\)):

\[\Upsilon^* = [\alpha - \eta(\theta)]\frac{x - z + \gamma\theta}{r+s+f(\theta)} \tag{15}\]

A positive subsidy is warranted when \(\alpha > \eta\) — workers capture too large a share of the surplus, firms create too few vacancies, and the subsidy corrects for the underinvestment in job creation.

Optimal payroll tax (\(\tau > 0\), \(\Upsilon = T = 0\)):

\[\tau^* = [\eta(\theta) - \alpha]\frac{x - z + \gamma\theta}{(1-\alpha)z} \tag{16}\]

A positive tax is warranted when \(\alpha < \eta\) — firms capture too large a share of the surplus, create too many vacancies, and the tax corrects for excessive job creation. When \(\alpha > \eta\), the optimal payroll tax is negative — a payroll subsidy.

Optimal layoff tax (\(T > 0\), \(\Upsilon = \tau = 0\)):

\[T^* = [\eta(\theta) - \alpha]\frac{x - z + \gamma\theta}{s(1-\alpha)} \tag{17}\]

The layoff tax has the same qualitative properties as the payroll tax: it is positive when firms over-create vacancies (\(\alpha < \eta\)) and negative (a layoff subsidy) when firms under-create them (\(\alpha > \eta\)). However, the layoff tax is a less desirable instrument when job destruction is endogenous — it distorts the separation decision in addition to the vacancy creation decision, potentially introducing a new inefficiency while correcting the original one.

Numerical Illustration#

Hide code cell source

# ──────────────────────────────────────────────
# Optimal policy instruments as functions of alpha
# ──────────────────────────────────────────────
alpha_grid = np.linspace(0.01, 0.99, 300)

# Equilibrium tightness for each alpha (no policy)
def theta_eq(alpha_val):
    try:
        return brentq(lambda t: jc_decentralized(t, alpha_val),
                      1e-4, 100)
    except Exception:
        return np.nan

theta_vals = np.array([theta_eq(a) for a in alpha_grid])

# Optimal policies at each alpha
# Use theta_pp (planner's tightness) in the formulae
# since optimal policy should deliver theta = theta_pp
surplus_term = (x - z + gamma*theta_pp) / (r + s + f(theta_pp))

Upsilon_star = (alpha_grid - eta_pp) * surplus_term
tau_star     = (eta_pp - alpha_grid) * (x - z + gamma*theta_pp) \
               / ((1 - alpha_grid) * z)
T_star       = (eta_pp - alpha_grid) * (x - z + gamma*theta_pp) \
               / (s * (1 - alpha_grid))

fig, axes = plt.subplots(1, 3, figsize=(15, 5))

# ── Panel 1: Optimal hiring subsidy ──
ax = axes[0]
ax.plot(alpha_grid, Upsilon_star, color="#2c7bb6", lw=2)
ax.axhline(0, color="black", lw=0.8)
ax.axvline(eta_pp, color="#d7191c", lw=1.5, ls="--",
           label=rf"Hosios: $\eta={eta_pp:.3f}$")
ax.fill_between(alpha_grid, Upsilon_star, 0,
                where=Upsilon_star > 0,
                color="#2c7bb6", alpha=0.2,
                label=r"Subsidy ($\alpha>\eta$: too few vacancies)")
ax.fill_between(alpha_grid, Upsilon_star, 0,
                where=Upsilon_star < 0,
                color="#d7191c", alpha=0.2,
                label=r"Tax ($\alpha<\eta$: too many vacancies)")
ax.set_xlabel(r"Bargaining Power $\alpha$", fontsize=11)
ax.set_ylabel(r"Optimal Hiring Subsidy $\Upsilon^*$", fontsize=11)
ax.set_title("Optimal Hiring Subsidy\n"
             r"$\Upsilon^* = (\alpha-\eta)\frac{x-z+\gamma\theta}"
             r"{r+s+f(\theta)}$", fontsize=10)
ax.legend(fontsize=8)

# ── Panel 2: Optimal payroll tax ──
ax = axes[1]
# Clip extreme values near alpha=1 where (1-alpha)*z -> 0
tau_plot = np.clip(tau_star, -3, 3)
ax.plot(alpha_grid, tau_plot, color="#1a9641", lw=2)
ax.axhline(0, color="black", lw=0.8)
ax.axvline(eta_pp, color="#d7191c", lw=1.5, ls="--",
           label=rf"Hosios: $\eta={eta_pp:.3f}$")
ax.fill_between(alpha_grid, tau_plot, 0,
                where=tau_plot > 0,
                color="#1a9641", alpha=0.2,
                label=r"Tax ($\alpha<\eta$: too many vacancies)")
ax.fill_between(alpha_grid, tau_plot, 0,
                where=tau_plot < 0,
                color="#d7191c", alpha=0.2,
                label=r"Subsidy ($\alpha>\eta$: too few vacancies)")
ax.set_xlabel(r"Bargaining Power $\alpha$", fontsize=11)
ax.set_ylabel(r"Optimal Payroll Tax $\tau^*$", fontsize=11)
ax.set_title("Optimal Payroll Tax\n"
             r"$\tau^* = (\eta-\alpha)\frac{x-z+\gamma\theta}"
             r"{(1-\alpha)z}$", fontsize=10)
ax.legend(fontsize=8)

# ── Panel 3: All three instruments compared ──
ax = axes[2]
T_plot = np.clip(T_star, -5, 5)
ax.plot(alpha_grid, Upsilon_star, color="#2c7bb6", lw=2,
        label=r"Hiring subsidy $\Upsilon^*$")
ax.plot(alpha_grid, tau_plot, color="#1a9641", lw=2,
        ls="--", label=r"Payroll tax $\tau^*$")
ax.plot(alpha_grid, T_plot, color="#d7191c", lw=2,
        ls="-.", label=r"Layoff tax $T^*$")
ax.axhline(0, color="black", lw=0.8)
ax.axvline(eta_pp, color="gray", lw=1.5, ls=":",
           alpha=0.7, label=rf"Hosios $\alpha^*=\eta={eta_pp:.3f}$")
ax.set_xlabel(r"Bargaining Power $\alpha$", fontsize=11)
ax.set_ylabel("Optimal Policy Value", fontsize=11)
ax.set_title("Optimal Policy Instruments Compared",
             fontsize=11)
ax.legend(fontsize=9)

fig.suptitle("Optimal Labor Market Policies", fontsize=13, y=1.02)
plt.tight_layout()
plt.show()
_images/9277a43719b1be094349e0be50b00936b464af168f9e881c6e641416fe77150a.png

All three panels share the same zero-crossing point at \(\alpha = \eta(\theta^{PP})\) — the Hosios value — confirming that no policy intervention is needed when the Hosios condition holds. The hiring subsidy is positive (a true subsidy) when \(\alpha > \eta\) and negative (a tax on job creation) when \(\alpha < \eta\), while the payroll and layoff taxes have the opposite sign pattern. The magnitudes differ across instruments: the layoff tax requires a larger absolute value than the payroll tax to achieve the same correction, reflecting the fact that the layoff tax operates through the separation margin rather than the hiring margin.

Competitive Search Equilibrium#

Directed Search and Wage Posting#

The Hosios condition provides a necessary and sufficient condition for the Nash bargaining equilibrium to be efficient, but it requires a precise relationship between structural parameters that will generally fail to hold. Moen (1997) proposes an alternative market structure — competitive search equilibrium — in which the decentralized equilibrium is always efficient, without any restriction on parameters.

The key departure from the benchmark model is that wages are posted before matching takes place, rather than bargained after a meeting. This creates a fundamentally different strategic environment:

  • Firms post a wage \(w_i\) when opening a vacancy, committing to pay this wage to any worker they hire.

  • Workers observe posted wages and direct their search toward submarkets offering the highest expected income.

  • The labor market is segmented into submarkets, each defined by a posted wage \(w_i\) and an associated tightness \(\theta_i\).

This structure generates a powerful mechanism: by posting a higher wage, a firm attracts more workers and fills its vacancy faster, but at lower profit per match. The firm therefore faces a genuine trade-off between wage and hiring speed, and internalizes the effect of its wage choice on the arrival rate of workers — exactly the externality that Nash bargaining fails to price.

Workers’ Decision: The Participation Constraint#

Workers direct their search toward the submarket offering the highest expected income. Since all workers are identical, in equilibrium all active submarkets must yield the same expected utility \(W_u\). From the worker’s Bellman equations:

\[rW_u^i = z + f(\theta_i)(W_n^i - W_u^i), \qquad rW_n^i = w_i - s(W_n^i - W_u^i)\]

solving for \(rW_u^i\) in terms of \(w_i\) and \(\theta_i\):

\[rW_u^i = \frac{(r+s)z + w_i f(\theta_i)}{r+s+f(\theta_i)}\]

Setting \(rW_u^i = rW_u\) for all active submarkets and solving for the relationship between \(w_i\) and \(\theta_i\) consistent with worker indifference:

\[f(\theta_i) = \frac{rW_u - z}{w_i - rW_u}(r+s) \tag{18}\]

This is the workers’ participation constraint: it defines the wage-tightness frontier along which workers are indifferent between submarkets. The frontier slopes downward: submarkets with higher wages have lower tightness (fewer workers per vacancy) because workers are willing to endure longer search for better-paying jobs. Submarkets offering wages below \(rW_u\) attract no workers and shut down.

Firms’ Decision: Optimal Wage Posting#

Firms choose a wage to maximize the value of opening a vacancy, taking the participation constraint (18) as given — they understand that their wage choice determines the arrival rate of workers:

\[w_i = \arg\max \; J_v^i = \frac{-\gamma(r+s) + q(\theta_i(w_i))(x-w_i)}{r+s+q(\theta_i(w_i))} \quad \text{s.t. equation (18)}\]

With free entry and a fixed entry cost \(K\), the equilibrium requires \(J_v^i = K\) for all active firms.

Equilibrium and Efficiency#

Solving the firm’s constrained optimization problem yields the equilibrium job creation condition:

\[\frac{\gamma}{q(\theta)} = \frac{1-\eta(\theta)}{\eta(\theta)} \cdot \frac{w - rW_u}{r+s} \tag{19}\]

and the equilibrium posted wage:

\[w = (1-\eta(\theta))z + \eta(\theta)(x + \gamma\theta) \tag{20}\]

Comparing equation (20) to the Nash bargained wage $w = \alpha(x+\gamma\theta)

  • (1-\alpha)z\(: the competitive search wage is exactly the Nash bargained wage evaluated at \)\alpha = \eta(\theta)$ — the Hosios condition. The competitive search equilibrium always delivers the efficient allocation, for any parameter values, because the wage posting mechanism endogenously generates the correct sharing rule.

Why Competitive Search is Always Efficient

In competitive search equilibrium, the firm’s optimal wage posting choice internalizes the congestion externality directly. By committing to a wage before search takes place, the firm accounts for how its wage affects the arrival rate of workers — and therefore the social cost of its vacancy creation decision. The equilibrium wage posting formula (20) is exactly the Nash bargained wage at the Hosios condition, so the decentralized equilibrium coincides with the planner’s allocation for any values of the underlying parameters.

The economic mechanism behind this result rests on two features working together:

  1. Submarket segmentation: workers can freely move between submarkets, so firms that post unfavorable wages attract no workers. This mobility disciplines firms’ wage posting choices.

  2. Pre-commitment: because wages are posted before search, the firm’s wage choice directly determines the probability of meeting a worker. The firm therefore cannot treat the arrival rate of workers as independent of its wage — it must internalize the link between wages and matching rates.

Numerical Illustration#

Hide code cell source

# ──────────────────────────────────────────────
# Competitive search equilibrium
# ──────────────────────────────────────────────

# ── Solve for competitive search equilibrium ──
# JC condition (19): gamma/q(theta) = (1-eta)/eta * (w-rWu)/(r+s)
# Wage (20):         w = (1-eta)*z + eta*(x + gamma*theta)
# These two + free entry J_v = K determine (theta, w, W_u)
# With K=0 (free entry) we solve JC_planner = competitive search JC

# Competitive search wage at each theta
def w_cs(theta):
    return (1 - eta(theta))*z + eta(theta)*(x + gamma*theta)

# Show that competitive search wage = Nash wage at Hosios alpha
theta_cs_grid = np.linspace(0.01, 5, 300)
w_cs_vals     = w_cs(theta_cs_grid)
w_nash_hosios = eta_pp*(x + gamma*theta_cs_grid) + (1-eta_pp)*z

fig, axes = plt.subplots(1, 2, figsize=(13, 5))

# ── Panel 1: Wage rules comparison ──
ax = axes[0]
ax.plot(theta_cs_grid, w_cs_vals, color="#2c7bb6", lw=2,
        label="Competitive search wage\n"
              r"$w=(1-\eta)z+\eta(x+\gamma\theta)$")
ax.plot(theta_cs_grid,
        alpha*(x + gamma*theta_cs_grid) + (1-alpha)*z,
        color="#d7191c", lw=2, ls="--",
        label=rf"Nash wage ($\alpha={alpha}$)")
ax.plot(theta_cs_grid, w_nash_hosios,
        color="#1a9641", lw=2, ls="-.",
        label=rf"Nash wage ($\alpha=\eta={eta_pp:.2f}$, Hosios)")
ax.axhline(x, color="gray", lw=1, ls=":", alpha=0.7)
ax.text(4.5, x+0.01, "$x$", fontsize=10, color="gray")
ax.axhline(z, color="gray", lw=1, ls=":", alpha=0.7)
ax.text(4.5, z+0.01, "$z$", fontsize=10, color="gray")
ax.set_xlabel(r"Market Tightness $\theta$", fontsize=11)
ax.set_ylabel("Wage $w$", fontsize=11)
ax.set_title("Competitive Search vs Nash Bargaining Wage",
             fontsize=11)
ax.legend(fontsize=9)
ax.set_ylim(z - 0.05, x + 0.1)

# ── Panel 2: Surplus division comparison ──
# Worker share under each wage rule as function of theta
ax = axes[1]

def worker_share(w_val, theta_val):
    """Worker's share of joint surplus."""
    ws = (w_val - z) / (r + f(theta_val) + s)
    js = (x - z) / (r + s + alpha*f(theta_val))
    return ws / js if js > 0 else np.nan

shares_cs    = np.array([eta(t) for t in theta_cs_grid])
shares_nash  = np.full_like(theta_cs_grid, alpha)

ax.plot(theta_cs_grid, shares_cs, color="#2c7bb6", lw=2,
        label=r"Competitive search: $\eta(\theta)$")
ax.axhline(alpha, color="#d7191c", lw=2, ls="--",
           label=rf"Nash bargaining: $\alpha={alpha}$ (constant)")
ax.axhline(eta_pp, color="#1a9641", lw=1.5, ls="-.",
           label=rf"Hosios value: $\eta(\theta^{{PP}})={eta_pp:.3f}$")
ax.set_xlabel(r"Market Tightness $\theta$", fontsize=11)
ax.set_ylabel("Worker's surplus share", fontsize=11)
ax.set_title("Worker's Surplus Share\n"
             "Competitive Search vs Nash Bargaining",
             fontsize=11)
ax.legend(fontsize=9)
ax.set_ylim(0, 1)

fig.suptitle("Competitive Search Equilibrium", fontsize=13, y=1.02)
plt.tight_layout()
plt.show()
_images/9c70429aefe34e4f70293bae5f36c22a6f9689a45eb7cab86f6d32309fa42a68.png

The left panel compares the competitive search wage rule to two Nash bargaining wage rules: the benchmark (\(\alpha = 0.5\)) and the Hosios Nash wage (\(\alpha = \eta(\theta^{PP})\)). The competitive search wage (blue) coincides with the Hosios Nash wage (green) at the equilibrium tightness \(\theta^{PP}\), confirming the efficiency result analytically. The right panel shows the worker’s surplus share under each rule: Nash bargaining delivers a constant share \(\alpha\) regardless of tightness, while competitive search delivers a share equal to \(\eta(\theta)\) — varying with tightness in exactly the way required by the Hosios condition. This is the sense in which competitive search endogenously generates the efficient sharing rule: the wage posting mechanism causes the worker’s share to track the matching elasticity, internalizing the congestion externality at every level of tightness.

Conclusion#

This notebook has developed the theory of efficiency in search economies and characterized the conditions under which decentralized markets maximize social welfare. The main results are as follows.

The social planner’s problem reveals that the constrained efficient allocation differs from the decentralized Nash bargaining equilibrium whenever \(\alpha_L \neq \eta_L(\theta^{PP})\). The planner’s job creation condition weights the surplus by \(1-\eta_L\) rather than \(1-\alpha_L\), reflecting the social cost of the congestion externalities on each side of the market.

The Hosios condition \(\alpha_L = \eta_L\) is the precise requirement for efficiency: it ensures that the worker’s bargaining share correctly prices the externalities. When the Hosios condition fails, unemployment is either inefficiently high (\(\alpha > \eta\), too few vacancies) or inefficiently low (\(\alpha < \eta\), too many vacancies). The condition has a welfare interpretation: it is also the bargaining power that maximizes the expected income of unemployed workers, highlighting the role of the unemployed as outsiders whose welfare is ignored in the Nash bargaining between insiders.

Labor market policies — hiring subsidies, payroll taxes, and layoff taxes — can restore efficiency when the Hosios condition fails. Each instrument has a precisely calibrated optimal value that equates the decentralized and planner’s allocations. The optimal instruments have opposite signs depending on whether the economy suffers from too much or too little vacancy creation.

Competitive search equilibrium provides a market structure that is always efficient, without requiring the Hosios condition to hold as a restriction on primitive parameters. By posting wages before search and allowing workers to direct their search toward preferred submarkets, firms internalize the congestion externality through their wage posting decision. The equilibrium wage is exactly the Nash bargained wage at the Hosios condition — not because parameters happen to satisfy it, but because the wage posting mechanism endogenously generates the correct sharing rule.