我是R编程的新手。我有一个有向图,它有6个节点,并提供了6行和6列的概率矩阵。如果随机漫步者在图表上走100,000步,则最终会输出如下输出向量: 0.1854753,0.1301621,0.0556688,0.1134808,0.15344649,0.3617481 对应于此随机游走实验中访问的6个节点的概率(计数除以步骤总数,在本例中为100,000)。
我需要为此任务创建一个函数并演示如何使用它。该函数将图形和步骤数作为输入。
提供的矩阵如下:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^www\. [NC,OR]
RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} ^(?:www\.)?(.+)$ [NC]
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteCond %{REQUEST_URI} !^/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteCond %{REQUEST_URI} !^/\.well-known/pki-validation/[A-F0-9]{32}\.txt(?:\ Comodo\ DCV)?$
RewriteRule ^ https://%1%{REQUEST_URI} [R=302,L,NE]
RewriteRule ^index.php / [L,R=301]
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteCond %{REQUEST_URI} !^/[0-9]+\..+\.cpaneldcv$
RewriteRule ^(.*)$ $1.php
ErrorDocument 404 /404.php
有人可以帮我解决问题吗?
答案 0 :(得分:0)
假设您为有向图提供概率矩阵(prob_mat
)而没有为步骤(no_of_steps
)提供输入。这应该做:
set.seed(150)
find_pos_prob <- function(prob_mat, no_of_steps){
x <- c(1:nrow(prob_mat)) # index for nodes
position <- 1 # initiating from 1st Node
occured <- rep(0,nrow(prob_mat)) # initiating occured count
for (i in 1:no_of_steps) {
# update position at each step and increment occurence
position <- sample(x, 1, prob = prob_mat[position,])
occured[position] <- occured[position] + 1
}
return (occured/no_of_steps)
}
find_pos_prob(prob_mat, 100000)
#[1] 0.18506 0.13034 0.05570 0.11488 0.15510 0.35892
数据:强>
prob_mat <- matrix( c(0.0, 0.5, 0.3, 0.0, 0.0, 0.2,
0.1, 0.2, 0.0, 0.4, 0.1, 0.2,
0.5, 0.0, 0.0, 0.0, 0.0, 0.5,
0.0, 0.1, 0.0, 0.0, 0.6, 0.3,
0.0, 0.0, 0.0, 0.4, 0.0, 0.6,
0.4, 0.0, 0.0, 0.0, 0.2, 0.4), byrow = TRUE, ncol = 6)
注意:模拟结果与分析解决方案不同。理想情况下,您应该移除种子,运行15-20次函数并获取运行中概率的平均值
答案 1 :(得分:0)
以下是使用马尔可夫链(通过R库markovchain
)的逐步实现。
我们首先加载库。
library(markovchain);
我们定义了转换矩阵和状态(这里只是图表节点的1 ... 6)
mat <- matrix(c(
0.0, 0.5, 0.3, 0.0, 0.0, 0.2,
0.1, 0.2, 0.0, 0.4, 0.1, 0.2,
0.5, 0.0, 0.0, 0.0, 0.0, 0.5,
0.0, 0.1, 0.0, 0.0, 0.6, 0.3,
0.0, 0.0, 0.0, 0.4, 0.0, 0.6,
0.4, 0.0, 0.0, 0.0, 0.2, 0.4), ncol = 6, byrow = T)
states <- as.character(1:6);
我们定义马尔可夫链对象。
mc <- new(
"markovchain",
states = states,
byrow = TRUE,
transitionMatrix = mat,
name = "random_walk");
我们现在模拟由nSteps
(此处为1e6
)组成的随机游走,并使用prop.table(table(...))
nSteps <- 1e6;
random_walk <- markovchainSequence(nSteps, mc, t0 = "1");
prop.table(table(random_walk));
#random_walk
# 1 2 3 4 5 6
#0.185452 0.129310 0.055692 0.113410 0.153787 0.362349
请注意,如果重新运行代码,渐近概率可能会略有变化。
将它包装在一个单一的功能中是直截了当的,我会把它留给你。