R 中带约束的线性规划练习

Linear programming exercise with constraints in R

我正在寻找图书馆或任何其他解决方案来解决如下问题。

我有一个矩阵需要用固定数量的 1 随机填充。此外,每一行和每一列都定义了一个不能超过的最大值(例如,A 行最多可以有五个 1,A 列最多可以有六个 1)。

在 R 中有一种简单、自动的方法吗?我需要一个更大矩阵的解决方案,例如 50x50。

example

谢谢

这里有一个 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 个,每个 row/column 最多有 2 个。