{
"cells": [
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"┌ Info: Recompiling stale cache file /Users/john/.julia/compiled/v1.2/Plots/ld3vC.ji for Plots [91a5bcdd-55d7-5caf-9e0b-520d859cae80]\n",
"└ @ Base loading.jl:1240\n"
]
}
],
"source": [
"using Plots\n",
"gr()\n",
"default(leg=false)\n",
"\n",
"using Distributions"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"5000 0.9151200569433682 2734"
]
}
],
"source": [
"V = 1113 # Number of vikings\n",
"R = 1123 # Number of rings\n",
"\n",
"# Winner's f\n",
"w = Float64[]\n",
"\n",
"# Deaths per run\n",
"d = Int[]\n",
"\n",
"default(show=:inline)\n",
"for j in 1:5000\n",
" \n",
"# Assign rings evenly to each viking\n",
"r = zeros(Int, V)\n",
"for i in 1:R\n",
" r[i%V+1] += 1\n",
"end\n",
"\n",
"# Assign each viking a fighting skill between 0 and 1\n",
"f = 1.0.-rand(Beta(), V)\n",
"\n",
"deaths = 0\n",
"for i in 1:12000\n",
" k = rand(1:V)\n",
" l = rand(1:V)\n",
"\n",
" # Viking k challenges viking l according to collective encoding (number of rings)\n",
" if k!=l && (r[k]!=0 || r[l]!=0) && rand() < r[k] / r[k] + r[l]\n",
" #if f[k] > 0.5\n",
" deaths += 1\n",
" # Win/lose according to actual individual skill, f\n",
" if rand() < f[k] / (f[k] + f[l])\n",
" r[k] = r[k] + r[l]\n",
" r[l] = 0\n",
" #f[l] = rand()\n",
" else\n",
" r[l] = r[k] + r[l]\n",
" r[k] = 0\n",
" #f[k] = rand()\n",
" end\n",
" end\n",
" \n",
" m,_ = findmax(r)\n",
" if m == R\n",
" break\n",
" end\n",
" # Viking with most rings dies and spreads his rings to others\n",
" #for n in 1:m\n",
" # r[rand(1:V)] += 1\n",
" #end\n",
" #r[m] = 0\n",
" #f[m] = rand()\n",
"\n",
"end\n",
"\n",
"_,m = findmax(r)\n",
"push!(w, f[m])\n",
"push!(d, deaths)\n",
"histogram(w, bins=0:0.1:1)\n",
"print(j, \" \", f[m], \" \", deaths)\n",
"\n",
"end\n"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 45,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"default(show=:nothing)\n",
"plot(histogram(w, normed=true))\n",
"plot!(p1, 0:0.1:1, 0:0.2:2, lw=4)"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"Normal{Float64}(μ=2746.5226, σ=50.829580848556915)"
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dist = fit(Normal, d)"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {},
"outputs": [
{
"data": {
"image/svg+xml": [
"\n",
"\n"
]
},
"execution_count": 33,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"plot(histogram(d, normed=true))\n",
"plot!(2600:2:2900, pdf.(dist, 2600:2:2900), lw=4)\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Julia 1.2.0",
"language": "julia",
"name": "julia-1.2"
},
"language_info": {
"file_extension": ".jl",
"mimetype": "application/julia",
"name": "julia",
"version": "1.2.0"
}
},
"nbformat": 4,
"nbformat_minor": 2
}