使用scipy linprog

2024-09-29 21:55:28 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下问题:

  1. 目标函数c1x1 + c2x2(我们需要最小化它)
  2. -x1 + x2 <= 0
  3. 0 <= x1 <= 3
  4. 0 <= x2 <= 2

我们还假设添加了c1 = 1c2 = -0.5以及另一个约束c1x1 + c2x2 = P, were P = -1,0,1。你知道吗

使用linprog解决这个问题的正确方法是什么? bounds是指下限吗?你知道吗

谢谢你的帮助。你知道吗


Tags: 方法函数目标x1x2c2boundsc1
1条回答
网友
1楼 · 发布于 2024-09-29 21:55:28

忽略注释中提到的关于不可能相等约束的问题,我们只需参考the documentation

A_ub @ x <= b_ub
A_eq @ x == b_eq
lb <= x <= ub

在这里,lb默认为0,因此您根本不必考虑下限,您的问题归结为c = [1, -0.5]A_ub = [[-1, 1], [1, 0], [0, 1]]b_ub = [0, 3, 2]

In [57]: linprog(c, A_ub, b_ub)                                                                          
Out[57]: 
     con: array([], dtype=float64)
     fun: 9.37460773860971e-11
 message: 'Optimization terminated successfully.'
     nit: 4
   slack: array([7.91922932e-11, 3.00000000e+00, 2.00000000e+00])
  status: 0
 success: True
       x: array([1.08299862e-10, 2.91075683e-11])

也就是说,在数值问题上,最优解是x1 = x2 = 0(这也是非常明显的:获得负目标的唯一方法是让x2为正,但是第一个约束条件要求x1至少与x2一样大,这反过来又会导致你的目标变为正)。你知道吗

相关问题 更多 >

    热门问题