【问题标题】:Python constrained linear optimizationPython 约束线性优化
【发布时间】:2018-12-21 22:23:28
【问题描述】:

您好,我正在尝试求解具有两个侧约束的线性方程组,其中一个已成功实现,结果的总和应为 1,但我需要另一个,即每个解都应该是非负的。任何知道如何添加此约束的人?谢谢

import numpy as np
import numpy.linalg as LA
import scipy.optimize as optimize

A = np.array([[.5, .3, .2], [.4, 6, .3], [.2, .3, .5]])
b = np.array([0, 0, 0])
x = LA.solve(A, b)

def f(x):
y = np.dot(A, x) - b
return np.dot(y, y)

cons = ({'type': 'eq', 'fun': lambda x: x.sum() - 1},{'type': 'eq', 'fun': lambda x: x >= 0})
res = optimize.minimize(f, [0, 0, 0], method='SLSQP', constraints=cons, 
                    options={'disp': False})
xbest = res['x']

print(xbest)

【问题讨论】:

  • 你愿意使用来自 scipy (scipy.optimize.linprog) 的线性编程库吗?
  • 是的!我只需要解决问题,对它是如何完成的不是很感兴趣

标签: python scipy


【解决方案1】:

我假设这是您要解决的方程组:

.5x1 + .3x2 + .2x3 = 0
.4x1 + 6x2 + .3x3 = 0
.2x1 + .3x2 + .5x3 = 0
x1 + x2 + x3 =1
x1, x2, x3 >=0

这可以使用scipy.optimize.linprog 轻松解决。由于您没有目标函数,因此目标函数的系数将为[0., 0., 0.]

from scipy.optimize import linprog

print(linprog(c=[0., 0., 0.], 
    A_eq=[[.5, .3, .2], [.4, 6, .3], [.2, .3, .5], [1., 1., 1.]],
    b_eq=[0., 0., 0., 1.],
    bounds=(0, None)))

这应该会为您提供问题的结果。但是,您的系统没有可行的解决方案。您可以在此处找到有关scipy.optimize.linprog 的更多信息:http://docs.scipy.org/doc/scipy-0.15.1/reference/generated/scipy.optimize.linprog.html

【讨论】:

    猜你喜欢
    • 2014-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 1970-01-01
    相关资源
    最近更新 更多