【问题标题】:Integer Linear Least Squares整数线性最小二乘
【发布时间】:2017-08-27 01:59:46
【问题描述】:

所以我必须找到一个最小化norm(A.dot(x) - y, 2) 的 x,A 是矩阵,y 是向量。

这可以通过scipy.optimize.lsq_linearnumpy.linalg.lstsq 轻松完成,但我需要 x 为整数。一般来说,“整数规划”是 NP 完全的。 我确实找到了Routines for solving the standard integer least squares problem,但我想在从 matlab 转换它之前先问一下。

是否有成熟的库可以解决python中的整数线性最小二乘?

【问题讨论】:

标签: python numpy scipy


【解决方案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.]]

【讨论】:

    【解决方案2】:

    我确实提出了解决 sum(|Ax-y|) 的相关解决方案,您可以将其转换为线性整数规划问题并使用 PuLP 解决。

    基本思想是在约束条件下最小化目标函数sum(err(i)):

    Ax(i) - y(i) = -err(i)。

    与线性求解器兼容。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多