NEMを支える評判システム EigenTrust++ その3

前回の続きです。

 

前回は、仮想通貨のオフ会に行った時に始めて出会った人が信用できる人かそうでないかをどうやって判断すればよいかというお話をしました。

 

僕たちは、知らない人が信用できるかどうかを判断する材料として、自分が信用を置いている人の情報を使って、間接的に判断しようとするといったことを書きました。

 

 

で、実はこのようなことがNEMネットワーク上でも行われている(と思っている)のです。

 

今回はそこらへんをより数学的に勉強していこうと思います。

 

数学的にみるローカル信頼値

まず、その2でローカルノード(自分自身のノードのこと)の信用度(ローカル信頼値)の求め方をざっくりと勉強しました。

 

新しくノードを建てたとします。(ノードiとします)

 

ノードiは最初から信頼済みのノード集合Pを知っています。

 

 

その信頼済みのノード達から、他のノードの場所を教えてもらいます。

 

 

こうして、ネットワーク内のn個のノードの存在を把握できます。

 

把握したら、そのn個のノードに対して、それぞれに信用度(初期の信頼ベクトル$\vec{ p }$)を与えてます。(全部に与えるって認識で良いのかな…)

 

初期の信頼ベクトル$\vec{ p }$は(ここでは、ノードjについて考えるとして)

 

$$\begin{eqnarray}p_{j} = \begin{cases} \frac{ 1 }{ | P | } & ( if \ node_{j} \  \in P ) \\ 0 & ( otherwise ) \end{cases}\end{eqnarray}$$

 

のようになります。もし、ノードjが集合Pに含まれる(つまり信用済みノードである)ならばノードjの信頼ベクトルは$\frac{ 1 }{ | P | }$に初期設定されます。$\frac{ 1 }{ | P | }$ってなんやねんって思ったのですが、おそらく信頼済ノード集合の数で1を割った値のことを指すのではないでしょうか(分からん)。

 

例)信頼済みノードが5個ならば、P=5で1/5になる(?)

 

んで、もしそれ以外(信頼済みノードではない)ならばノードjの信頼ベクトルは0に初期設定されます。

 

$p_{j}$はローカルノード(自分自身)がノードjに対してどれだけの信頼を持つかの初期値になります。

 

これで信頼値の初期値の求め方が分かりました。

 

信頼値の更新

 

次は、信頼値の更新についてです。

 

一定時間経過の後、ノードiが他のノードと交信していれば以下のようにしてローカル信頼値をアップデートできます。

 

$$\begin{eqnarray}s_{ij} = \begin{cases} \frac{ success(i,j) }{ success(i,j)+failed(i,j) } & ( if \ success(i,j)+failed(i,j) ) \\ p_{j} & ( otherwise ) \end{cases}\end{eqnarray}$$

 

$s_{ij}$が更新後のノードiがノードjに対してどれだけ信頼してるかの値になります。

 

で、これをノーマライズ(正規化)したローカル信頼ベクトル$\vec{ c }$は

 

$$c_{ij} = \frac{ s_{ij} }{ \sum_{ m } s_{im} }$$

 

になります。

 

 

そしてやっと、ローカル信頼値の合算に入っていきます…つらっ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です