簡體   English   中英

最小化java中復雜的線性多變量函數

[英]Minimize complex linear multivariable function in java

我需要在一些約束下最小化復雜的線性多變量函數。

x是長度為L的復數數組。

a [0],a [1],...,a [L-1]是復系數和

F是復函數F(x)= x [0] * a [0] + x [1] * a [1] + ... + x [L-1] * a [L-1]必須最小化。

b [0],b [1],...,b [L-1]是復系數,存在約束

1 = complexConjuate(x [0])* x [0] + complexConjuate(x [1])* x [1] + ... + complexConjuate(x [L-1])* x [L-1]要實現。

我已經詳細了解了http://math.nist.gov/javanumerics/並瀏覽了許多文檔。 但我找不到一個能夠最小化復雜功能的庫。

您希望最小化平滑超曲面S上的可微分實值函數f 如果存在這樣的最小值 - 在編輯之后的情況下保證存在,因為超曲面是緊湊的 - 它發生在fS的限制f|S的臨界點處。

一個微函數的臨界點f在限制在歧管周圍的空間中定義的M是那些點,其中梯度f正交於切空間T(M)到歧管。 對於一般情況,請閱讀拉格朗日乘數

在歧管是超曲面(它具有實際的維數1)的情況下,由方程g(x) = 0定義(局部),具有平滑函數g ,這是特別容易檢測的, f|S的臨界點是在S上的點x ,其中grad(f)|xgrad(g)|x共線。

現在問題實際上是一個真實的(如關注實數)問題,而不是一個復雜的問題(如關於復數)。

剝掉不必要的想象部分,我們有

  • 超曲面S ,其方便地是單位球面,通過全局定義的(x|x) = 1 ,其中(a|b)表示標量積a_1*b_1 + ... + a_k*b_k ,梯度gx是只需2*x
  • 一個實線性函數L(x) = (c|x) = c_1*x_1 + ... + c_k*x_kL的梯度是c獨立於x

因此球上有兩個臨界點L (除非c = 0在這種情況下L是常數),通過原點和c線與球相交的點, c/|c| -c/|c|

顯然L(c/|c|) = 1/|c|*(c|c) = |c| L(-c/|c|) = -1/|c|*(c|c) = -|c| ,所以最小值出現在-c/|c| 和那里的值-|c|

每個復變量x可以被認為是兩個實數變量,分別代表x的實部和虛部。

我的建議是,使用每個變量或系數的實部和虛部作為獨立分量重新構造目標函數和約束。

根據評論,您只打算優化目標函數的實際部分,這樣您最終可以得到一個受優化影響的單個目標函數。

約束可以分為兩個,其中“實際”約束應該等於1而“虛構”約束應該等於0。

在以這種方式重新配置優化問題之后,您應該能夠應用任何適用於重構問題的優化算法。 例如, Apache Commons Math庫中有一組不錯的優化器, SuanShu庫也包含一些優化算法。

暫無
暫無

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

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