[英]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
。 如果存在這樣的最小值 - 在編輯之后的情況下保證存在,因為超曲面是緊湊的 - 它發生在f
到S
的限制f|S
的臨界點處。
一個微函數的臨界點f
在限制在歧管周圍的空間中定義的M
是那些點,其中梯度的f
正交於切空間T(M)
到歧管。 對於一般情況,請閱讀拉格朗日乘數 。
在歧管是超曲面(它具有實際的維數1)的情況下,由方程g(x) = 0
定義(局部),具有平滑函數g
,這是特別容易檢測的, f|S
的臨界點是在S
上的點x
,其中grad(f)|x
與grad(g)|x
共線。
現在問題實際上是一個真實的(如關注實數)問題,而不是一個復雜的問題(如關於復數)。
剝掉不必要的想象部分,我們有
S
,其方便地是單位球面,通過全局定義的(x|x) = 1
,其中(a|b)
表示標量積a_1*b_1 + ... + a_k*b_k
,梯度g
在x
是只需2*x
L(x) = (c|x) = c_1*x_1 + ... + c_k*x_k
, L
的梯度是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.