[英]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.