Skip to content

Instantly share code, notes, and snippets.

@robwiss
Created October 8, 2013 20:50
Show Gist options
  • Save robwiss/6891423 to your computer and use it in GitHub Desktop.
Save robwiss/6891423 to your computer and use it in GitHub Desktop.
Analysis of the advantage given by bunkers
Display the source blob
Display the rendered blob
Raw
{
"metadata": {
"name": ""
},
"nbformat": 3,
"nbformat_minor": 0,
"worksheets": [
{
"cells": [
{
"cell_type": "code",
"collapsed": false,
"input": [
"# functions for running the experiment\n",
"\n",
"import roller\n",
"\n",
"def roll_till_end(a_army, d_army, bunker):\n",
" while a_army > 1 and d_army > 0:\n",
" a_army, d_army = roller.roll_once(a_army, d_army, bunker=bunker)\n",
" \n",
" return a_army, d_army\n",
"\n",
"def run_trials(trials, d_army_range, bunker):\n",
" a_army_initial = 1000 # chosen to be large enough to kill all def\n",
" results = {}\n",
" for d_army in xrange(*d_army_range):\n",
" results[d_army] = []\n",
" for i in xrange(trials):\n",
" a_alive, d_alive = roll_till_end(a_army_initial, d_army, bunker=bunker)\n",
" a_needed = a_army_initial - a_alive\n",
" results[d_army].append(a_needed)\n",
" return results"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 1
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"# run the experiment for bunker and no bunker\n",
"bunker = run_trials(10000, (5, 50, 5), True)\n",
"no_bunker = run_trials(10000, (5, 50, 5), False)"
],
"language": "python",
"metadata": {},
"outputs": []
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"import pandas as pd\n",
"\n",
"def side_by_side(*objs, **kwds):\n",
" from pandas.core.common import adjoin\n",
" space = kwds.get('space', 4)\n",
" reprs = [repr(obj).split('\\n') for obj in objs]\n",
" print adjoin(space, *reprs)"
],
"language": "python",
"metadata": {},
"outputs": [],
"prompt_number": 2
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df_bunker = pd.DataFrame(bunker)\n",
"df_no = pd.DataFrame(no_bunker)\n",
"side_by_side(df_bunker.mean(), df_no.mean())"
],
"language": "python",
"metadata": {},
"outputs": [
{
"output_type": "stream",
"stream": "stdout",
"text": [
"5 8.0346 5 4.0073 \n",
"10 16.2056 10 8.2825 \n",
"15 24.4279 15 12.4920 \n",
"20 32.7623 20 16.8635 \n",
"25 40.9279 25 20.9976 \n",
"30 49.4057 30 25.3942 \n",
"35 57.5252 35 29.6516 \n",
"40 65.6782 40 33.8682 \n",
"45 73.8800 45 38.1472 \n",
"dtype: float64 dtype: float64\n"
]
}
],
"prompt_number": 23
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"df_bunker.mean().plot(kind='bar', label='bunker')\n",
"df_no.mean().plot(kind='bar', color='red', label='no bunker')\n",
"legend(loc='best')\n",
"xlabel('defenders')\n",
"ylabel('attackers')\n",
"title('Attackers to take a country')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 24,
"text": [
"<matplotlib.text.Text at 0x4cf0c50>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\nY4d8DzqhWAAAAABJRU5ErkJggg==\n",
"text": [
"<matplotlib.figure.Figure at 0x4cb6150>"
]
}
],
"prompt_number": 24
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Difference between Bunker/No Bunker\n",
"-----------------------------------"
]
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"difference = df_bunker.mean() - df_no.mean()\n",
"difference"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 27,
"text": [
"5 4.0273\n",
"10 7.9231\n",
"15 11.9359\n",
"20 15.8988\n",
"25 19.9303\n",
"30 24.0115\n",
"35 27.8736\n",
"40 31.8100\n",
"45 35.7328\n",
"dtype: float64"
]
}
],
"prompt_number": 27
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"difference.plot()\n",
"xlim([0, None])\n",
"title('# Attackers needed to defeat bunker - # to defeat no bunker')"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 29,
"text": [
"<matplotlib.text.Text at 0x4ce8950>"
]
},
{
"metadata": {},
"output_type": "display_data",
"png": "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\na+bNm8egQYNK3W7Tpk2pU+f3TpqLiws5OTlkZmZy5coVm+9JlFLWP2VTUlJYvXq1TQuqoKCAtLQ0\nlFK0aNHCZjs333yzzT5V9L7Kzl7iuXPnKCgosNleq1atOH36dKm3P3PmjE27pFWrVjY5bzT21ypv\nvwBWr17Nyy+/THJyMqA9P8+fP2/XfhUrmbWgoIBz587ZdV9fX1/r/11cXLh69SoWi4U6deqglGLF\nihWEh4fb7F9Z+3TmzJlSM5W0YMECa2szKiqKN95447rbBAQEcPnyZbKzs9myZQsFBQUUFhbi7+/P\n2LFjWbp0qV37l5aWZvP7M5lMtGzZ0iZrsTNnzlz3url2P1JSUpg2bdp1LdPTp09ft78pKSkUFBTY\nfEFtsVisWTIyMpg2bRpfffUV2dnZWCyWclt7pSnrdVrR5zvY1guTyURAQECpY1SRHKDVh61bt+Lq\n6srf//53621SUlLYv3+/zeuosLCQ0aNH22SwR7k9fy8vLy5evMiKFSuYMGECWVlZDBgwgC1btpCV\nlVVm4T916hS7du0iLi4Of39//P392bBhA9u2bePChQul3qe0b7YnT55McHAwJ06c4NKlSzz//PPW\ngtmqVSubflrJx+rfvz+zZ8+mb9++nD171nqf1q1bk5WVZf3366+/smXLFuv9SuZo27Yt69atIzMz\nk1mzZvHggw+Sm5tb3rBdx9vbm0aNGnHkyBHrdi9evMivv/5qzfWPf/zDJldOTg7Dhw/H39//uidf\nSkqK9f9/5L5lzSIo+XNvb2/q169vLbCgfTlX1pPL39/f2sstvm2xli1bljv2JZW3XykpKUycOJHX\nX3+dCxcukJWVRceOHa1vavbOkiiZtX79+nh7e9O4cWOuXLliva6oqIjMzEy7HrN4+ytWrCAlJYUZ\nM2bYtU/X3rcsTz75JNnZ2WRnZ5da+EF77W3fvp1+/fqRlZXFxIkTeeONN8jKyiq38JfcbvPmzW2e\nZ0opUlNTr/swUXzb1NTU62577X6/9dZbNvt9+fLlUqf0tmzZkgYNGnD+/HnrbS9dumT9buTJJ5+k\nbt26HDp0iEuXLrFmzRqb70YqM0Omos93wGY/LRYLp06donnz5oBWzK99HqWlpdmdz2QyMWHCBO69\n914GDhxofZxWrVrRp08fm7HMzs7m9ddfr8iuAnZ+4fvdd9/RtWtXQPsC8UYzfdasWUP79u05fvw4\n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\nAAAAAElFTkSuQmCC\n",
"text": [
"<matplotlib.figure.Figure at 0x3723f50>"
]
}
],
"prompt_number": 29
},
{
"cell_type": "code",
"collapsed": false,
"input": [
"from scipy import stats\n",
"slope, intercept, r_value, p_value, std_err = stats.linregress(difference.index, difference)\n",
"slope"
],
"language": "python",
"metadata": {},
"outputs": [
{
"metadata": {},
"output_type": "pyout",
"prompt_number": 32,
"text": [
"0.79490266666666676"
]
}
],
"prompt_number": 32
}
],
"metadata": {}
}
]
}
import random
def dieroll(n):
"""Roll an n-sided die and return result"""
return int(random.random() * n) + 1
def roll_once(
a_army, d_army, a_dice=None, d_dice=None, firepower=False, ambush=False,
double_casualties=False, bunker=False, atkrad=False, dfndrad=False
):
# bail if the attacker or defender doesn't have enough guys to roll
if a_army < 2 or d_army < 1:
return (a_army, d_army)
a_dice_requested = a_dice
d_dice_requested = d_dice
# figure out how many dice are allowed
a_dice_modifier = 0
if firepower:
a_dice_modifier += 1
if atkrad:
a_dice_modifier -= 1
a_dice = min(a_army - 1, 3) + a_dice_modifier
if a_dice == 0:
return (a_army, d_army)
d_dice_modifier = 0
if bunker:
d_dice_modifier += 1
if dfndrad:
d_dice_modifier -= 1
d_dice = min(d_army, 2) + d_dice_modifier
if d_dice == 0:
return (a_army, d_army)
# if the user has requested an allowable amount of dice, set it
if 0 < a_dice_requested <= a_dice:
a_dice = a_dice_requested
if 0 < d_dice_requested <= d_dice:
d_dice = d_dice_requested
# roll the dice
a_rolls = sorted([dieroll(6) for i in xrange(a_dice)])
d_rolls = sorted([dieroll(6) for i in xrange(d_dice)])
# figure out the number of casualties. Should be equal to the minimum
# amount of dice rolled. However, defender casualties are capped at 2 b/c
# the bonus die from the bunker doesn't count toward their possible losses.
num_casualties = min( a_dice, min(d_dice, 2) )
for i in xrange(num_casualties):
if ambush:
a_wins = a_rolls[-1] >= d_rolls[-1]
else:
a_wins = a_rolls[-1] > d_rolls[-1]
if a_wins:
if double_casualties:
d_army -= 2
else:
d_army -= 1
else:
a_army -= 1
a_rolls.pop()
d_rolls.pop()
return (a_army, d_army)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment