【问题标题】:Programming absolute deviation as linear program将绝对偏差编程为线性程序
【发布时间】:2020-04-11 00:28:40
【问题描述】:

我正在尝试将绝对偏差的总和转换为线性规划问题,以便我可以利用 CPLEX(或其他求解器)。我被困在如何设置矩阵上。问题如下:

minimize abs(x1 - 5) + abs(x2 - 3)
s.t. x1 + x2 = 10

我设置了以下约束来将问题转换为线性形式:

  x1 - 5  <= t1
-(x1 - 5) <= t1 and 

  x2 - 3  <= t2
-(x2 - 3) <= t2

我已将目标函数设置为

c = [0,0,1,1]

但我不知道如何设置

Ax <= b

矩阵形式。到目前为止我所拥有的是:

A = [[ 1, -1, 0, 0],
     [-1, -1, 0, 0],
     [ 0,  0, 1,-1],
     [ 0,  0,-1,-1]]
b =  [ 5, -5, 3,-3] 

我在矩阵中设置了另一个约束为:

B =  [1, 1, 0, 0]
b2 = [10] 

当我运行以下命令时:

linprog(c,A_ub=A,b_ub=b,A_eq=B,b_eq=b2,bounds=[(0,None),(0,None)])

我收到以下错误消息:

ValueError: Invalid input for linprog: A_eq must have exactly two dimensions, and the number of columns in A_eq must be equal to the size of c

我知道有一个解决方案,因为当我使用 scipy.optimize.minimize 时,它​​会解决 [6,4]。我确定问题是我没有正确地制定输入矩阵,但我不确定如何设置它们以使其运行。

编辑 - 这是不运行的代码:

import numpy as np
from scipy.optimize import linprog, minimize

c = np.block([np.zeros(2),np.ones(2)])
print("c =>",c)

A = [[ 1, -1, 0, 0],
     [-1, -1, 0, 0],
     [ 0,  0, 1,-1],
     [ 0,  0,-1,-1]]

b =  [[ 5, -5, 3,-3]]
print(A)
print(np.multiply(A,b))

B = [ 1, 1, 0, 0]
b2 = [10]
print(np.multiply(B,b2))

linprog(c,A_ub=A,b_ub=b,A_eq=B,b_eq=b2,bounds=[(0,None),(0,None)],
        options={'disp':True})

【问题讨论】:

  • 您要导入哪些模块?相应地设置标签。对问题设置更加明确(真实代码,而不仅仅是看起来像 Python 列表的对象)。对该错误的完整追溯。
  • hpaulj - 完成。见上文。

标签: python optimization linear-programming scipy-optimize


【解决方案1】:

我认为这个消息非常好。 B 应该是二维矩阵而不是一维向量。所以:

B =  [[1, 1, 0, 0]]

其次,bounds 数组太短。 第三,您的变量顺序不一致。 A 中的列是 x1,t1,x2,t2,而 B(和 c)中的列似乎是 x1,x2,t1,t2。他们需要遵循相同的方案。

【讨论】:

  • 感谢 Erwin - 在采纳您的建议后,该计划成功了。一道题——A排列[[x1, -t1, 0, 0],[-x1, -t1, 0, 0],[0, 0, x2, -t2],[0, 0, -x2, - t2]]。这不正确吗?
  • 没有。 A中只有常量。A、B、c中各列的顺序应该一致。
  • 我想我不明白你所说的 A 中列的顺序是什么意思。如果我希望 A 中的列是 (x1, x2, t1, t2) 矩阵应该是 [[1, 0, -1, 0],[-1, 0, -1, 0],[0, 1, 0, -1],[0, -1, 0, -1]] 而 b 应该是[5, -5, 3, -3] 正确吗?
猜你喜欢
  • 2019-09-14
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多