General Equilibrium with Public Goods:
Some Simple Examples


Carlo Perroni
Istituto di Finanza
Universiti di Genova
ITALY
September 1988

Revised 1995

Thomas Rutherford
Department of Economics
University of Colorado

This file presents different equilibrium concepts for public goods with a number of simple numerical models.

Return to the MPSGE home page


Common features of the illustrative models included in this file include:

Two private goods (X, Y)
Two primary factors (K,L)
One public good (G)
Two households (R,P)

Primary factors are used in the production of both private goods, X and Y, with Cobb-Douglas technologies. Public goods are produced using fixed fractions of the private inputs.

Consumers have Cobb-Douglas utility functions over private goods and public goods.

G is a pure (non-rivalrous and non-excludable) public good. This characteristic is represented simply distinguishing the consumption for the two consumers through "individual prices".

In any equilibrium, both consumers enjoy the same quantity of public good, so

G = CG("R") = CG("P")

where G without an argument denotes the level of production of the public good, and CG(H) denotes the level of consumption.

Four different types of equilibria are illustrated here:

a) LINDAHL EQUILIBRIUM.

In this equilibrium, consumers contribute to provision of the public good according to their marginal willingness to pay. This model is logically equivalent to a general equilibrium for a model in which the G sector produces joint products in fixed proportion. A zero profit condition applies to this sector and this ensures coverage of the cost of the public good. the market structure ensures optimality of the level of provision. Moreover the cost of the public good is distributed according to marginal benefit. This results in a Lindahl equilibrium.

b) SAMUELSON EQUILIBRIUM.

Here, we retain equality of marginal cost of production and aggregate marginal willingness to pay, but we decouple contributions from marginal valuations. Redistributing the cost between the consumers still achieves an optimal level of provision, but not a Lindahl equilibrium.

c) FIXED PROVISION EQUILIBRIUM.

The provision of G is in some way fixed and the resulting equilibrium is suboptimal. Here, we fix G indirectly by fixing tax rates on factor inputs to production. A fixed supply of public goods produces shadow prices for the consumers which are different from "market" prices.

d) SUBSCRIPTION EQUILIBRIUM.

This is described by Malinvaud (1972, Lectures on Microeconomic Theory). At the margin each consumer faces a price for his public good consumption equal to the total cost of the public good. The resulting equilibrium is suboptimal (the level of production of Y is too low).

ModelDescription
data Lindahl model -- sets and input data defined
LINDAHL Lindahl model -- MPSGE formulation
ALGEBRAIC Lindahl model -- MCP formulation using GAMS algebra
SJM_DUAL Lindahl model -- SJM formulation in dual (price) space
SJM_PRIMAL Lindahl model -- SJM formulation in primal (quantity) space
SAMUELSON Samuelson model -- MPSGE formulation
FIXED Fixed provision model -- MPSGE formulation
SUBSCRIBE Subscription model -- MPSGE formulation

* --------------------------------------------------------------------
* Benchmark data for the Lindahl model:


SET     H       HOUSEHOLDS  / R, P/

        F       PRIMARY FACTORS /K, L/,

        I       PRIVATE GOODS /X, Y/;

ALIAS (I,J);

TABLE   ENDOW(F,H)      PRIMARY FACTOR ENDOWMENTS
                R       P
        L       0.4     0.6
        K       0.6     0.4

TABLE   DEMAND(*,H)     PRIMARY AND PUBLIC GOODS DEMAND
                R       P
        X       0.5     0.3
        Y       0.5     0.7
        G       0.1     0.3

TABLE   INPUT(*,*)      FACTOR AND GOODS INPUT REQUIREMENTS
                X       Y       G
        K       0.3     0.8
        L       0.7     0.2
        X                       0.5
        Y                       0.5;

*--------------------------------------------------------------------
* MPSGE specification for the Lindahl model:

$ONTEXT

$MODEL:LINDAHL

$SECTORS:
        Z(I)    ! PRIVATE PRODUCTION
        G       ! PUBLIC PRODUCTION

$COMMODITIES:
        P(I)    ! PRIVATE GOODS PRICES
        W(F)    ! FACTOR PRICES
        PGC(H)  ! PRIVATE VALUATIONS

$CONSUMERS:
        RA(H)   ! REPRESENTATIVE AGENT

$PROD:G  t:0
        O:PGC(H)        Q:1
        I:P(I)          Q:INPUT(I,"G")

$PROD:Z(I)  s:1
        O:P(I)          Q:1
        I:W(F)          Q:INPUT(F,I)

$DEMAND:RA(H)  s:1
        D:P(I)          Q:DEMAND(I,H)
        D:PGC(H)        Q:DEMAND("G",H)
        E:W(F)          Q:ENDOW(F,H)

$OFFTEXT
$SYSINCLUDE mpsgeset LINDAHL
$INCLUDE LINDAHL.GEN
SOLVE LINDAHL USING MCP;

*--------------------------------------------------------------------
* Mixed complementarity formulation of Lindahl:

