Optimization 在一组大小中搜索最高行列式(n选择k)

Optimization 在一组大小中搜索最高行列式(n选择k),optimization,mathematical-optimization,determinants,Optimization,Mathematical Optimization,Determinants,我有n行向量,我可以选择k向量来形成k*k矩阵。然后取每个矩阵行列式的绝对值。因此,我有(n选择k)可能的绝对值行列式 我希望选择产生最高行列式的行向量。是否可以优化搜索以快速执行此操作 我目前正在使用n~=10000和k=31,但我将使用各种设置 我用python和c++编写代码这是我在这篇文章中看到的最难的优化问题之一。您确定在您的应用程序中没有其他方法吗?这只是一种感觉,但我很确定,这个问题是np完全的,甚至更糟(负近似结果)。更糟糕的是:将k*k矩阵约束为半定矩阵并用凸优化问题逼近它也不

我有
n
行向量,我可以选择
k
向量来形成
k*k
矩阵。然后取每个矩阵行列式的绝对值。因此,我有
(n选择k)
可能的绝对值行列式

我希望选择产生最高行列式的行向量。是否可以优化搜索以快速执行此操作

我目前正在使用
n~=10000
k=31
,但我将使用各种设置


我用python和c++编写代码

这是我在这篇文章中看到的最难的优化问题之一。您确定在您的应用程序中没有其他方法吗?这只是一种感觉,但我很确定,这个问题是np完全的,甚至更糟(负近似结果)。更糟糕的是:将
k*k
矩阵约束为半定矩阵并用凸优化问题逼近它也不起作用,因为没有太多可用的软件(您需要组合SDP+整数)。我所知道的唯一一个能够做到这一点的软件是.SDP本身(没有整数)也很难求解(即使它在多项式时间内是可行的;如果它没有因为数值问题而崩溃,它将需要很多时间)。添加整数会带来麻烦。是的,我必须搜索可能矩阵的空间以找到最高行列式。我假设,通过研究向量之间的关系,没有找到最高行列式的好方法,因为它们彼此之间有复杂的数学关系,很难描述。我相信这可能比我所问的问题更复杂。解决方案必须在n个向量的凸包角之间,因为行列式是由矩阵行或列向量跨越的单纯形的有符号体积,对于凸包内有顶点的任何单纯形,必须有一个更大的单纯形,所有的单纯形包含第一个单纯形的凸包上的顶点。这可能是因为向量的凸包“大部分时间”具有明显较少的角点。这是我在上面看到的最难的优化问题之一。您确定在您的应用程序中没有其他方法吗?这只是一种感觉,但我很确定,这个问题是np完全的,甚至更糟(负近似结果)。更糟糕的是:将
k*k
矩阵约束为半定矩阵并用凸优化问题逼近它也不起作用,因为没有太多可用的软件(您需要组合SDP+整数)。我所知道的唯一一个能够做到这一点的软件是.SDP本身(没有整数)也很难求解(即使它在多项式时间内是可行的;如果它没有因为数值问题而崩溃,它将需要很多时间)。添加整数会带来麻烦。是的,我必须搜索可能矩阵的空间以找到最高行列式。我假设,通过研究向量之间的关系,没有找到最高行列式的好方法,因为它们彼此之间有复杂的数学关系,很难描述。我相信这可能比我所问的问题更复杂。解决方案必须在n个向量的凸包角之间,因为行列式是由矩阵行或列向量跨越的单纯形的有符号体积,对于凸包内有顶点的任何单纯形,必须有一个更大的单纯形,所有的单纯形包含第一个单纯形的凸包上的顶点。这可能是因为向量的凸包“大部分时间”具有明显较少的角点。