繁体   English   中英

@NLConstraint具有向量约束JuMP / Julia

[英]@NLConstraint with vectorized constraint JuMP/Julia

我正在尝试解决一个涉及指数和的等式的问题。

这就是我要对其进行硬编码的方式:

@NLconstraint(m, exp(x[25])==exp(x[14])+exp(x[18]))

这在其余代码中都可以正常工作。 但是,当我尝试对上述任意方程组执行此操作时,会出现错误。 这是我的代码:

@NLconstraint(m,[k=1:length(LHSSum)],sum(exp.(LHSSum[k][i]) for i=1:length(LHSSum[k]))==sum(exp.(RHSSum[k][i]) for i=1:length(RHSSum[k])))

其中LHSSumRHSSum是包含需要求幂然后求和的元素数组的数组。 那就是LHSSum[1]=[x[1],x[2],x[3],...,x[n]] 其中x[i]JuMP.Variable类型的JuMP.Variable 注意, length(LHSSum)=length(RHSSum)

返回的错误是:

LoadError: exp is not defined for type Variable. Are you trying to build a nonlinear problem? Make sure you use @NLconstraint/@NLobjective.

因此,一个简单的解决方案是简单地在@NLconstraint函数之外进行所有求幂和求和,因此输入将是一个标量。 但是,这也带来了一个问题,因为未定义exp(x)因为x的类型为JuMP.variable ,而exp期望的类型为real。 这很奇怪,因为在@NLconstraint()调用该函数时,我能够计算出指数。 即,当我将此行@NLconstraint(m,exp(x)==exp(z)+exp(y))而不是较早的行时,不会引发任何错误。

我想做的另一件事是泰勒级数展开,但是这也带来了一个问题,因为它进入@NLconstraint以获取大于2的幂,然后我陷入了相同的矢量化问题。

所以我觉得卡住了,我觉得如果上升,将允许的量化评价@NLconstraint像它的@constraint ,这甚至不会是一个问题。 另一个解决方法是,如果JuMP实现了它自己的exp函数以允许对JuMP.Variable类型进行幂运算。 但是,就目前而言,我没有找到使用JuMP框架解决此问题的方法。 你们有没有解决这个问题的办法? 我缺少任何聪明的解决方法吗?

我很困惑,为什么i不使用您编写的表达式。 你的意思是:

@NLconstraint(m, [k = 1:length(LHSSum)],
              sum(exp(LHSSum[k][i]) for i in 1:length(LHSSum[k]))
              ==
              sum(exp(RHSSum[k][i]) for i in 1:length(RHSSum[k])))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM