我有一个公式(称为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是双精度值。...
Breeze LinearProgram求解器仅支持线性程序,因此无法解决此问题。 (实际上,它实际上只是Apache Commons Math SimplexSolver的包装,它也不能解决非线性问题。)
我们有一个通用的梯度优化器LBFGS可以运行,但是您需要自己提供梯度。