人口空間分布の与え方と分布の生成

著者:畝見達夫 作成: 令和3年3月29日,編集: 9月23日

SimEpidemic 個体ベース感染シミュレータ で用いる, 抽象的な分布パターンの生成方法について説明する。

世界は正方形の領域と仮定する。世界内の位置は2次元の直交座標系で与える。 以下,分布パターンの生成方法と,パターンに従った個体位置の決定方法について述べる。

分布パターンの生成

位置 \((x,y)\) の密度 \(D(x,y)\) を,与えられた \(n\) 個の代表点 \((u_1, v_1, z_1), (u_2, v_2, z_2), \ldots (u_n,v_n,z_n)\) から, 以下の式で求める。

\[ D(x,y) = \begin{cases} z_i & \mbox{if}\;\exists i. d(x,y,u_i,v_i) \ll 1\\ \displaystyle \frac{\sum_{i=1}^n \displaystyle \frac{z_i}{d(x,y,u_i,v_i)^\gamma}} {\sum_{i=1}^n \displaystyle \frac{1}{d(x,y,u_i,v_i)^\gamma}\, +\, \displaystyle \frac{\alpha}{\min d_w(x,y)^\gamma}} & \mbox{otherwise} \end{cases} \] ここで,\(d(x,y,u,v)\) は \((x,y)\) と \((u,v)\) の間の距離であり,ここではユークリッド距離を用いる。 \(d(x,y,u_i,v_i) \ll 1\) なる \((u_i,v_i)\) が存在する場合は,\(D(x,y) = z_i\) とする。 \(\gamma\) は中間の緩やかさを決める \(1\geq\gamma\) の係数であり, 大きいほど代表点の周囲が平坦に,中間が急峻になる。 \(d_w(x,y)\) は世界の縁にある境界線から \((x,y)\) までの距離,\(\alpha\) は縁の影響の大きさを決める \(\alpha \geq 0\) の係数である。

代表点の \(z\) 座標は,以下の式を用いて中央ほど高くなる傾向を持たせられるようにする。

\[ z_i = (1 - d(x_i,y_i,c_x,c_y)^{\frac{10}{\beta}}) \cdot R\] ただし,\(R\) は一様乱数,\(\beta\) はこの傾向の強さを決める \(1\leq \beta \leq 10\) の係数である。

下に代表点の座標を一様乱数で与え生成したパターンの例を示す。白が \(D(x,y)=1\) 黒が \(0\) で,灰色はその中間である。

n = 512, α = 2, β = 5, γ = 2 n = 200, α = 2, β = 5, γ = 3

分布に従う位置の決定アルゴリズム

2次元座標 \((x,y)\) から密度を得る関数 \(z(x,y)\) が与えらるとき, この密度分布に従うよう矩形領域 \((x,y,w,h)\) 内に \(n\) 個体を配置するため, 以下の計算方法を採用する。 ここで,\(x,y\) は矩形の左下角の座標,\(w,h\) は矩形の幅と高さである。 アルゴリズムの主要部分はおよそ下記のような再帰手続きを用いる。

procedure placePoints(x, y, w, h, n)
if n = 0 then do nothing
else if n = 1 then place(x + rnd(w), y + rnd(h))
else if max(w, h) < θ then for i=1 to n { place(x + rnd(w), y + rnd(h)) }
else { z1 = Z(x, y, w/2, h/2); z2 = Z(x+w/2, y, w/2, h/2)
z3 = Z(x, y+h/2, w/2, h/2); z4 = Z(x+w/2, y+h/2, w/2, h/2)
z0 = z1 + z2 + z3 + z4
placePoints(x, y, w/2, h/2, n z1/z0)
placePoints(x+w/2, y, w/2, h/2, n z2/z0)
placePoints(x, y+h/2, w/2, h/2, n z3/z0)
placePoints(x+w/2, y+h/2, w/2, h/2, n z4/z0) }

ここで \(place(x,y)\) は,新たな座標 \((x,y)\) を出力する手続き, \(rnd(t)\) は,区間 \([0,t)\) の一様乱数を生成する関数, \(Z(x,y,w,h)\) は,矩形領域 \((x,y,w,h)\) の平均密度を算出する関数である。 すなわち,与えられた領域が十分大きくかつ入るべき点の数 \(n\) が 2以上のとき, 領域を縦横2等分した4つの領域に分割し,それぞれに入るべき点の数を平均密度に比例して割り振り, 再帰的に配置を繰り返す。

手続き placePoints の第4引数は点の個数であり整数である。 実際には,4つの再帰呼び出しの実引数は,密度の比例配分により整数にならない。 これらを整数化した後の合計が元の \(n\) とならない可能性があるので, 配分値と整数値の差が大きい方から補正するなど適切に補正する処理を加える。

このアルゴリムにより90,000個体を配置した場合の分布の例を下に示す。

n = 512, α = 2, β = 5, γ = 2 n = 200, α = 2, β = 5, γ = 3