RAS算法生成随机矩阵

时间:2016-08-12 14:45:26

标签: r

尝试生成一个随机矩阵,其中包含行和列之和的约束,以及对角线上的零。

到目前为止,通过在Ipfp包中使用mipfp函数,我可以生成一个随机矩阵,对行和列的总和进行约束,但仍然不能使对角线等于0完成。

InitialM <- array(1,dim=c(5,5))
SumOfRows <- c(40, 60, 20, 10, 10)
SumOfCols <- c(30, 30, 60, 10, 10)
TargetData<- list(SumOfRows, SumOfCols)
Target.list <- list(1,2)
RandomMatrix <- Ipfp(InitialM, Target.list, TargetData, 
   iter=100, tol=1e-10)

有没有人有任何想法?

1 个答案:

答案 0 :(得分:2)

为了达到你想要的目的,你只需要将初始矩阵InitialM的对角线设置为0:

InitialM <- array(1,dim=c(5,5))
for(i in 1:5) {
  InitialM[i,i] <- 0
}

SumOfRows <- c(40, 60, 20, 10, 10)
SumOfCols <- c(30, 30, 60, 10, 10)
TargetData<- list(SumOfRows, SumOfCols)
Target.list <- list(1,2)
RandomMatrix <- Ipfp(InitialM, Target.list, TargetData, 
                     iter=100, tol=1e-10)

因此,最终的RandomMatrix将在对角线上具有零,并且对行和列的总和的约束将匹配。