Algorithm 已求解-从受最大化约束的矩阵中查找列最大元素

Algorithm 已求解-从受最大化约束的矩阵中查找列最大元素,algorithm,matlab,matrix,constraints,Algorithm,Matlab,Matrix,Constraints,我有一个nxn平方矩阵a由随机正数组成。我有一个函数需要最大化(为了简单起见,考虑它是所有输入),它的输入是矩阵的每一列中的一个元素。约束条件是这些输入的位置应该不同。例如,N=5 A = 0.43207 0.53996 0.68063 0.70952 0.6297 0.9656 0.72609 0.88174 0.50072 0.41381 0.47571 0.99

我有一个nxn平方矩阵
a
由随机正数组成。我有一个函数需要最大化(为了简单起见,考虑它是所有输入),它的输入是矩阵的每一列中的一个元素。约束条件是这些输入的位置应该不同。例如,N=5

A =
      0.43207      0.53996      0.68063      0.70952       0.6297
       0.9656      0.72609      0.88174      0.50072      0.41381
      0.47571      0.99827     0.061184      0.93099      0.88015
      0.98318      0.42879      0.56813       0.3835    0.0039668
      0.30498      0.30033      0.76003      0.80426      0.84147
best =
     4     3     2     1     5
bestA =
      0.98318      0.99827      0.88174      0.70952      0.84147
现在我正在检查所有可能的组合。但随着矩阵大小的增加,例如N=10,搜索空间变为10!这对我的要求来说太贵了。我试图对矩阵进行排序并寻找模式,但我被困在排序后出现重复的情况中

>> [Asorted,I] = sort(A,1,'descend')
Asorted =
      0.98318      0.99827      0.88174      0.93099      0.88015
       0.9656      0.72609      0.76003      0.80426      0.84147
      0.47571      0.53996      0.68063      0.70952       0.6297
      0.43207      0.42879      0.56813      0.50072      0.41381
      0.30498      0.30033     0.061184       0.3835    0.0039668
I =
     4     3     2     3     3
     2     2     5     5     5
     3     1     1     1     1
     1     4     4     2     2
     5     5     3     4     4
有什么算法或直觉我可以遵循吗

我用的是MATLAB,但你可以用任何流行的编程语言来解释

编辑:矩阵已给定,随机生成。主要目标是最大化我上面提到的给定函数的输出,并找出输出最大的那些输入

编辑2:上述示例的示例MATLAB代码

N=5;
A=兰特(N,N)
梳子=烫发(1:N);
Sbest=-1;
i=1时:尺寸(梳,1)
x=梳子(i,:);
S=0;
对于i=1:N
S=S+A(x(i),i);
结束
如果S>Sbest
Sbest=S;最佳=x;
结束
结束
最好的
[Asorted,I]=排序(A,1,'down')

解决方案:正如@•㪞עדברקן在评论中指出的,这可以使用匈牙利算法解决。一些资源是,

关于算法,我怀疑可能有必要通过所有组合来找到最好的,即暴力。我不确定是否有任何图论算法直接适用于这个问题,但也许一些修改后的算法可以工作

从加速的角度来看,也许您可以通过将内部
for
循环替换为
sum
来加速,即

for i=1:size(combs,1)
    x = combs(i,:);
    S = sum(A(((1:N)-1)*N + x));
    if S > Sbest
      Sbest=S; 
      best = x;
    end
end

我不完全理解这个问题——你是在试图写一个函数来创建这样的随机矩阵吗?或者你得到了这样的随机矩阵,你想从中计算一些东西?@FangQ我已经在问题中添加了信息,你所说的“需要最大化的函数”是什么意思?最大化什么?你能定义你的目标函数吗?我假设您提供的函数用于生成矩阵。你是否在构造一个随机矩阵,以某种方式使一个度量最大化?在计算输入和的情况下,问题是gragh算法。这不是分配问题的一个例子,我们可以使用?我也认为没有必要遍历所有的梳。如果可能的话,我要的是一个算法。如果代码只停留在MATLAB中,那么您建议的加速效果很好,但在其他平台上则毫无用处。@titusarmah99我不确定
CVX
是否有助于解决此类优化问题。如果你知道的话,也许你可以试试看。我来看看。虽然我已经申请了一些。但它们都是次优算法。我想要一些能给出最好结果的具体算法result@titusarmah99也许你可以试试
匹配对
,这是MATLAB的一个内置函数,可以解决线性赋值问题。我用的是R2018a,所以我没有,不过还是谢谢你。有很多实现