Julia JuMP-目标函数中的"max"错误:没有匹配的方法



我的代码中有错误,有人能帮我吗?

我的代码:

function funP(u, τ::Float64)
w = (τ*max(u, 0)) + ((1-τ)*max(-u, 0))
return w
end 
τ = 0.2
modelquant = Model(with_optimizer(OSQP.Optimizer))
@variable(modelquant, β[i=0:1])
@variable(modelquant, erro[1:T])
@constraint(modelquant,[i=1:T], erro[i] >=  contratos[i] - β[0] - β[1]*spot[i])
@constraint(modelquant,[i=1:T], erro[i] >= -contratos[i] + β[0] + β[1]*spot[i])

@objective(modelquant, Min, sum(funP(erro[i], τ) for i=1:T)) 
optimize!(modelquant)
objective_value(modelquant)
𝐁 = JuMP.value.(β)

错误为:

julia>目标(模型量,Min,sum(当i=1:T时,funP(erro[i],τ((错误:MethodError:没有匹配isless(:Int64,:VariableRef(的方法最接近的候选人是:isless(:Missing,:Any(在Missing处。jl:87运算符处的isless(:Real,:AbstractFloat(。jl:166isless(:Integer,:ForwardDiff.Dual{Ty,V,N},其中N为V(其中Ty位于C:\Users\Fernanda.julia\packages\ForwardDiff\kU1ce\src\Dual.jl:140。。。Stacktrace:[1] 最大值(:VariableRef,:Int64(。\运算符。jl:417[2] 处的funP(:VariableRef,:Float64(。\回复[8]:2[3] C:\Users\Fernanda.julia\packages\MutableArithmetics\bPWR4\src\rewrite.jl:276[inlined]的宏扩展[4] C:\Users\Fernanda.julia\packages\JuMP\qhoVb\src\macros.jl:830[inlined]的宏扩展[5] 位于的顶级作用域。\回复[20]:1

非常感谢!

您需要重新设计模型,用二进制变量替换max函数。

在您的情况下,代码将如下所示(检查拼写错误(:

@variable(modelquant, erro_neg[1:T], Bin)
@variable(modelquant, erro_pos[1:T], Bin)
@constraint(modelquant,for i=1:T,erro_neg[i]+erro_pos[i]==1)
@constraint(modelquant,for i=1:T,erro[i]*erro_pos[i] >= 0)     
@constraint(modelquant,for i=1:T,erro[i]*erro_neg[i] <= 0)   
@objective(modelquant, Min, sum( τ*erro_neg[i]*erro[i]+ (1-τ)*erro[i]*erro_npos[i] for i=1:T)) 

请注意,在我的版本中,您实际上可以安全地从erro_negerro_pos中删除Bin条件,并且模型仍然有效(您需要根据经验测试您的求解器偏好(

相关内容

最新更新