我正在使用 R 中的方阵,我们可以称它为mat,并且想要排列列(即改变它们的顺序)以最大化对角线元素的总和。我想通过线性规划方法来做到这一点,即依靠优化包 lpSolve。代码解决方案当然值得赞赏,但如果失败,任何将其表述为线性规划问题的帮助将不胜感激。
我的问题类似于这个问题:置换方形 2 向列联表(矩阵)的列以最大化其对角线. 但是,在那个问题以及我在 SO 上发现的其他问题中,按行最大化该行中的对角线元素就足够了。问题是像
mat2 <- mat[,max.col(mat, 'first')]
不会对我有用:你可能会遇到这样的情况:一行有多个相等的最大值,或者(比如)在第 X 行中,你在对角线上选择 11 而不是 10,但因此在第 X+1 行你被迫有5 在对角线上而不是 30,因为 30 与 10 属于同一列。
我知道有一种称为匈牙利算法的算法可以执行此操作,但是除了 lpSolve 之外,我无法使用任何包来应对此挑战。
我正在尝试在 R 中创建以下类型的矩阵:行数等于 n(提供);在第 i 行中,对于所有 i=1:n,在位置 n(i-1)+1 到 n(i-1)+n(含)处的1元素是 ,所有其他元素都是0。例如,如果 n=3,矩阵看起来像
1 1 1 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0
0 0 0 0 0 0 1 1 1
Run Code Online (Sandbox Code Playgroud)
或者对于 n=4:
1 1 1 1 0 0 0 0 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 …Run Code Online (Sandbox Code Playgroud)