2017-02-17 84 views
4

我正在使用scipy.optimize模塊來查找最小化我的輸出的最佳輸入權重。從我見過的例子中,我們用一個單方程式來定義約束條件;那麼我們創建一個'不平等'類型的變量。我的問題是,優化包如何知道我約束中變量的總和是否需要小於1或大於1?Scipy.optimize不等式約束 - 不平等的哪一方面被考慮?

...

def constraint1(x): 
    return x[0]+x[1]+x[2]+x[3]-1 

....

con1 = {'type': 'ineq', 'fun': constraint1} 

鏈接,完整的解決方案,我用我的例子: http://apmonitor.com/che263/index.php/Main/PythonOptimization

謝謝。

+1

[scipy.optimize.minimize](https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html)說:「相等約束是指約束函數的結果是零,而**不等式意味着它是非負的**。「 – endolith

回答

5

如果您參考https://docs.scipy.org/doc/scipy-0.18.1/reference/tutorial/optimize.html並雙擊自動滾屏下降到多元標量函數(最小化)約束最小化,你可以找到

該算法允許處理約束優化形式的 :

enter image description here

其中不平等形式C_j(x) >= 0的。

所以,當你定義約束爲

def constraint1(x): 
    return x[0]+x[1]+x[2]+x[3]-1 

和指定約束的類型

con1 = {'type': 'ineq', 'fun': constraint1} 

它會自動假定約束的標準形式x[0]+x[1]+x[2]+x[3]-1>=0x[0]+x[1]+x[2]+x[3]>=1