我有大约 10000 个大约 100 个元素(浮点数)的向量和 1 个包含 100 个元素的目标向量。我的目标是通过使用这 10000 个向量的某种组合来接近这个目标向量。但是,我只能使用每个向量一次,元素可以是正数或负数。有人对此有任何想法,如果甚至可以优化?
一个小例子是:
v1 = [1.5, 3.0, -1.5]
v2 = [-0.5, -1.0, 3.0]
v3 = [1.0, 0.0, 0.0]
target = [0.5, 2.0, 1.0]
# the best combination here would be v1 and v2
PS.我使用的是Julia,但python、c()或一些算法的想法也非常受欢迎
阅读评论,似乎问题的解释是最小化距离(和(w[i]*v[i])-目标),对于w[i]在[0,1]
。
如果我们使用标准的欧几里得,这甚至不是MILP(混合整数线性规划)问题,而是一个混合整数二次规划问题。由于您没有定义距离,我将使用 norm1 作为距离的度量。
正如评论中提到的,你基本上有< code>2**10,100种可能性。但幸运的是,MILP可以使用边界来修剪搜索(例如,分支和边界),典型情况下的复杂性会小得多。
前段时间我在这里发布了一个没有约束< code>w[i] in [0,1]的问题解决方案。对于我们正在讨论的问题,这很容易修改。
def place_there_ilp(X, target):
# some linear algebra arrangements
target = np.array(target).reshape((1, -1))
ncols = target.shape[1]
X = np.array(X).reshape((-1, ncols))
N_vectors = X.shape[0]
# variable of the problem
w = cvxpy.Variable((1, X.shape[0]), integer=True)
# solve the problem with the objective of minimize the norm of w * X - T (@ is the matrix product)
P = cvxpy.Problem(cvxpy.Minimize(cvxpy.atoms.norm1((w @ X) / N_vectors - target)), [w >= 0, w <=1])
# here it is solved
return w.value
尝试使用您提供的问题实例
v1 = [1.5, 3.0, -1.5]
v2 = [-0.5, -1.0, 3.0]
v3 = [1.0, 0.0, 0.0]
target = [0.5, 2.0, 1.0]
place_there_ilp([v1, v2, v3], target)
给予
array([[1., 1., 0.]])
这意味着< code>1 * v1 1 * v2 0 * v3
您可能很难运行10000 x 100
问题,但我想说这是可能的。
使用下面的代码,我尝试了400 x 100
它运行在1.38秒内,800 x 100
运行在9.64秒内
X = np.random.randn(801, 100) # 800 x 100 problem
place_there_ilp(X[1:, :], X[0, :])
问题内容: 是否有numpy-thonic方法(例如函数)在数组中查找最接近的值? 例: 问题答案:
我有一个非常简单的二叉树 我实现了一个函数来查找树中离目标最近的数字(19): 结果显然应该是22,但我得到了8。令人惊讶的是,当我打印所有以下“最接近”的数字时,函数似乎工作正常:它打印:8、14、22。但为什么它不返回最新的clostest数字:22?
加载调试目标 在上面小节,我们提到为了能够让gdb识别变量的符号,我们必须给gdb载入符号表等信息。在进行gdb本地应用程序调试的时候,因为在指定了执行文件时就已经加载了文件中包含的调试信息,因此不用再使用gdb命令专门加载了。但是在使用qemu进行远程调试的时候,我们必须手动加载符号表,也就是在gdb中用file命令。 这样加载调试信息都是按照elf文件中制定的虚拟地址进行加载的,这在静态连接的
问题内容: 我试图用SQL结果填充组合框,我认为我的问题是处理数据表形式的数据。 当我运行程序时,我只是盯着一个悲伤的空组合框。 问题答案: 几乎正确,但是您需要使用DataReader加载数据表。 然后将数据表关联到组合的数据源 另外,您可以将combobox属性设置为将用作将来处理键的列的名称,并将属性设置为要显示为文本以供用户选择的列名称
问题内容: 如何为给定的目标值搜索和查找数组中最接近的值? 假设我有这个示例数组: 例如,当我用目标值0搜索时,该函数应返回0;否则,该函数将返回0。当我搜索3时,它将返回5;当我搜索14时,它将返回12。 问题答案: 将您要搜索的数字作为第一个参数,将数字数组作为第二个参数:
我遇到了以下leetcode问题,我对一些人用来解决它的方法有一个问题。问题是:给定一个非空二叉查找树和一个目标值,在BST中找到最接近目标的k个值。 注意:给定的目标值是浮点。 您可以假设k始终有效,即:k≤总节点。 保证BST中只有一组最接近目标的唯一k值。 所以,有些人所做的是,他们在保持k大小的最近元素队列的同时,按顺序遍历。在顺序遍历过程中,如果发现某个元素比队列中的第一个节点更接近目标