2016-08-12 120 views
0

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

到目前为止,通过使用mipfp包中的Ipfp函数,我可以生成一个随行矩阵,它具有行和列的总和约束,但仍然无法使对角线等于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) 

有没有人有任何想法?

+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将对对角线零和行和列的总和约束将匹配。