好奇心の横断歩道を創る!

自分の思考をラバーダック・デバッグするためのブログ

エージェントの座標が指数関数っぽい分布を示す、エージェントの移動規則の一例について、メモ

エージェントの位置座標をxとおく。x≧0の条件を付ける。エージェントの移動規則を、

 x_{(t+1)} = max(0, x(t) + 2r - 1 - d)

(r:0から1までの一様乱数からのサンプル

dは分布の幅を左右するパラメータで、0<d<1。分布の幅のおおよその半値幅(1/2ではなく1/e)をHにしたいとき、d≒H ln {H sinh(1/H) } の近似が使える。)

*1

 

こうすれば、エージェントの位置座標がx≥0において指数関数的に減衰する分布を示す。この分布の確率密度関数は、dの値に d=H \ln\{H sinh(1/H)\}を使うことで、 f(x) = \frac{1}{H} \exp(-\frac{x}{H}) に近づけることができる。エージェント数10^4、エージェント初期位置x=1、①と②を10^4回繰り返してみたところ、分布を示すヒストグラムがこんな感じになった。

青いヒストグラムがシミュレーションの結果、
オレンジの線が目標にした確率密度関数の定数倍

対数スケールでほぼ直線的に減衰している様子から見て、指数関数っぽい分布になることは確かめられると思う。シミュレーションに用いたdは、 d=H \ln\{H sinh(1/H)\}にH=10を代入した時の値を用いた。xが10増えたときに1/eになる確率密度関数の定数倍が、オレンジの線。おおむね一致していることが確認できる。言い換えれば、うえで書いた移動規則を満たすとき、位置の確率密度が、狙った確率密度関数におおむね従うことがわかる。ただ、x=0のエージェントがやたらと多い。

 

 

 

証明、にはならないけれど、なぜこんなことを思いついたのかの説明を下に残しておく。いろんな意味でテキトーな説明しかできなかった。数学得意な人がひたすら羨ましい。

 

 

まず、エージェントの位置を表す確率変数Xと、エージェントの移動にかかわる確率変数Nを導入する。

Xの初期値X(t=0)の確率密度関数は、x≧0においてf_{(x)} = λ{0} \exp(-λ_0 x)  、x<0において f_{(x)} = 0 とする。エージェントの初期値が全員x=0にしたければ、λ_0=∞と思えば良い。

Nの確率密度関数g(x)は、-1-d ≦ x < 1-d においてg(x) = 1/2、それ以外の領域においてg(x)=0とする。

まず、XとNの和Yを考える。Xの確率密度関数は、x≧0においてλ exp(-λx)  、x<0においてf(x) = 0 で近似できる状態を維持すると仮定する。①と対応する部分。Yの計算は確率変数同士の和をとるときに、確率密度関数同士の畳み込み積分を行う。(以下の記事などを参照)

rokabonatttsu.hatenablog.com

X(t)の確率密度関数がx≧0において λ \exp(-λ_0 x)  、x<0においてf(x) = 0 出かかれる場合のYを計算していく。

XとNがxの範囲によって異なる式で書かれる確率密度関数を持つので、Yの計算については積分範囲に気を遣う面倒さが伴うが、まぁ、そこは気合だけが頼り。ここには結果だけを記載しておく。

Yの確率密度関数は、私の計算が間違っていなければ、

0                                                  (x<-1-d)

(1 - exp{-λ(x-1-d)})/2                   (-1-d≦x<1-d)

(exp(-dλ) * sinh(λ) * exp(-λx)       (1-d≦x)

となる。

続いて、Yのx<0の部分の積分値をAとおき、x<0の部分をx=0に圧縮する。②に対応する部分。圧縮後の確率密度関数で書かれる確率変数をX(t+1)とする。X(t+1)の確率密度関数は、ディラックデルタ関数δ(x)を使って、

0                                              (x<0)

Aδ(0)                                       (x=0)

(1-exp{-λ(x-1-d)})/2                 (0<x<1-d)

exp{-dλ} * sinh(λ) * exp(-λx)    (1-d≦x)

と書ける。X(t+1)が有限の値を持つ領域(x>0)のなかでも、そのほとんどの領域の確率密度が、exp{-dλ} * sinh(λ) * exp(-λx) で書かれている。X(t)の確率密度がx>0においてλ exp(-λx)で書かれていたので、exp{-dλ} * sinh(λ) ≒ λ であれば、t→t+1のときに確率変数Xの確率密度関数が同じような形になる。exp{-dλ} * sinh(λ) = λをdについて解くと、d=-(1/λ) * ln{λ/sinh(λ)}  である。

 

①と②を繰り返したとき(t→∞)、Xの確率密度関数f(x)がx≧0においてf(x) = (1/H) exp(-x/H) になればうれしい。Xの確率密度関数f(x)がx≧0においてf(x) = λ exp(-λx) に近い形を維持しつつ、λ→1/H で安定すればうれしい。安定することを証明・説明することは私にはできないが、必要条件の一つにdの値を適切な値に設定することがあげられる。λ→1/H で安定するためには、dがd=-(1/λ) * ln{λ/sinh(λ)} にλ=1/Hを代入した値、つまりd=H * ln{H sinh(1/H)} に近い値をとる必要がある。

*1:①位置xから位置x+2r-1-dに移動

(r:0から1までの一様乱数からのサンプル

dは分布の幅を左右するパラメータで、0<d<1。分布の幅のおおよその半値幅(1/2ではなく1/e)をHにしたいとき、d≒H ln {H sinh(1/H) } の近似が使える。)

②x+2r-1-d < 0であれば、0に再移動。

③ ①②を繰り返す。