@Mark_L_Stone
@Michal_Adamaszek
I am new to conic programming using Mosek.
I am trying to reformulate a model into conic programming, and then I would need to solve it using Mosek/MosekTools.
Based on the definition of the exponential cone, a constraint like x*e^(y/x) <= t can be represented as ( t, x , y) \in K_exp.
However, I have faced the following constraint in a part of my model:
(c1): x*e^y <= t (where x >=0)
Since x>=0, function f(x,y) = x*e^y is convex.
My question is: How can I represent this constraint into a conic form (exponential, second-order cone, etc.)?
I have tried a few things:
I converted (c1) into e^y <= t/x and then represented it as an exponential cone (y,1,t/x) \in K_exp.
However, I get the following error as Mosek does not support inverse.
ERROR: LoadError: inv is not defined for type AbstractVariableRef. Are you trying to build a nonlinear problem? Make sure you use @NLconstraint@NLobjective:
Also, changing the constraint to NLconstraint does not work since Mosek does not support nonlinear constraints.
Introducing a variable s >= e^y, we can write () as the intersection of (s,1,y) \in K_exp and constraint xs <= t (c2). But now, we need to reformulate (c2) into a conic form supported by Mosek.
One way is to let x=e^u and s=e^v and then reformulate (c2) as (t,1,u+v) \in K_exp.
However, the challenge is that when I add constraints
@constraint(model, x == ℯ^u) @constraint(model, s == ℯ^v)
I get the following error:
ERROR: LoadError: MethodError: no method matching ^(::Irrational{:ℯ}, ::VariableRef) Closest candidates are: ^(::Irrational{:ℯ}, ::AbstractIrrational) at mathconstants.jl:91 ^(::Irrational{:ℯ}, ::Rational) at mathconstants.jl:91 ^(::Irrational{:ℯ}, ::Integer) at mathconstants.jl:91
Is there any other solver that could address this issue?
Any suggestion would be appreciated.