Skip to content

Instantly share code, notes, and snippets.

@dcalacci
Created October 17, 2016 17:04
Show Gist options
  • Save dcalacci/975024b49ced2ecaa5ec5c2691d26dd6 to your computer and use it in GitHub Desktop.
Save dcalacci/975024b49ced2ecaa5ec5c2691d26dd6 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import numpy as np\n",
"import matplotlib as mpl\n",
"mpl.use('pgf')\n",
"%matplotlib inline\n",
"import seaborn as sns"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"def generate_game(priors, info_structure, game):\n",
" \"\"\"probs is an N dimensional representing the discrete \n",
" prior probabilities of the different world states.\n",
" \n",
" info_structure is a N,p dimensional vector representing the different partitions\n",
" that players observe, where partitions[n,p] is the ID of the partition at state n for player p.\n",
" \n",
" game is a function that takes an integer strategy for p1 and p2, and returns a tuple of their payoffs. \n",
" \n",
" todo: what if priors differ between players?\n",
" \"\"\"\n",
" def payoff(strategies):\n",
" \"\"\"strategies is a dict for each player, where the key is the partition ID, \n",
" and the value is the strategy taken in that partition.\n",
" \n",
" todo: check if it is a valid strategy profile\n",
" \"\"\"\n",
" strats = np.apply_along_axis(lambda r: [strategies[n][s] for n, s in enumerate(r)], arr=info_structure, axis=0)\n",
" # calculate payoffs for each partition for each agent\n",
" payoffs = np.apply_along_axis(lambda r: game(r[0], r[1]), arr=strats, axis=0)\n",
" # then transform by priors?\n",
" return payoffs * priors\n",
" return payoff\n",
" \n",
" \n",
"priors = np.array([0.25, 0.5, 0.25])\n",
"info_structure = np.array([['r', 'b', 'b'],\n",
" ['g', 'g', 'o']])\n",
"\n",
"strategies = [{'r': 1, 'b': 0},\n",
" {'g': 1, 'o': 0}]\n",
"\n",
"\n",
"\n",
"def coordination_game(p1_strat, p2_strat):\n",
" \"\"\"\n",
" a game is a function where, given p1_strat and p2_strat, it returns a tuple (p1, p2) of payoffs.\n",
" 0 is A\n",
" 1 is B\n",
" \"\"\"\n",
" p1 = np.array([[1, -1],\n",
" [-1, 2]])\n",
" p2 = np.array([[1, -1],\n",
" [-1, 2]])\n",
" return (p1[p1_strat][p2_strat], p2[p1_strat][p2_strat])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"variable priors"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"\n",
"\n",
"priors = lambda r: np.array([0.75 - r, r, 0.25])\n",
"\n",
"info_structure = np.array([['r', 'b', 'b'],\n",
" ['g', 'g', 'o']])\n",
"\n",
"# where 1 is B and 0 is A\n",
"# first strategy here is the one we're testing for ESDS\n",
"all_strategies = [[{'r': 1, 'b': 0},\n",
" {'g': 1, 'o': 0}],\n",
" \n",
" [{'r': 0, 'b': 1},\n",
" {'g': 1, 'o': 0}],\n",
" \n",
" [{'r': 1, 'b': 1},\n",
" {'g': 1, 'o': 0}],\n",
" \n",
" [{'r': 0, 'b': 0},\n",
" {'g': 1, 'o': 0}]\n",
" ]\n",
"\n",
"\n",
"conditions = []\n",
"all_payoffs = []\n",
"\n",
"for r in np.arange(0, 0.5, 0.001):\n",
" for n, strategies in enumerate(all_strategies):\n",
" prior = priors(r)\n",
" g = generate_game(prior, info_structure, coordination_game)\n",
" payoffs = g(strategies)\n",
" conditions.append([r, n])\n",
" all_payoffs.append(sum(payoffs.T))"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import pandas as pd\n",
"df = pd.DataFrame(conditions)\n",
"df['payoffs'] = np.array(all_payoffs).T[0]\n",
"df = df.rename(columns={0: \"r\", 1: 'strategy'})"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"max_strategy_for_r = df.ix[df.groupby('r')['payoffs'].idxmax()]"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"text/plain": [
"r 0.166\n",
"strategy 0.000\n",
"payoffs 1.252\n",
"Name: 664, dtype: float64"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"upper_bound = max_strategy_for_r[max_strategy_for_r['strategy'] > 0].iloc[0].r\n",
"max_strategy_for_r[max_strategy_for_r.r < upper_bound].iloc[-1]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"So we have $r = 0.166$ as the maximum value where our given strategy is an ESDS"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nJFP/P26XCFaotoQnAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10d960c50>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"\n",
"strategy_labels = ['$S_1 = \\{B, A, A\\}$', '$S_1 = \\{B, B, B\\}$', '$S_1 = \\{A, B, B\\}$', '$S_1 = \\{A, A, A\\}$']\n",
"\n",
"strats = []\n",
"for key, grp in df.groupby(['strategy']):\n",
" strats.append(plt.plot(grp['r'], grp['payoffs'], label=strategy_labels[key]))\n",
"plt.plot((0.166, 0.166), (2.0, -1.0), '--', label='$U_1(\\{B, A, A\\}) = U_1(\\{A, B, B\\})$')\n",
"plt.legend(loc='best')\n",
"plt.xlabel(\"$r$\")\n",
"plt.ylabel(\"$U_1$\")\n",
"plt.show()"
]
}
],
"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.5.2"
},
"nav_menu": {},
"toc": {
"navigate_menu": true,
"number_sections": true,
"sideBar": true,
"threshold": 6,
"toc_cell": false,
"toc_section_display": "block",
"toc_window_display": false
}
},
"nbformat": 4,
"nbformat_minor": 0
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment