You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
It would be great if Dualization could support generic numeric types. It looks like some effort was made towards that with the DualOptimizer{T} constructor, but there's a lot of hardcoded Float64's that cause errors like
ERROR: MathOptInterface.UnsupportedConstraint{MathOptInterface.VectorAffineFunction{BigFloat},MathOptInterface.PositiveSemidefiniteConeTriangle}:`MathOptInterface.VectorAffineFunction{BigFloat}`-in-`MathOptInterface.PositiveSemidefiniteConeTriangle` constraint is not supported by the model.
An example problem is
using Convex, GenericLinearAlgebra, Dualization, SDPAFamily
f = Convex.ProblemDepot.PROBLEMS["sdp"]["sdp_nuclear_norm_atom"]
T=BigFloat
f(Val(true), 1e-3, 0, T) do p
solve!(p, DualOptimizer{T}(SDPAFamily.Optimizer{T}(presolve=true)))
end
which errors with T=BigFloat and succeeds with T=Float64 (using release versions of each package).
Full stacktrace (with T=BigFloat)
julia>f(Val(true), 1e-3, 0, T) do p
solve!(p, DualOptimizer{T}(SDPAFamily.Optimizer{T}(presolve=true)))
end
ERROR: MathOptInterface.UnsupportedConstraint{MathOptInterface.VectorAffineFunction{BigFloat},MathOptInterface.PositiveSemidefiniteConeTriangle}:`MathOptInterface.VectorAffineFunction{BigFloat}`-in-`MathOptInterface.PositiveSemidefiniteConeTriangle` constraint is not supported by the model.
Stacktrace:
[1] bridge_type(::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::Type{MathOptInterface.VectorAffineFunction{BigFloat}}, ::Type{MathOptInterface.PositiveSemidefiniteConeTriangle}) at /Users/eh540/.julia/packages/MathOptInterface/XiH8D/src/Bridges/lazy_bridge_optimizer.jl:330
[2] concrete_bridge_type(::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::Type{MathOptInterface.VectorAffineFunction{BigFloat}}, ::Type{MathOptInterface.PositiveSemidefiniteConeTriangle}) at /Users/eh540/.julia/packages/MathOptInterface/XiH8D/src/Bridges/Constraint/bridge.jl:120
[3] add_constraint(::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::MathOptInterface.VectorAffineFunction{BigFloat}, ::MathOptInterface.PositiveSemidefiniteConeTriangle) at /Users/eh540/.julia/packages/MathOptInterface/XiH8D/src/Bridges/bridge_optimizer.jl:1052
[4] _broadcast_getindex_evalf(::typeof(MathOptInterface.add_constraint), ::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::MathOptInterface.VectorAffineFunction{BigFloat}, ::MathOptInterface.PositiveSemidefiniteConeTriangle) at ./broadcast.jl:630
[5] _broadcast_getindex at ./broadcast.jl:603 [inlined]
[6] getindex at ./broadcast.jl:563 [inlined]
[7] copy at ./broadcast.jl:853 [inlined]
[8] materialize at ./broadcast.jl:819 [inlined]
[9] add_constraints(::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::Array{Union{MathOptInterface.SingleVariable, MathOptInterface.VectorAffineFunction{BigFloat}},1}, ::Array{Any,1}) at /Users/eh540/.julia/packages/MathOptInterface/XiH8D/src/constraints.jl:175
[10] load_MOI_model!(::MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}},MathOptInterface.Utilities.UniversalFallback{MathOptInterface.Utilities.Model{BigFloat}}}}, ::Problem{BigFloat}) at /Users/eh540/.julia/packages/Convex/IJj5u/src/solution.jl:186
[11] #solve!#15(::Bool, ::Bool, ::Bool, ::typeof(solve!), ::Problem{BigFloat}, ::DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}}) at /Users/eh540/.julia/packages/Convex/IJj5u/src/solution.jl:216
[12] solve!(::Problem{BigFloat}, ::DualOptimizer{BigFloat,MathOptInterface.Bridges.LazyBridgeOptimizer{MathOptInterface.Utilities.CachingOptimizer{SDPAFamily.Optimizer{BigFloat},Dualization.DualizableModel{BigFloat}}}}) at /Users/eh540/.julia/packages/Convex/IJj5u/src/solution.jl:204
[13] (::var"#21#22")(::Problem{BigFloat}) at ./REPL[43]:2
[14] sdp_nuclear_norm_atom(::var"#21#22", ::Val{true}, ::Float64, ::Int64, ::Type{BigFloat}) at /Users/eh540/.julia/packages/Convex/IJj5u/src/problem_depot/problems/sdp.jl:80
[15] top-level scope at REPL[43]:1
The text was updated successfully, but these errors were encountered:
It would be great if Dualization could support generic numeric types. It looks like some effort was made towards that with the
DualOptimizer{T}
constructor, but there's a lot of hardcodedFloat64
's that cause errors likeAn example problem is
which errors with
T=BigFloat
and succeeds withT=Float64
(using release versions of each package).Full stacktrace (with
T=BigFloat
)The text was updated successfully, but these errors were encountered: