我遇到了以下需要在我正在处理的项目中解决的问题:
给定一定数量的向量v_i(在数学意义上)和目标向量H,计算最接近匹配目标向量H的向量v_i的线性组合,其中约束系数必须在[0 ,1]。
我不太了解应该使用什么样的算法/数学来解决这样的问题。任何正确方向的刺激都会非常感激!
答案 0 :(得分:2)
这是一个受约束的最小二乘问题。基本上你想解决优化问题:
argmin ||Ax-H||
x
s.t. 0<=x_j<=1
其中x=(x_1, ..., x_j, ..., x_n)
包含您要搜索的系数,A
列对应于矢量v_i。
答案 1 :(得分:1)
假设您想要以最小二乘意义求解,那么您就会遇到二次规划问题。例如,假设您的矢量集是
x1 = 1 2 3]' x2 = [3 2 1]'
你的目标载体是
H = [1 -1 1]'
然后你可以创建其列为矢量的矩阵:
A = [1 3;
2 2;
3 1]
你想要最小化的是
norm(A*x - H) = (A*x - H)' * (A*x - H) = x' * (A'*A) * x - (2*H'*A) * x + const
如果你定义
B = A' * A
C = -2 * H' * A
那么你有一个问题可以通过我的Matlab quadprog
函数
quadprog(B,C,[],[],[],[],0,1)
ans =
0.16667
0.16667
所以这种情况下的最佳解决方案是
1/6 * x1 + 1/6 * x2 = [2/3, 2/3, 2/3]
答案 2 :(得分:0)
这是一个组合优化问题。这种问题是NP难的。但我想对于二进制算法,应该有多项式算法可以解决,或者可能有一些放松来获得近似解。一些关于“整数编程”的谷歌搜索可能有所帮助。