2016-06-14 30 views
0

こんにちは私は2つのサイド制約を持つ線形方程式系を解くことを試みていますが、その結果は合計で1になるはずですが、それぞれの解が負でなければならない。この制約を追加する方法を知っている人は誰ですか?おかげPythonの制約付き線形最適化

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) 
+1

scipy(scipy.optimize.linprog)から線形計画ライブラリを使用することはできますか? –

+0

はい!私は問題を解決する必要があります。問題の解決にはそれほど関心がありません – 1233023

答えて

0

は、私は、これはあなたが解決しようとしている方程式のシステムであると仮定しています:

.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

関連する問題