EQUATIONS       PROFIT_G        ZERO PROFIT CONDITION FOR G
                PROFIT_Z(I)     ZERO PROFIT CONDITION FOR Z
                MKT_PGC(H)      MARKET CLEARANCE FOR PGC
                MKT_P(I)        MARKET CLEARANCE FOR P
                MKT_W(F)        MARKET CLEARANCE FOR W
                INCOME(H)       INCOME BALANCE FOR H;

PARAMETER       PBAR(I)         REFERENCE COST INDEX FOR SECTOR I
                BETA(*,*)       COBB-DOUGLAS SHARE PARAMETERS;

PBAR(I)     = SUM(F, INPUT(F,I));
BETA(F,I)   = INPUT(F,I) / PBAR(I);
BETA("G",H) = DEMAND("G",H) / (DEMAND("G",H) + SUM(I, DEMAND(I,H)));
BETA(I,H)   = DEMAND(I,H)   / (DEMAND("G",H) + SUM(J, DEMAND(J,H)));

INCOME(H)..
        RA(H) =E= SUM(F, W(F) * ENDOW(F,H));

MKT_P(I)..
        P(I) * (Z(I) - G * INPUT(I,"G")) =G=  SUM(H, BETA(I,H) * RA(H));

MKT_PGC(H)..
        PGC(H) * G =G= BETA("G",H) * RA(H);

MKT_W(F)..
        SUM(H, ENDOW(F,H)) =G= SUM(I,Z(I)*INPUT(F,I)*P(I)/(PBAR(I)*W(F)));

PROFIT_G..
        SUM(I, P(I) * INPUT(I,"G")) =G= SUM(H, PGC(H));

PROFIT_Z(I)..
        PBAR(I) * PROD(F, W(F)**BETA(F,I)) =G= P(I);

MODEL ALGEBRAIC /INCOME.RA,
                 MKT_P.P, MKT_PGC.PGC, MKT_W.W,
                 PROFIT_G.G, PROFIT_Z.Z/;

RA.FX("R") = RA.L("R");

ALGEBRAIC.ITERLIM = 0;
SOLVE ALGEBRAIC USING MCP;

*--------------------------------------------------------------------
* Dual sequential joint maximization formulation of Lindahl:

PARAMETER       NW(H)   NEGISHI WEIGHT FOR HOUSEHOLD H;

VARIABLE        OBJVAL  OBJECTIVE VALUE
EQUATIONS       OBJDUAL OBJECTIVE FUNCTION;

OBJDUAL..       OBJVAL =E= SUM(H, NW(H) *
                (BETA("G",H) * LOG(PGC(H)) + SUM(I, BETA(I,H) * LOG(P(I))))
                - SUM(F, W(F) * ENDOW(F,H)));

*       To replicate the previous model, take the Negishi weight
*       as the equilibrium income level:

NW(H) = RA.L(H);

MODEL SJM_DUAL / OBJDUAL, PROFIT_G, PROFIT_Z/;
SOLVE SJM_DUAL USING NLP MAXIMIZING OBJVAL;

*--------------------------------------------------------------------
* Primal sequential joint maximization formulation of Lindahl:

VARIABLES       C(I,H)  CONSUMPTION BY HOUSEHOLD
                X(F,I)  FACTOR INPUTS;

EQUATIONS       OBJPRIMAL       NEGISHI MAXIMAND FOR PRIMAL-FORM NEGISHI
                GMKT(I)         GOODS MARKET
                FMKT(F)         FACTOR MARKET
                OUTPUT(I)       PRODUCTION FUNCTION;

OBJPRIMAL..     OBJVAL =E= SUM(H, NW(H) *
                  (BETA("G",H) * LOG(G) + SUM(I, BETA(I,H) * LOG(C(I,H)))));

GMKT(I)..       Z(I) =G= SUM(H, C(I,H)) + G * INPUT(I,"G");

FMKT(F)..       SUM(H, ENDOW(F,H)) =G= SUM(I,X(F,I));

OUTPUT(I)..     Z(I) =E= PROD(F, (X(F,I)/INPUT(F,I))**BETA(F,I));

C.LO(I,H) = 0.01;
X.LO(F,I) = 0.01;

MODEL SJM_PRIMAL /OBJPRIMAL, GMKT, FMKT, OUTPUT/
SOLVE SJM_PRIMAL USING NLP MAXIMIZING OBJVAL;

* --------------------------------------------------------------------
* Additional data for the Samuelson model:

PARAMETER THETA(H) HOUSEHOLD SHARE OF COST OF PUBLIC GOODS /R 0.9, P 0.1/;

$ONTEXT
$MODEL:SAMUELSON

$SECTORS:
        Z(I)    ! PRIVATE PRODUCTION
        G       ! PUBLIC PRODUCTION

$COMMODITIES:
        P(I)    ! PRIVATE GOODS PRICES
        W(F)    ! FACTOR PRICES
        PGC(H)  ! PRIVATE VALUATIONS

