我正在寻找一个库或任何其他解决方案来解决这个问题。
我有一个矩阵,我需要用固定数量的1来填充,可能是随机的。此外,每行和每列都定义了一个不能超过的最大值(例如,A行中最多可以有5个,A列中最多可以有6个)。
在R中有一种简单,自动的方式吗?我需要一个更大矩阵的解决方案,例如50x50。
由于
答案 0 :(得分:0)
以下是lpSolveAPI
的示例:
fill_matrix <- function(nrow, ncol, n, maxcol, maxrow) {
lprec <- make.lp(ncol=nrow*ncol, nrow=nrow+ncol+1)
set.objfn(lprec, rep(0, nrow*ncol))
set.type(lprec, 1:(nrow*ncol), "binary")
for (i in 1:nrow) set.row(lprec, row=i, xt=rep(1,ncol), indices=seq(i, by=nrow, length.out=ncol))
set.constr.type(lprec, rep("<=", nrow), constraints = 1:nrow)
set.rhs(lprec, rep(maxrow, nrow), constraints=1:nrow)
for (i in 1:ncol) set.row(lprec, row=nrow+i, xt=rep(1,nrow), indices=((i-1)*nrow)+1:nrow)
set.constr.type(lprec, rep("<=", ncol), constraints=nrow+1:ncol)
set.rhs(lprec, rep(maxcol, ncol), constraints=nrow+1:ncol)
set.row(lprec, row=nrow+ncol+1, xt=rep(1,nrow*ncol))
set.constr.type(lprec, "=", nrow+ncol+1)
set.rhs(lprec, n, nrow+ncol+1)
status <- solve(lprec)
if(status!=0) stop("could not solve")
matrix(get.variables(lprec), ncol=ncol, nrow=nrow)
}
现在fill_matrix(6,5,10,2,2)
生成一个6x5矩阵,其中只有10个,每行/列最多2个。