Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2022
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 1.87 KB | None | 0 0
  1. using Distributions
  2. using DataFrames
  3. using Statistics
  4.  
  5. struct State
  6.     a::Int
  7.     b::Int
  8. end
  9.  
  10. generate_state()::State = begin
  11.     smaller = rand(DiscreteUniform(1, 50000), 1)[1]
  12.     if rand(Bernoulli(0.5), 1)[1]
  13.         return State(smaller, 2 * smaller)
  14.     else
  15.         return State(2 * smaller, smaller)
  16.     end
  17. end
  18.  
  19. is_definitely_smaller(pick::Int)::Bool = begin
  20.     return pick == 1 || pick % 2 != 0
  21. end
  22.  
  23. is_definitely_larger(pick::Int)::Bool = begin
  24.     return pick > 50000
  25. end
  26.  
  27. strategy_switch(state::State)::Int = begin
  28.     local first_pick::Int
  29.     local second_pick::Int
  30.     if rand(Bernoulli(0.5), 1)[1]
  31.         first_pick = state.a
  32.         second_pick = state.b
  33.     else
  34.         first_pick = state.b
  35.         second_pick = state.a
  36.     end
  37.     if is_definitely_larger(first_pick)
  38.         return first_pick
  39.     else
  40.         return second_pick
  41.     end
  42. end
  43.  
  44. strategy_noswitch(state::State)::Int = begin
  45.     local first_pick::Int
  46.     local second_pick::Int
  47.     if rand(Bernoulli(0.5), 1)[1]
  48.         first_pick = state.a
  49.         second_pick = state.b
  50.     else
  51.         first_pick = state.b
  52.         second_pick = state.a
  53.     end
  54.     if is_definitely_smaller(first_pick)
  55.         return second_pick
  56.     else
  57.         return first_pick
  58.     end
  59. end
  60.  
  61. do_simulation(n_iterations::Int)::DataFrame = begin
  62.     switch = Vector{Float64}(undef, n_iterations)
  63.     no_switch = Vector{Float64}(undef, n_iterations)
  64.     for i = 1:n_iterations
  65.         state = generate_state()
  66.         switch[i] = convert(Float64, strategy_switch(state)) / 100.0
  67.         no_switch[i] = convert(Float64, strategy_noswitch(state)) / 100.0
  68.     end
  69.     DataFrame(switch=switch, no_switch=no_switch)
  70. end
  71.  
  72. n_iterations = 1000000
  73. df = do_simulation(n_iterations)
  74. mean.(eachcol(df))
  75. std(df[:, "switch"]) / sqrt(n_iterations - 1), std(df[:, "no_switch"]) / sqrt(n_iterations - 1)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement