{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# A Competitive Market \n", "\n", "Last edited: 2019-08-17\n", "\n", "A Python class for a simple one good market where agents are price takers.\n", "\n", "The market consists of the following objects:\n", "\n", "A linear demand curve:\n", "\n", "> (1) $ P_d = WTP_{max} - d*Q_d $\n", "\n", "A linear supply curve:\n", "\n", "> (2) $ P_s = OC_{min} + s*Q_s $\n", "\n", "$P_d$ is the price paid by the consumer. $P_s$ is the price received by the producer. $Q_d$ is the quantity the consumer wishes to purchase at their price. $Q_s$ is the quantity the producer wishes to supply at their price. $WTP_{max}$ is the maximum willingness-to-pay of any consumer—the y-intercept of the demand curve. $OC_{min}$ is the minimum opportunity cost of any producer—the y-intercept of the supply curve. s is the slope of the supply curve. d is the slope of the demand curve.\n", "\n", "The class provides methods to compute competitive equilibrium price and quantity, supply and demand curves, consumer surplus and producer surplus, and total surplus.\n", "\n", "Here is the implementation:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [], "source": [ "class market:\n", "\n", " def __init__(self, WTPmax, OCmin, d, s):\n", " \"\"\"\n", " Set up market parameters. 𝑊𝑇𝑃𝑚𝑎𝑥 is the maximum willingness-to-pay \n", " of any consumer—the y-intercept of the demand curve. 𝑂𝐶𝑚𝑖𝑛 is the \n", " minimum opportunity cost of any producer—the y-intercept of the \n", " supply curve. s is the slope of the supply curve. d is the slope \n", " of the demand curve...\n", " \"\"\"\n", " \n", " self.WTPmax, self.OCmin, self.d, self.s = WTPmax, OCmin, d, s\n", " \n", " if WTPmax < OCmin:\n", " raise ValueError('Insufficient demand.')\n", "\n", " def equilibrium_quantity(self):\n", " \"Compute equilibrium quantity\"\n", " return (self.WTPmax - self.OCmin)/(self.d + self.s)\n", "\n", "\n", " def equilibrium_price(self):\n", " \"Return equilibrium price\"\n", " return self.WTPmax - self.d * self.equilibrium_quantity()\n", "\n", "\n", " def consumer_surplus(self):\n", " \"Compute consumer surplus\"\n", " return (self.WTPmax - self.equilibrium_price())*self.equilibrium_quantity()/2\n", "\n", " def producer_surplus(self):\n", " \"Compute producer surplus\"\n", " return (self.equilibrium_price() - self.OCmin) * self.equilibrium_quantity() /2\n", "\n", " def total_surplus(self):\n", " \"Compute total surplus\"\n", " return self.producer_surplus() + self.consumer_surplus()\n", " \n", " def demand_curve(self,x):\n", " \"Compute demand curve\"\n", " return self.WTPmax - self.d*x\n", " \n", " def supply_curve(self,x):\n", " \"Compute supply curve\"\n", " return self.OCmin + self.s*x" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# Baseline WTPmax, OCmin, d, s\n", "baseline_params = 10,0,1,1\n", "m = market(*baseline_params)\n", "\n", "q_max = m.equilibrium_quantity() * 2\n", "q_grid = np.linspace(0.0, q_max, 100)\n", "pd = m.demand_curve(q_grid)\n", "ps = m.supply_curve(q_grid)\n", "\n", "fig, ax = plt.subplots()\n", "ax.plot(q_grid, pd, lw=2, alpha=0.6, label='demand')\n", "ax.plot(q_grid, ps, lw=2, alpha=0.6, label='supply')\n", "ax.set_xlabel('quantity', fontsize=14)\n", "ax.set_xlim(0, q_max)\n", "ax.set_ylabel('price', fontsize=14)\n", "ax.legend(loc='lower right', frameon=False, fontsize=14)\n", "ax.set(title='Market Supply, Demand, and Equilibrium')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "12.5 = producer surplus\n", "12.5 = consumer surplus\n", "25.0 = total surplus\n", "5.0 = equilibrium quantity\n", "5.0 = equilibrium price\n" ] } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "# Baseline WTPmax, OCmin, d, s\n", "baseline_params = 10,0,1,1\n", "m = market(*baseline_params)\n", "\n", "print(m.producer_surplus(), \"= producer surplus\")\n", "print(m.consumer_surplus(), \"= consumer surplus\")\n", "print(m.total_surplus(), \"= total surplus\")\n", "print(m.equilibrium_quantity(), \"= equilibrium quantity\")\n", "print(m.equilibrium_price(), \"= equilibrium price\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "----\n", "\n", " \n", "\n", "## A Competitive Market \n", "\n", "\n", "\n", "### Catch Our Breath—Further Notes:\n", "\n", "
\n", "\n", "----\n", "\n", "* Weblog Support \n", "* nbViewer \n", "\n", " \n", "\n", "----" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.7" } }, "nbformat": 4, "nbformat_minor": 4 }