用R构造约束矩阵

雪花

我想构建以下矩阵,以在R中对ILP进行建模。变量的实际含义并不真正相关,而相关的是以下属性。

我想用n一个n x m列数为1的矩阵构造一个矩阵

对于第一行,我想要n一个(从位置0开始)。

对于第二行,我想先n有零,然后有n一个,其余的列为零。

对于第三行,我想先设置n x 2零,再设置n一个,其余的列设置为零。

这一直持续到我n x (m-1)在开始时为零,n在结束时为零

矩阵的一个小例子如下:

1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1

生成此矩阵的代码是:

f.con <- matrix(0, nrow = 3, ncol = 12)
for(i in 1:3){
  f.con[i,((i-1)*4+1):(4*i)] <- rep(1, 4)
}

我想知道是否可以使用更多的矢量化方法来构造此矩阵?

托马斯·艾斯科丁

一个简单的基础R解决方案是使用 kronecker

nr <- 3
nc <- 12
f.con <- kronecker(diag(nr),t(rep(1,nc/nr)))

这样

> f.con
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
[1,]    1    1    1    1    0    0    0    0    0     0     0     0
[2,]    0    0    0    0    1    1    1    1    0     0     0     0
[3,]    0    0    0    0    0    0    0    0    1     1     1     1
`` 

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章