首页 > 解决方案 > TypeError:linprog 的输入无效:A_ub 必须是数字二维数组,每行代表一个上限不等式约束

问题描述

我正在使用内点法进行线性优化。我的优化代码看起来像

z=scipy.optimize.linprog(c, A_ub, b_ub, bounds=bounds,method='interior-point',
                         options = {"maxiter":10000})

我有 34K 的数据。使用以下代码检查 A_ub 的形状

A_ub.shape
Out[7]: (37439, 74878)

最初为 8K 数据运行相同的代码,但现在它抛出错误

TypeError: Invalid input for linprog: A_ub must be a numerical 2D array with each row representing an upper bound inequality constraint

你能帮我解决这个问题吗?

标签: pythonoptimizationscipy

解决方案


我从旧代码中找到了这个例子

from scipy import optimize
    optimize.linprog(
...     c = [1, 3], 
...     A_ub=[[1, 1]], 
...     b_ub=[4],
...     bounds=(1, 6),
...     method='interior-point'
... )
     con: array([], dtype=float64)
     fun: 4.00000000831602
 message: 'Optimization terminated successfully.'
     nit: 4
   slack: array([2.])
  status: 0
 success: True
       x: array([1., 1.])

当然,您可以使用简单的或任何其他方法。可能你应该检查内存,你正在处理大型数组。


推荐阅读