Skip to content

Instantly share code, notes, and snippets.

@blacklight
Created November 16, 2019 10:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save blacklight/fdcde4968fabfc507e801aec9d128811 to your computer and use it in GitHub Desktop.
Save blacklight/fdcde4968fabfc507e801aec9d128811 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 25,
"outputs": [],
"source": [
"# Number of agents in the market\n",
"n_agents = 1000\n",
"\n",
"# Number of iterations/transfers\n",
"n_iterations = 1e5\n",
"\n",
"# Range of initial amounts\n",
"amount_range = [50, 100]\n",
"\n",
"# Fraction of the poorest's agent amount that will be\n",
"# involved in a transfer\n",
"dw = 0.2"
],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\n",
"is_executing": false
}
}
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"pycharm": {
"is_executing": false
}
},
"outputs": [],
"source": [
"import random\n",
"import matplotlib.pyplot as plt\n",
"\n",
"\n",
"class Agent:\n",
" \"\"\"\n",
" Models an agent in a free market.\n",
" An agent has a unique ID and a certain amount of money at time t\n",
" \"\"\"\n",
"\n",
" def __init__(self, id, amount):\n",
" self.id = id\n",
" self.amount = amount\n",
" \n",
" def __str__(self):\n",
" return '[Agent {} [amount={}]]'.format(self.id, self.amount)\n",
"\n",
" @classmethod\n",
" def transfer(cls, a, b, amount, k=0.8):\n",
" \"\"\"\n",
" Perform a money transfer between agent a and b.\n",
" Based on the result of a coin flip we may randomly\n",
" multiply the amount by a quantity 0 < k < 1\n",
" (default: 0.8) to model an \"unfair\" transfer.\n",
" \"\"\"\n",
"\n",
" if coin_flip():\n",
" amount *= k\n",
" \n",
" a.amount -= amount\n",
" b.amount += amount\n",
"\n",
"\n",
"def pick_pair(agents):\n",
" \"\"\"\n",
" Randomly pick a pair of agents to engage in a transfer.\n",
" The only constraint is that an agent which has reached\n",
" a zero amount can't be involved in an outgoing transfer.\n",
" \"\"\"\n",
" while True:\n",
" a = agents.copy()\n",
" aa = a.pop(random.randint(0, len(a)-1))\n",
" bb = a.pop(random.randint(0, len(a)-1))\n",
"\n",
" if aa.amount > 0:\n",
" break\n",
"\n",
" return aa, bb\n",
"\n",
"\n",
"def coin_flip():\n",
" return random.randint(0, 1)\n",
"\n",
"\n",
"def calculate_transfer_amount(a, b, dw):\n",
" \"\"\"\n",
" The amount to be transfered will be a fraction of the\n",
" amount held by the poorest agent in the transfer (default: 20%).\n",
" If the money goes from the agent who owns less to the ones\n",
" who owns more then 95% of the amount will be actually transferred.\n",
" \"\"\"\n",
" if a.amount <= b.amount:\n",
" return a.amount * dw * 0.95\n",
"\n",
" return b.amount * dw\n",
"\n",
"\n",
"def initialize_agents(n_agents, randomize_amount=True):\n",
" \"\"\"\n",
" If randomize_amount=True then the amount will be randomly\n",
" initialized. Otherwise all the agents will start with an\n",
" amount that is the arithmetic mean of the preset amount range.\n",
" \"\"\"\n",
" agents = []\n",
" for i in range(0, n_agents):\n",
" \n",
" if randomize_amount:\n",
" amount = random.randint(*amount_range)\n",
" else:\n",
" amount = (amount_range[1] - amount_range[0]) / 2\n",
" \n",
" agent = Agent(id=i, amount=amount)\n",
" agents.append(agent)\n",
" \n",
" return agents\n",
"\n",
"\n",
"def plot_agents_amount(agents, bins=30):\n",
" plt.title('Population wealth distribution')\n",
" return plt.hist([a.amount for a in agents], bins=bins)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/plain": "(array([ 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n 0., 0., 0., 0., 0., 0., 1000., 0., 0.,\n 0., 0., 0., 0., 0., 0., 0., 0., 0.,\n 0., 0., 0.]),\n array([24.5 , 24.53333333, 24.56666667, 24.6 , 24.63333333,\n 24.66666667, 24.7 , 24.73333333, 24.76666667, 24.8 ,\n 24.83333333, 24.86666667, 24.9 , 24.93333333, 24.96666667,\n 25. , 25.03333333, 25.06666667, 25.1 , 25.13333333,\n 25.16666667, 25.2 , 25.23333333, 25.26666667, 25.3 ,\n 25.33333333, 25.36666667, 25.4 , 25.43333333, 25.46666667,\n 25.5 ]),\n <a list of 30 Patch objects>)"
},
"metadata": {},
"output_type": "execute_result",
"execution_count": 29
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"agents = initialize_agents(n_agents, randomize_amount=False)\n",
"plot_agents_amount(agents)"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"pycharm": {
"is_executing": false
}
},
"outputs": [
{
"data": {
"text/plain": "(array([556., 116., 71., 56., 32., 31., 29., 22., 12., 11., 12.,\n 11., 6., 6., 4., 5., 3., 4., 2., 2., 4., 2.,\n 0., 1., 0., 1., 0., 0., 0., 1.]),\n array([4.44559077e-04, 9.99271319e+00, 1.99849818e+01, 2.99772505e+01,\n 3.99695191e+01, 4.99617877e+01, 5.99540564e+01, 6.99463250e+01,\n 7.99385936e+01, 8.99308623e+01, 9.99231309e+01, 1.09915400e+02,\n 1.19907668e+02, 1.29899937e+02, 1.39892205e+02, 1.49884474e+02,\n 1.59876743e+02, 1.69869011e+02, 1.79861280e+02, 1.89853549e+02,\n 1.99845817e+02, 2.09838086e+02, 2.19830355e+02, 2.29822623e+02,\n 2.39814892e+02, 2.49807160e+02, 2.59799429e+02, 2.69791698e+02,\n 2.79783966e+02, 2.89776235e+02, 2.99768504e+02]),\n <a list of 30 Patch objects>)"
},
"metadata": {},
"output_type": "execute_result",
"execution_count": 31
},
{
"data": {
"text/plain": "<Figure size 432x288 with 1 Axes>",
"image/png": "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\n"
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"for i in range(0, int(n_iterations)):\n",
" a, b = pick_pair(agents)\n",
" amount = calculate_transfer_amount(a, b, dw)\n",
" Agent.transfer(a, b, amount)\n",
"\n",
"plot_agents_amount(agents)"
]
},
{
"cell_type": "code",
"execution_count": null,
"outputs": [],
"source": [],
"metadata": {
"collapsed": false,
"pycharm": {
"name": "#%%\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.8.0"
},
"pycharm": {
"stem_cell": {
"cell_type": "raw",
"source": [],
"metadata": {
"collapsed": false
}
}
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment