使用scalanlp微风优化库最大化指数方程式

问题描述 投票:0回答:1

我有一个公式(称为Chritoffersen检验),如下所示:∑(1-C(i))(log⁡(a * b * D(i)^(b-1))-1)))>

其中a = ∑(1- C(i)/ ∑D(i)^ b和b是双精度值在i上的总和从1到n(+ ve整数),C和D是等长向量。

我想为0

这是我到目前为止的方式。我找不到对数或如何表达b范围(如果我说b是一个双精度数,那么这些表达式和约束不起作用,如果我说b是一个Real则这些乘法不起作用)

val lp = new LinearProgram()
    import lp._

    val d = DenseVector(0.1, 0.23, 0.45)
    val c = DenseVector(2.3, 4.5, 0.45)
    val b= Real()

    import breeze.numerics._

    val one  = Integer()

    val apowerb = (one - (c(0)+ c(1) + c(2))) * pow(Real(pow(d(0), b)) + Real(pow(d(1), b)) + Real(pow(d(2), b)), -1)

    val dpowerbminusone = Real(pow(d(0), b-1)) + Real(pow(d(1), b-1))+ Real(pow(d(2), b-1))

    val objective : lp.Expression = (1 - (c(0)+c(1)+c(2)))(apowerb.*(b).*(dpowerbminusone) -1)

    val constraintb = ((objective)
      subjectTo ( b < Double.PositiveInfinity )
      )

是否可以轻而易举地表达这一点以找到最佳解决方案?

我有一个公式(称为Chritoffersen检验):∑(1-C(i))(log((a * b * D(i)^(b-1))-1))其中a = ∑(1- C(i)/ ∑D(i)^ b并且b是双精度值。...

scala mathematical-optimization linear-programming scala-breeze scala-nlp
1个回答
0
投票

Breeze LinearProgram求解器仅支持线性程序,因此无法解决此问题。 (实际上,它实际上只是Apache Commons Math SimplexSolver的包装,它也不能解决非线性问题。)

我们有一个通用的梯度优化器LBFGS可以运行,但是您需要自己提供梯度。

© www.soinside.com 2019 - 2024. All rights reserved.