In [58]:
path = joinpath(Pkg.dir(),"Sugarscape", "src", "chapterII.jl")


Out[58]:
"C:\\Users\\Ken\\.julia\\v0.3\\Sugarscape\\src\\chapterII.jl"

In [59]:
include(path)


Warning: replacing module ChapterII

In [60]:
sc = ChapterII


Out[60]:
ChapterII

In [61]:
sc.run(1)
@time scape = sc.run(500)


elapsed time: 0.21361148 seconds (34653772 bytes allocated, 13.46% gc time)
Out[61]:
Sugarscape with 400 agents

In [62]:
sc.plot(scape)


Out[62]:
PyObject <matplotlib.text.Text object at 0x000000003A5E15C0>

Figure II-4


In [63]:
function run_carrypop(N; kwargs...)
    carrypop = Int[]
    scape = sc.init_scape(sc.init_capacity(); kwargs...)    
    push!(carrypop, sum(map(sc.alive,scape.agents)))
    
    for cnt = 1:N
        sc.timestep(scape; kwargs...)
        push!(carrypop, sum(map(sc.alive,scape.agents)))
    end
    scape,carrypop
end


Out[63]:
run_carrypop (generic function with 1 method)

In [64]:
scape, carrypop = run_carrypop(500)
PyPlot.plot(carrypop)
PyPlot.title("Carrying capacity")
PyPlot.xlabel("time steps")


Out[64]:
PyObject <matplotlib.text.Text object at 0x0000000039E780B8>

Figures II-5


In [65]:
using DataFrames

In [69]:
function carrying(;sim_steps=3, time_steps=500)
    carry = DataFrame(vision=Int[], metabolism=Int[], population = Int[])
    
    for vision = 1:10, metabolism = 1:3, sims = 1:sim_steps
        scape = sc.run(time_steps; init_vision=()->rand(1:(2vision-1)), init_metabolism=()->rand(1:(2metabolism-1)))
        push!(carry, [vision, metabolism, sum(map(sc.alive, scape.agents))])
    end
    carry
end


Out[69]:
carrying (generic function with 1 method)

In [70]:
carry = carrying();


Out[70]:
visionmetabolismpopulation
111359
211360
311364
412184
512189
612183
713104
813138
913138
1021378
1121380
1221375
1322217
1422216
1522220
1623159
1723146
1823149
1931388
2031381
2131380
2232227
2332243
2432226
2533153
2633158
2733149
2841387
2941384
3041386
&vellip&vellip&vellip&vellip

In [92]:
using Gadfly

In [104]:
carry_aggr = by(carry, [:vision, :metabolism],df -> DataFrame(pop = mean(df[:population])))
plot(carry_aggr, x=:vision, y=:pop, color=:metabolism, Geom.line)


Out[104]:
visionmetabolismpop
111361.0
212185.33333333333334
313126.66666666666667
421377.6666666666667
522217.66666666666666
623151.33333333333334
731383.0
832232.0
933153.33333333333334
1041385.6666666666667
1142233.33333333333334
1243157.33333333333334
1351391.0
1452239.0
1553154.0
1661393.6666666666667
1762259.3333333333333
1863156.33333333333334
1971393.0
2072247.0
2173159.66666666666666
2281395.0
2382254.0
2483159.0
2591395.6666666666667
2692249.66666666666666
2793166.66666666666666
28101397.6666666666667
29102248.66666666666666
30103156.0
&vellip&vellip&vellip&vellip

In [108]:
plot(carry_aggr, x=:vision, y=:pop, color=:metabolism, Geom.line)


Out[108]:
vision -12.5 -10.0 -7.5 -5.0 -2.5 0.0 2.5 5.0 7.5 10.0 12.5 15.0 17.5 20.0 22.5 -10.0 -9.5 -9.0 -8.5 -8.0 -7.5 -7.0 -6.5 -6.0 -5.5 -5.0 -4.5 -4.0 -3.5 -3.0 -2.5 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 10.5 11.0 11.5 12.0 12.5 13.0 13.5 14.0 14.5 15.0 15.5 16.0 16.5 17.0 17.5 18.0 18.5 19.0 19.5 20.0 -10 0 10 20 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2.0 2.5 3.0 1.5 1.0 metabolism -500 -400 -300 -200 -100 0 100 200 300 400 500 600 700 800 900 -400 -380 -360 -340 -320 -300 -280 -260 -240 -220 -200 -180 -160 -140 -120 -100 -80 -60 -40 -20 0 20 40 60 80 100 120 140 160 180 200 220 240 260 280 300 320 340 360 380 400 420 440 460 480 500 520 540 560 580 600 620 640 660 680 700 720 740 760 780 800 -500 0 500 1000 -400 -350 -300 -250 -200 -150 -100 -50 0 50 100 150 200 250 300 350 400 450 500 550 600 650 700 750 800 pop

Animation II-3


In [112]:
import StatsBase

In [115]:
StatsBase.hist(scape.agents,10)


`histrange` has no method matching histrange(::Array{AgentInfo,1}, ::Int64)
while loading In[115], in expression starting on line 1

 in hist at statistics.jl:598