Python linprog最大化目标函数



这已经有一段时间了,因为我已经这样做了,所以我有点生疏,但方程是:

max t(C)*x
s.t. Ax <=b

我有我的A约束矩阵它是(1448x1359)

[[ 1.  1.  0. ...,  0.  0.  0.]
 ..., 

 [ 0.  0.  0. ...,  1.  1.  1.]]
然后我有我的绑定b (1448x1):
[ 1.  1.  7. ...,  2.  1.  2.]

我的目标函数要最大化,它是一个1(1359,1)的向量。

现在在其他包中,我的最大目标函数是841,但是使用linprog:

res = linprog(c=OBJ_N, A_ub=A, b_ub=b, options={"disp": True})

它成功地优化到-0.0,所以我想知道我是否在python中使用正确的命令,并以正确的方式约束我?

编辑:好的,这是有道理的,它试图最小化。我现在已经重写了(交换c和b,并转置A以最小化)。

# (max t(C)*x s.t. Ax <=b) = min t(b)*x s.t. ATy = c, y ≥ 0
# (i): minimise number of shops no bounds
ID = np.ones(len(w[0]))
print(ID)
print(ID.shape)  #1359
At = A.transpose()
need_divest = (A.dot(ID)) - 1
print(need_divest)
print(need_divest.shape)  #1448
res = linprog(c=need_divest, A_eq=At, b_eq=ID, options={"disp": True})
print(res)

然而,我得到"消息:'优化失败。无法找到可行的起点。'"

我猜你可能是minimizing而不是maximizing你的目标函数。试试这个(在你的目标函数系数前插入一个-):

res = linprog(c=-OBJ_N, A_ub=A, b_ub=b, options={"disp": True})

你的结果应该是-841。

这样做的原因很简单:

min(f(x))=-max(-f(x))

最新更新