$CONSUMERS:
        RA(H)   ! REPRESENTATIVE AGENT

$AUXILIARY:
        NETTAX(H)       ! NET TAX PAYMENT OF HOUSEHOLD H

$PROD:G  t:0
        O:PGC(H)        Q:1
        I:P(I)          Q:INPUT(I,"G")

$PROD:Z(I) s:1
        O:P(I)
        I:W(F)          Q:INPUT(F,I)

$DEMAND:RA(H)  s:1
        D:P(I)          Q:DEMAND(I,H)
        D:PGC(H)        Q:DEMAND("G",H)
        E:W(F)          Q:ENDOW(F,H)
        E:P(I)          Q:INPUT(I,"G")          R:NETTAX(H)

*       The net tax contribution of household H equals the cost

$CONSTRAINT:NETTAX(H)
        NETTAX(H) =E= G * (THETA(H) - PGC(H) / SUM(I, P(I) * INPUT(I,"G")));

$OFFTEXT
$SYSINCLUDE mpsgeset SAMUELSON

*       Auxiliary variables are non-negative by default.  In this
*       model, we need to accomodate negative net tax contribution rates:

NETTAX.LO(H) = -INF;

$INCLUDE SAMUELSON.GEN
SOLVE SAMUELSON USING MCP;

* --------------------------------------------------------------------
* Data for the fixed provision model:

TABLE T(F,I) AD VALOREM TAX RATES ON FACTOR INPUTS TO PRODUCTION
                X       Y
        K       0.1     0
        L       0.3     0.3;

$ONTEXT
$MODEL:FIXED

$SECTORS:
        Z(I)    ! PRIVATE PRODUCTION
        G       ! PUBLIC PRODUCTION

$COMMODITIES:
        P(I)    ! PRIVATE GOODS PRICES
        W(F)    ! FACTOR PRICES
        PG      ! COST INDEX FOR PUBLIC OUTPUT
        PGC(H)  ! PRIVATE VALUATIONS

$CONSUMERS:
        RA(H)   ! REPRESENTATIVE AGENT
        GOVT    ! GOVERNMENT (COLLECTS TAXES AND PURCHASES PUBLIC GOODS)

$AUXILIARY:
        GP      ! INDEX OF GOVERNMENT PRODUCTION

$PROD:G
        O:PG            Q:1
        I:P(I)          Q:INPUT(I,"G")

$PROD:Z(I) s:1
        O:P(I)
        I:W(F)          Q:INPUT(F,I)  A:GOVT T:T(F,I)

$DEMAND:RA(H)  s:1
        D:P(I)          Q:DEMAND(I,H)
        D:PGC(H)        Q:DEMAND("G",H)
        E:W(F)          Q:ENDOW(F,H)
        E:PGC(H)        Q:1                     R:GP

$DEMAND:GOVT
        D:PG

$CONSTRAINT:GP
        GP =E= G;

$OFFTEXT
$SYSINCLUDE mpsgeset FIXED

$INCLUDE FIXED.GEN
SOLVE FIXED USING MCP;

* --------------------------------------------------------------------
* The subscription equilibrium assuming that excess revenue
* from subscription payments are returned lumpsum to households:

PARAMETER OMEGA(H) HOUSEHOLD SHARES OF GOVERNMENT SURPLUS /R 0.5, P 0.5/;

$ONTEXT
$MODEL:SUBSCRIBE

$SECTORS:
        Z(I)    ! PRIVATE PRODUCTION
        G       ! PUBLIC PRODUCTION

$COMMODITIES:
        P(I)    ! PRIVATE GOODS PRICES
        W(F)    ! FACTOR PRICES
        PGC(H)  ! PRIVATE VALUATIONS
        PT      ! TRANSFER PRICE INDEX

$CONSUMERS:
        RA(H)   ! REPRESENTATIVE AGENT
        GOVT    ! GOVERNMENT (COLLECTS TAXES AND PURCHASES PUBLIC GOODS)

$AUXILIARY:
        TG(H)   ! TAX RATE ON PUBLIC PROVISION TO HOUSEHOLD H

$PROD:G    t:0
        O:PGC(H)        Q:1     A:GOVT  N:TG(H)
        I:P(I)          Q:INPUT(I,"G")

$PROD:Z(I) s:1
        O:P(I)
        I:W(F)          Q:INPUT(F,I)

$DEMAND:RA(H)  s:1
        D:P(I)          Q:DEMAND(I,H)
        D:PGC(H)        Q:DEMAND("G",H)
        E:W(F)          Q:ENDOW(F,H)
        E:PT            Q:OMEGA(H)

$DEMAND:GOVT
        D:PT

$CONSTRAINT:TG(H)
        PGC(H) =G= SUM(I, INPUT(I,"G") * P(I));

$OFFTEXT
$SYSINCLUDE mpsgeset SUBSCRIBE

$INCLUDE SUBSCRIBE.GEN
SOLVE SUBSCRIBE USING MCP;