{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This model uses a networked representation of space as the substrate upon which agents move, and trade. (Unlike in the Virus network, in which the nodes themselves were the agents)." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import networkx\n", "import numpy\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "\n", "from boltzmann_wealth_model_network.model import BoltzmannWealthModelNetwork" ] }, { "cell_type": "code", "execution_count": 52, "metadata": {}, "outputs": [], "source": [ "model = BoltzmannWealthModelNetwork(num_agents=7, num_nodes=10)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [], "source": [ "model.run_model(10) # 10 iterations" ] }, { "cell_type": "code", "execution_count": 54, "metadata": {}, "outputs": [], "source": [ "model_out = model.datacollector.get_model_vars_dataframe()" ] }, { "cell_type": "code", "execution_count": 55, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results = model_out.plot()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Go get the Orbis data" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " % Total % Received % Xferd Average Speed Time Time Time Current\n", " Dload Upload Total Spent Left Speed\n", "100 91474 100 91474 0 0 393k 0 --:--:-- --:--:-- --:--:-- 393k\n" ] } ], "source": [ "!curl https://raw.githubusercontent.com/sfsheath/gorbit/master/gorbit-edges.csv > orbis.csv" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "import pandas as pd\n", "\n", "df = pd.read_csv('orbis.csv')\n", "Graphtype = networkx.Graph()\n", "ORBIS = networkx.from_pandas_edgelist(df, edge_attr='km', create_using=Graphtype)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [], "source": [ "import random\n", "\n", "from mesa import Agent, Model\n", "from mesa.time import RandomActivation\n", "from mesa.datacollection import DataCollector\n", "import networkx as nx\n", "\n", "from mesa.space import NetworkGrid\n", "\n", "\n", "def compute_gini(model):\n", " agent_wealths = [agent.wealth for agent in model.schedule.agents]\n", " x = sorted(agent_wealths)\n", " N = model.num_agents\n", " B = sum(xi * (N - i) for i, xi in enumerate(x)) / (N * sum(x))\n", " return 1 + (1 / N) - 2 * B\n", "\n", "\n", "class BoltzmannWealthModelNetwork2(Model):\n", " \"\"\"A model with some number of agents.\"\"\"\n", "\n", " def __init__(self, num_agents=7, num_nodes=10):\n", "\n", " self.num_agents = ORBIS.number_of_nodes()\n", " self.num_nodes = ORBIS.number_of_nodes()#num_nodes if num_nodes >= self.num_agents else self.num_agents\n", " self.G = ORBIS #nx.erdos_renyi_graph(n=self.num_nodes, p=0.5)\n", " self.grid = NetworkGrid(self.G)\n", " self.schedule = RandomActivation(self)\n", " self.datacollector = DataCollector(\n", " model_reporters={\"Gini\": compute_gini},\n", " agent_reporters={\"Wealth\": lambda _: _.wealth}\n", " )\n", "\n", " list_of_random_nodes = random.sample(self.G.nodes(), self.num_agents)\n", "\n", " # Create agents\n", " for i in range(self.num_agents):\n", " a = MoneyAgent(i, self)\n", " self.schedule.add(a)\n", " # Add the agent to a random node\n", " self.grid.place_agent(a, list_of_random_nodes[i])\n", "\n", " self.running = True\n", " self.datacollector.collect(self)\n", "\n", " def step(self):\n", " self.schedule.step()\n", " # collect data\n", " self.datacollector.collect(self)\n", "\n", " def run_model(self, n):\n", " for i in range(n):\n", " self.step()\n", "\n", "\n", "class MoneyAgent(Agent):\n", " \"\"\" An agent with fixed initial wealth.\"\"\"\n", "\n", " def __init__(self, unique_id, model):\n", " super().__init__(unique_id, model)\n", " self.wealth = 1\n", "\n", " def move(self):\n", " possible_steps = [node for node in self.model.grid.get_neighbors(self.pos, include_center=False) if\n", " self.model.grid.is_cell_empty(node)]\n", " if len(possible_steps) > 0:\n", " new_position = random.choice(possible_steps)\n", " self.model.grid.move_agent(self, new_position)\n", "\n", " def give_money(self):\n", "\n", " neighbors_nodes = self.model.grid.get_neighbors(self.pos, include_center=False)\n", " neighbors = self.model.grid.get_cell_list_contents(neighbors_nodes)\n", " if len(neighbors) > 0:\n", " other = random.choice(neighbors)\n", " other.wealth += 1\n", " self.wealth -= 1\n", "\n", " def step(self):\n", " self.move()\n", " if self.wealth > 0:\n", " self.give_money()\n" ] }, { "cell_type": "code", "execution_count": 56, "metadata": {}, "outputs": [], "source": [ "model2 = BoltzmannWealthModelNetwork2(num_agents=1200) # defaults to 1 agent per node, eg 667 agents, nodes" ] }, { "cell_type": "code", "execution_count": 60, "metadata": {}, "outputs": [], "source": [ "model2.run_model(10) # 10 iterations" ] }, { "cell_type": "code", "execution_count": 61, "metadata": {}, "outputs": [], "source": [ "model_out2 = model2.datacollector.get_model_vars_dataframe()" ] }, { "cell_type": "code", "execution_count": 62, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "results = model_out2.plot()" ] }, { "cell_type": "code", "execution_count": 67, "metadata": {}, "outputs": [], "source": [ "from mesa.batchrunner import BatchRunner\n", "\n", "fixed_params = dict(num_nodes = ORBIS.number_of_nodes())\n", "\n", "# Vary density from 0.01 to 1 by increments; np.linspace takes the start, finish, and then\n", "# number of equal spaced samples to generate within that range. \n", "variable_params = dict(num_agents=numpy.linspace(600,1200,10)[1:]\n", " )" ] }, { "cell_type": "code", "execution_count": 71, "metadata": {}, "outputs": [], "source": [ "# At the end of each model run, calculate gini\n", "# these take measurements at the end\n", "\n", "model_reporter = {\"Gini\": compute_gini}" ] }, { "cell_type": "code", "execution_count": 72, "metadata": {}, "outputs": [], "source": [ "param_run = BatchRunner(BoltzmannWealthModelNetwork2, variable_parameters=variable_params, iterations=10, \n", " fixed_parameters=fixed_params, model_reporters=model_reporter)" ] }, { "cell_type": "code", "execution_count": 74, "metadata": {}, "outputs": [], "source": [ "df = param_run.get_model_vars_dataframe()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "param_run.run_all()" ] }, { "cell_type": "code", "execution_count": 75, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
num_agentsRunGininum_nodes
0666.66666700.947176677
10733.33333300.935490677
1666.66666710.948022677
11733.33333310.944007677
2666.66666720.953677677
\n", "
" ], "text/plain": [ " num_agents Run Gini num_nodes\n", "0 666.666667 0 0.947176 677\n", "10 733.333333 0 0.935490 677\n", "1 666.666667 1 0.948022 677\n", "11 733.333333 1 0.944007 677\n", "2 666.666667 2 0.953677 677" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.head()" ] }, { "cell_type": "code", "execution_count": 76, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.scatter(df.num_agents, df.Gini)\n", "plt.grid(True)" ] } ], "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.5" } }, "nbformat": 4, "nbformat_minor": 2 }