在Julia/JuMP中使用一个简单的线性函数或非线性约束下的表达式



我在JuMP/Julia中有以下函数:

T=1:6
function Vini(t)
if t==1
return V0
else
return V[t-1]
end
end

其中:

@variable(model, 6000 <= V[T] <= 18000)

V0是标量。

当在线性约束中使用上述函数时,该模型运行良好。然而,当在非线性约束中使用相同的函数时,它不会。

@constraint(model, c2[t in 1:6], V[t] == Vini(t) + n*(INF-Q[t]))

上述约束条件运行良好。使用时:

@NLconstraint(model, c5_2[t=1:6], PH[t] == 20000*(Q[t]-260*W[t])/(220000-(V[t]+Vini(t))))

它不起作用。PH、Q和W也是变量,INF是标量。我想在AMPL中复制一种简单的方法,即:

subject to c5_2{t in T}: PH[t] = 20000*(Q[t]-260*W[t])/(220000-(V[t]+(if t=1 then V0 else V[t-1])) 

任何想法都将不胜感激。

以下是我得到的:

LoadError:不支持的操作Vini在以C:\Users\clopezsalgado\Documents\JULIA Models\Jump Models\second_opt开头的表达式中示例。jl:57error(s::String(at error。jl:33_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:434_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:446_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:446_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:446_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:446_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397_process_expr!(expr::MathOptInterface.FileFormats.NL.NLExpr,args:Vector{Any}(,位于NLExpr.jl:446_process_expr!(expr::MathOptInterface.FileFormats.NL_NLExpr,arg::expr(,位于NLExpr.jl:397MathOptInterface.FileFormats.NL_NLExpr(expr::expr(在NLExpr.jl:365MathOptInterface.FileFormats.NL._NLConstraint(expr::expr,bound::MathOptInterface。NLPBoundsPair(,位于NL.jl:75copy_to(dest::MathOptInterface.FileFormats.NL.Model,Model::MathOptMinterface.Utilities.UniversalFallback{MathOptInterface.Uutilities.Model{Float64}}(位于NL.jl:280copy_to at AmplNLWriter.jl:248[inlined]优化在MathOptInterface.jl:86[inlined]优化(m::MathOptInterface.Utilities.CachingOptimizer{AmplNLWriter.Optimizer,MathOptInterface。Utilities。UniversalFallback{MathOptInterface.Utility.Model{Float64}}(

这是非线性约束中用户定义函数的限制。

改为:

Vini_array = [Vini(t) for t in 1:6]
@NLconstraint(model, c5_2[t=1:6], PH[t] == 20000*(Q[t]-260*W[t])/(220000-(V[t]+Vini_array[t])))

现在,它不是一个函数调用,而是一个(支持的(向量索引。

相关内容

  • 没有找到相关文章

最新更新