Hello,

New to JuMP and trying to implement a matrix-based expression in JuMP that uses min and max operators broadcasted to the vector. Having trouble getting the min and max operators working in the ‘tx’ expression, was planning to implement this as a custom function but it’s my understanding JuMP doesn’t support user-defined functions with multiple vector inputs. So I’m trying to implement it as an underlying expression. Is there a better way to do this / a better package? I tried to use Convex.jl but since ‘tx’ is only convex when constrained by u * z > 0 it’s not DCP. I’ve read several stack overflow questions where the problem is reformulated to get around the use of max but I don’t think that will work here since it’s part of the computation, not a constraint. This implementation works perfectly in julia outside of JuMP. I played around a little with user-defined versions of max and min operators and registering those for a non-linear model but that didn’t work either. Any help would be greatly appreciated.

some randomly generated variables for example code that produces error:

‘’’

## generate some random data

hBm = rand(50) # > 0

hInit = rand(50) # > 0

```
n = length(hInit)
vMat = rand(100,50)
tMat = randn(100,50)
q = rand(50,50) # > 0
cumV = cumsum(vMat, dims=1)
model = Model(Ipopt.Optimizer)
set_silent(model)
@variable(model, u[1:n])
h = @expression(model, hInit + u)
te = @expression(model, (h - hBm)' * q * (h - hBm))
tx = @expression(model, sum(tMat .* (vMat .- min.(max.(cumV .+ min.(u, 0.0)', 0.0), vMat))))
## objective
@objective(model, Min, te + tx)
## constraints
@constraint(model, z .* u .>= 0)
@constraint(model, sum(hInit + u) == sum(hInit))
# optimize and print some logs
optimize!(model)
solution_summary(model)
```

‘’’

the error:

‘’’

ERROR: MethodError: no method matching isless(::Float64, ::VariableRef)

Closest candidates are:

isless(::T, ::T) where T<:Union{Float16, Float32, Float64} at float.jl:424

isless(::AbstractFloat, ::AbstractFloat) at operators.jl:184

isless(::AbstractFloat, ::ForwardDiff.Dual{Ty}) where Ty at C:\Users\templ.julia\packages\ForwardDiff\QdStj\src\dual.jl:145

‘’’