簡體   English   中英

Python約束線性優化

[英]Python constrained linear optimization

您好,我正在嘗試求解帶有兩個側約束的線性方程組,其中一個已成功實現,結果應加為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)

我假設這是您要解決的方程組:

.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.] . [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 : scipy.optimize.linprog

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM