Advertisement
Guest User

Untitled

a guest
Jan 29th, 2017
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 2.61 KB | None | 0 0
  1.  
  2. using PyPlot
  3.  
  4.  
  5.  
  6.  
  7. function simulate(N::Int64, D::Int64, simCounter::Int64)
  8.  
  9.   E1 = zeros(Float64, N)
  10.   Eq1 = zeros(Float64, N)
  11.   D1 = zeros(Float64, N)
  12.  
  13.   E2 = zeros(Float64, N)
  14.   Eq2 = zeros(Float64, N)
  15.   D2 = zeros(Float64, N)
  16.  
  17.   for n in 2:N
  18.     for i in 1:simCounter
  19.       urns = zeros(Int64, n)
  20.       # First process
  21.       for i in 1:n
  22.         ballToUrn = rand(1:n)
  23.         urns[ballToUrn] += 1
  24.       end
  25.       E1[n] += maximum(urns)
  26.       Eq1[n] += (maximum(urns)^2)
  27.  
  28.       # Second process
  29.       urns = zeros(Int64, n)
  30.       for i in 1:n
  31.         idx = getUrnIdx(urns, D, n)
  32.         urns[idx] += 1
  33.       end
  34.       E2[n] += maximum(urns)
  35.       Eq2[n] += (maximum(urns)^2)
  36.     end
  37.     E1[n] /= simCounter
  38.     Eq1[n] /= simCounter
  39.     D1[n] = sqrt(Eq1[n] - (E1[n]^2))
  40.  
  41.     E2[n] /= simCounter
  42.     Eq2[n] /= simCounter
  43.     D2[n] = sqrt(Eq2[n] - (E2[n]^2))
  44.   end
  45.   #printDiagram(E1,D1,1)
  46.   printDiagram(E2,D2,2)
  47. end
  48.  
  49.  
  50. function printDiagram(E::Array, Std::Array, case::Int64)
  51.   name = ""
  52.   title = ""
  53.   D1 = copy(Std)
  54.   D2 = copy(Std)
  55.   for i in 1:length(Std)
  56.     D1[i] = E[i] + sqrt(2)*Std[i]
  57.     D2[i] = E[i] - sqrt(2)*Std[i]
  58.   end
  59.   if case == 1
  60.     title = "First task"
  61.     name = "1"
  62.   elseif case == 2
  63.     title = "Second task"
  64.     name = "2"
  65.   elseif case == 3
  66.     title = "Third task"
  67.     name = "3"
  68.   end
  69.   x = 1:N
  70.  
  71.   fig, ax = subplots()
  72.   suptitle(title)
  73.   ax[:plot](x, E, linewidth=2, alpha=0.6, label="Expected value")
  74.   ax[:plot](x, D1, linewidth=2, alpha=0.6, label="(+)Deviation", linestyle="--", color="red")
  75.   ax[:plot](x, D2, linewidth=2, alpha=0.6, label="(-)Deviation", linestyle="--", color="red")
  76.   ax[:legend]()
  77.   fileName = string("lab5_$name.png")
  78.   savefig(fileName)
  79. end
  80.  
  81. function getUrnIdx(urns::Array, D::Int64, N::Int64)
  82.   group = zeros(Int64, 0)
  83.   values = zeros(Int64, D)
  84.  
  85.   while length(group) != D
  86.     idx = rand(1:N)
  87.     if !in(idx, group)
  88.       push!(group, idx)
  89.     end
  90.   end
  91.  
  92.   for i in 1:length(group)
  93.     values[i] = urns[group[i]]
  94.   end
  95.  
  96.   minIdx = indmin(values)
  97.   min = values[minIdx]
  98.  
  99.   indices = zeros(Int64, 0)
  100.   push!(indices, group[minIdx])
  101.   splice!(values, minIdx)
  102.   splice!(group, minIdx)
  103.  
  104.   while length(values) > 0 && min == values[indmin(values)]
  105.     push!(indices, group[indmin(values)])
  106.     splice!(group, indmin(values))
  107.     splice!(values, indmin(values))
  108.   end
  109.  
  110.   urnIdx = indices[1]
  111.   if length(indices) > 1
  112.     urnIdx = indices[rand(1:length(indices))]
  113.   end
  114.  
  115.   return urnIdx
  116. end
  117.  
  118. println("START")
  119. D = 3
  120. N = 100
  121. numberOfSimulations = 1000
  122. simulate(N, D, numberOfSimulations)
  123. println("END")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement