【问题标题】:solving multiple equations with many variables and inequality constraints求解具有许多变量和不等式约束的多个方程
【发布时间】:2017-02-10 23:44:41
【问题描述】:

我正在尝试使用 scipy 和线性规划解决具有许多变量的问题。我有一组变量 X,它们是 0.5 到 3 之间的实数,我必须求解以下方程:

346 <= x0*C0 + x1*C1 + x2*C2 +......xN*CN <= 468
25 <= x0*p0 + x1*p1 + x2*p2 +......xN*pN <= 33
12 <= x0*c0 + x1*c1 + x2*c2 +......xN*cN <= 17
22 <= x0*f0 + x1*f1 + x2*f2 +......xN*fN <= 30

数字 C0...CN , p0...pN , c0...cN , f0...fN 已经给了我。我尝试通过以下方式解决此问题:

import numpy as np
from scipy.optimize import linprog
from numpy.linalg import solve
A_ub = np.array([
    [34, 56, 32, 21, 24, 16, 19, 22, 30, 27, 40, 33],
    [2, 3, 2, 1.5, 3, 4, 1, 2, 2.5, 1, 1.2, 1.3],
    [1, 2, 3, 1.2, 2, 3, 0.6, 1, 1, 1.2, 1.1, 0.8],
    [0.5, 2, 2, 1, 3, 4, 1, 1, 1, 0.5, 0.3, 1.2],
    [-34, -56, -32, -21, -24, -16, -19, -22, -30, -27, -40, -33],
    [-2, -3, -2, -1.5, -3, -4, -1, -2, -2.5, -1, -1.2, -1.3],
    [-1, -2, -3, -1.2, -2, -3, -0.6, -1, -1, -1.2, -1.1, -0.8],
    [-0.5, -2, -2, -1, -3, -4, -1, -1, -1, -0.5, -0.3, -1.2]])
b_ub = np.array([468, 33, 17, 30, -346, -25, -12, -22])
c = np.array([34, 56, 32, 21, 24, 16, 19, 22, 30, 27, 40, 33])
res = linprog(c, A_eq=None, b_eq=None, A_ub=A_ub, b_ub=b_ub, bounds=(0.5, 3))

方程的解释 A_ub 的第一行与 b_ub 相同,因为我们试图最大化方程并确保它在给定的边界范围内,即 468 和 346,这意味着我想得到值尽量接近上限。

我将[-34, -56, -32, -21, -24, -16, -19, -22, -30, -27, -40, -33] 放在 A_ub 中,将 -346 放在 b_ub 中,逻辑如下:

-346 &gt; -(x0*C0 + x1*C1 + x2*C2 +......xN*CN) 这将解决方程的下界问题。我对其他人也这样做。

但我觉得我的方法是错误的,因为我得到的答案是0.425 for res.funnan 作为res.x 的值

x 的上限是 3,下限是 0.5

如何定义如上所示的问题,以便在牢记上限的同时获得接近 468 的最大值?如何使用 scipy 定义下限?我是第一次从事线性规划,所以我可能错过了可以帮助我的想法。

我也愿意接受任何其他解决方案。

【问题讨论】:

  • 在优化模型中不能有严格的不等式 (>),只有 ≥(出于理论和实践原因)。否则,您可以轻松地将这些不等式添加到模型中。您需要成对进行,即-x0*C0 + x1*C1 ≤ 0-x1*C1 + x2*C2 ≤ 0 等。
  • 感谢 Erwin Kalvelagen,我怎样才能在 scipy 中建立上述方程,(如果这听起来很简单,我很抱歉,我刚刚开始使用 scipy 进行机器学习和线性编程)
  • 要实现-x0*C0 + x1*C1 ≤ 0,在A_ub 中添加一行。它只有两个非零元素:x0 列中的-C0x1 列中的C1。然后向b_ub 添加一个值为0 的元素。
  • A_ub 的额外行中的其余元素将为 0 对吗?即我们为-x0*C0 + x1*C1 ≤ 0设置的行
  • 没错。仅有的两个非零元素是我所描述的。

标签: python scipy linear-algebra linear-programming


【解决方案1】:

这种不等式系统是不可行的:没有满足所有约束的解决方案。你可以从res看到:

     fun: 0.42500000000000243
 message: 'Optimization failed. Unable to find a feasible starting point.'
     nit: 28
  status: 2
 success: False
       x: nan

我相信这是一个正确的结果(我用另一个 LP 系统验证了这一点)。

注意:如果你把边界改成(0,3),你会得到一个可行的解决方案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2019-08-02
    • 2012-08-31
    • 2015-08-10
    • 1970-01-01
    • 2022-10-13
    • 1970-01-01
    相关资源
    最近更新 更多