孤立頂点が消滅するしきい値に関する実験

直径>=3となる場合

par(family= "HiraKakuProN-W3")
library(igraph)
library(extrafont)
font_import() 
Importing fonts may take a few minutes, depending on the number of fonts and the speed of the system.
Continue? [y/n] 
n=100 #頂点数
N=400 #サンプル数
cs = seq(1, 2, 0.01) 

ratio=c()
for (c in cs){
  count=0
  for (i in 1:N){
    p=c*sqrt(log(n)/n)
    g=sample_gnp(n,p)
    if(diameter(g)>=3){
      count=count+1
    }
  }
  ratio=c(ratio,count/N)  
}
barplot(ratio,names.arg=cs)

plot(cs, ratio, type="l", col="blue", xlab="c (密度パラメータ)", ylab="直径 >= 3 の割合", main="相転移の調査")

異なる頂点数 (n) の影響を調べる

par(family= "HiraKakuProN-W3")
library(igraph)
library(extrafont)

N = 400  # サンプル数
cs = seq(1, 2, 0.01)  # 密度パラメータ
n_values = c(50, 100, 200)  # 異なる頂点数

# 実験
results = list()
for (n in n_values) {
  ratio = c()
  for (c in cs) {
    count = 0
    for (i in 1:N) {
      p = c * sqrt(log(n) / n)
      g = sample_gnp(n, p)
      if (diameter(g) >= 3) {
        count = count + 1
      }
    }
    ratio = c(ratio, count / N)
  }
  results[[as.character(n)]] = ratio
}

# プロット
plot(cs, results[[1]], type = "l", col = "red", lwd = 2, 
     xlab = "c (密度パラメータ)", ylab = "直径 >= 3 の割合", 
     main = "異なる頂点数での相転移")
for (i in 2:length(n_values)) {
  lines(cs, results[[i]], col = i + 1, lwd = 2)
}
legend("topright", legend = paste("n =", n_values), col = 2:(length(n_values) + 1), lwd = 2)

直径>=3となる場合について下記の2点を調査する

❶相転移現象があるか?

相転移現象とは、ある物理量がパラメータ(この場合は cに対応)を徐々に変化させたときに、突然変化することを指す。

ランダムグラフにおいては、c(またはp)が特定の閾値を超えたときに、直径が急激に減少する現象として現れる。

(c の刻み幅を小さくして変化をより精密に観察する)

❷n(頂点数)の変化によって閾値がどう変化するか?

❸閾値が√2より小さい場合、bad pairの個数の期待値はどうなるか?

授業の内容より、

頂点i,jがbad pairである確率:

\[ (1−p) \cdot (1−p^2)^{n−2} \]

bad pairの個数の期待値: \[ \binom{n}{2} \cdot (1-p) \cdot (1-p^2)^{n-2} \] \[閾値 p=c \cdot \sqrt(\frac{(\log n)}{n})の場合\]

\[1-p ≈ e^{-p}\]

期待値E(bad pairの個数):

\[ \left(\frac{n(n-1)}{2}\right)⋅e^{-p}⋅e^{(-p^2)⋅(n-2)} \] 閾値p = √2の時:

\[ \left(\frac {n(n-1)}{2} \right) \cdot {e}^{-√2} \cdot {e}^{(-2)\cdot(n-2)} \]

\[ E=\left(\frac {n(n-1)}{2} \right)⋅e^{(-2)\cdot(n-2)-√2} \]

・n = 100(頂点数)の時

\[ E=(\left(\frac{100\cdot99}{2}\right)\cdot e^{-196-√2} ≈ 9.09 × 10^{-83} \]

←期待値はほぼゼロ

・N = 400(サンプル数)

\[ (\frac{400 \cdot 399}{2})⋅e^{-796-√2} ≈ 0 \]

←期待値はゼロとみなせる

結果

・c が1.0から約1.3の範囲では、縦軸の値(直径が3以上の割合)が急激に減少

・閾値 c は 約1.2前後

←閾値が√2より小さい

←bad pairが非常に稀

・n=50(赤線),𝑛=100(緑線),n=200(青線)と n を増やすにつれて、閾値が右方向(より大きなc)にシフトする

<-頂点数n が増加すると、より高い密度が必要になり、直径が3以上の状態が崩れることを示している

・bad pair の個数は閾値が√2より小さいとき急激に減少する

・閾値が√2を超えるとbad pair がほとんど観測されなくなる