{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Rationalisation\n",
"\n",
"---\n",
"\n",
"## Definition of a strictly dominated strategy\n",
"\n",
"In a two player game $(A, B)\\in\\mathbb{{R^{m \\times n}}^2}$ a strategy $s$ is _dominated_ by strategy $\\bar s$ if for all strategies of the other player $t$:\n",
"\n",
"$$\n",
"u(s, t) < u(\\bar s, t)\n",
"$$\n",
"\n",
"---\n",
"\n",
"For example if we consider the Prisoner's Dilemma:\n",
"\n",
"$$\n",
"A =\n",
"\\begin{pmatrix}\n",
" 3 & 0\\\\\n",
" 5 & 1\n",
"\\end{pmatrix}\\qquad\n",
"B =\n",
"\\begin{pmatrix}\n",
" 3 & 5\\\\\n",
" 0 & 1\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"- we see that $A_{2j} > A_{1j}$ for all $j$, so we can say that the row players' first strategy is dominated by its second strategy.\n",
"- we see that $B_{i2} > B_{i1}$ for all $i$, so we can say that the column players' first strategy is dominated by its second strategy.\n",
"\n",
"---\n",
"\n",
"## Definition of a weakly dominated strategy\n",
"\n",
"In a two player game $(A, B)\\in\\mathbb{{R^{m \\times n}}^2}$ a strategy $s$ is _weakly dominated_ by strategy $\\bar s$ if for all strategies of the other player $t$:\n",
"\n",
"$$\n",
"u(s, t) \\leq u(\\bar s, t)\n",
"$$\n",
"\n",
"**and there exists** a $t'$ such that:\n",
"\n",
"$$\n",
"u(s, t') < u(\\bar s, t')\n",
"$$\n",
"\n",
"---\n",
"\n",
"For example if we consider the modified version of the previous game:\n",
"\n",
"$$\n",
"A =\n",
"\\begin{pmatrix}\n",
" 3 & 0\\\\\n",
" 3 & 1\n",
"\\end{pmatrix}\\qquad\n",
"B =\n",
"\\begin{pmatrix}\n",
" 3 & 3\\\\\n",
" 0 & 1\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"- we see that $A_{2j} \\geq A_{1j}$ for all $j$ **and** $A_{22} > A_{12}$, so we can say that the row players' first strategy is weakly dominated by its second strategy.\n",
"- we see that $B_{i2} \\geq B_{i2}$ for all $i$ **and** $B_{22} > B_{21}$, so we can say that the column players' first strategy is weakly dominated by its second strategy.\n",
"\n",
"We can use `numpy` to verify if a strategy is weakly/strictly dominated:"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"import numpy as np\n",
"A = np.array([[3, 0], [3, 1]])\n",
"B = np.array([[3, 3], [0, 1]])"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Verify that first row is weakly dominated by second row\n",
"all(A[0,:] <= A[1,:]) and any(A[0,:] < A[1,:])"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Verify that first column is weakly dominated by second column\n",
"all(B[:,0] <= B[:,1]) and any(B[:,0] < B[:,1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"---\n",
"\n",
"## Definition of common knowledge of rationality\n",
"\n",
"An important aspect of Game Theory and the tool that we have in fact been using so far is to assume that players are rational. However we can (and need) to go further:\n",
"\n",
"- The players are rational;\n",
"- The players all know that the other players are rational;\n",
"- The players all know that the other players know that they are rationals;\n",
"...\n",
"\n",
"\n",
"This chain of assumptions is called Common Knowledge of Rationality (CKR). By applying the CKR assumption we can attempt to predict rational behaviour through the iterated elimination of weakly dominated strategies. This process is called **rationalisation**.\n",
"\n",
"Let us consider the following game:\n",
"\n",
"$$\n",
"A =\n",
"\\begin{pmatrix}\n",
" 10 & 5 & 1\\\\\n",
" 10 & 5 & 4\n",
"\\end{pmatrix}\\qquad\n",
"B =\n",
"\\begin{pmatrix}\n",
" 1 & 1 & -2\\\\\n",
" 1 & 0 & 2\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"We see that the rows players' first strategy is weakly dominated by its second."
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"True"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"A = np.array([[10, 5, 1], [10, 5, 4]])\n",
"B = np.array([[1, 1, -2], [1, 0, 2]])\n",
"all(A[0,:] <= A[1,:]) and any(A[0,:] < A[1,:])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Once we have removed that strategy the game reduces to:\n",
"\n",
"$$\n",
"A =\n",
"\\begin{pmatrix}\n",
" 10 & 5 & 1\n",
"\\end{pmatrix}\\qquad\n",
"B =\n",
"\\begin{pmatrix}\n",
" 1 & 0 & 2\n",
"\\end{pmatrix}\n",
"$$\n",
"\n",
"and now we see that the column players' third strategy would dominate the other two.\n",
"\n",
"Thus a prediction of rational behaviour would be the strategy profile: $(r_2, c_3)$.\n",
"\n",
"Not all games allow for prediction of rational behaviour through rationalisation **and** for some games the prediction will change depending on the order of the elimination."
]
}
],
"metadata": {
"anaconda-cloud": {},
"kernelspec": {
"display_name": "Python [conda env:gt]",
"language": "python",
"name": "conda-env-gt-py"
},
"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.1"
}
},
"nbformat": 4,
"nbformat_minor": 2
}