taki["blog"] = 2024

社会人9年目(東京6年目)の日常

2018/2/25 眠

主に寝ている日曜日。艦これのイベントを進めている。ドロップもしないし、丙でも手抜きだと勝てず、どうしたものかなという気持ち(資源も減ってきた)。

f:id:takilog:20180225154857j:plain

怪我の調子はだいぶ良くなってきているけど、筋肉系の負傷っぽいので、イマイチ完治には時間がかかるタイプな気もする。早めに治ってくれると、歩いたり階段昇り降りしたりするときに気を使わなくていいので、治ってほしいな。

昨日読んでいた本に書いてあった「浸透」の例を確認するためにJuliaでプログラムを書いた。実際に試してみると、だいたい確率pが0.5と0.6の間に相転移があることが分かる。

浸透(格子世界)

  • N×Nの格子を考える(理想的にはN→∞)
  • 各格子の点(i, j)について、確率pで独立に1/0を決定する
  • ある点v0を含む連結成分の大きさを計算し、確率pとの関係をプロットする
  • 実装ではv0を(N/2, N/2)の位置に設定した
function generate(p, N)
    ber = Bernoulli(p)
    grid = zeros(Int64, N, N)
    for i in 1:N, j in 1:N
        grid[i, j] = Int(rand(ber))
    end
    if p > 0
        grid[Int(N/2), Int(N/2)] = 1
    end
    return grid
end
  • 連結成分の計算は、とりあえず普通にキューを使って実装した
function gen_connected(grid)
    N = size(grid)[1]
    q = Deque{Tuple{Int, Int}}()
    con = Set{Tuple{Int, Int}}()
    v0 = (Int(N/2), Int(N/2))
    push!(q, v0)

    while length(q) > 0
        v = pop!(q)
        push!(con, v)
        lv = extend(v)
        for vv in lv
            ii, jj = vv
            if 1 <= ii <= N && 1 <= jj <= N
                if grid[ii, jj] == 1 && !in((ii, jj), con)
                    push!(q, vv)
                end
            end
        end
    end
    return con
end
  • 格子サイズ10×10の場合

f:id:takilog:20180225155330p:plain

  • 格子サイズ50×50の場合

f:id:takilog:20180225155347p:plain

  • 格子サイズ100×100の場合

f:id:takilog:20180225155403p:plain