我在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])))
现在,它不是一个函数调用,而是一个(支持的(向量索引。