所以我必须找到一个x最小化norm(A.dot(x) - y, 2)
A是一个矩阵,y是一个向量。
这可以通过scipy.optimize.lsq_linear
或numpy.linalg.lstsq
轻松完成,但我需要x才能成为整数。通常"整数编程"是NP完全的。
我确实找到了Routines for solving the standard integer least squares problem,但在我从matlab转换之前我想过要问。
是否有一个已建立的库可以解决python中的整数线性最小二乘?
答案 0 :(得分:1)
您可以使用python可用的优化库之一,而不是处理(混合)整数编程。做谷歌搜索,你会发现很多。由于你的问题是凸的,cvxpy
可以作为很多接口的一个很好的接口。这是一个使用内置整数编程求解器的玩具示例(对于大规模问题可能不是非常有效)
import numpy as np
import cvxpy
np.random.seed(123) # for reproducability
# generate A and y
m, n = 10, 10
A = np.random.randn(m,n)
y = np.random.randn(m)
# declare the integer-valued optimization variable
x = cvxpy.Int(n)
# set up the L2-norm minimization problem
obj = cvxpy.Minimize(cvxpy.norm(A * x - y, 2))
prob = cvxpy.Problem(obj)
# solve the problem using an appropriate solver
sol = prob.solve(solver = 'ECOS_BB')
# the optimal value of x is
print(x.value)
[[-13.] [ -3.] [ 3.] [ 6.] [ 1.] [ -5.] [ -1.] [ -3.] [ -2.] [ -6.]]
答案 1 :(得分:0)
我确实提出了一个解决和(| Ax-y |)的相关解决方案,您可以将其转换为线性整数规划问题并使用PuLP求解。
基本思想是最小化受约束条件限制的目标函数和(err(i)):
Ax(i)-y(i)< = err(i)和Ax(i)-y(i)> = -err(i)。
与线性求解器兼容。