Open
Description
Consider the conic problem:
model = Model(() -> DiffOpt.diff_optimizer(SCS.Optimizer))
@variable(model, x[1:7])
@test num_variables(model) == 7
c1 = @constraint(model, -sum(x[i] for i in 1:6) + 10 ≥ 0)
c2 = [
@constraint(model, x[i] ≥ 0)
for i in 1:6
]
α = 0.8
δ = 0.9
c3 = @constraint(
model,
LinearAlgebra.Symmetric(hcat(
[((δ/2)*x[1] + α*x[2] + δ*x[3] + (δ/4)*x[4] + (δ/8)*x[5] - 1.0*x[7]) # a11
((-(δ/(2*√2)))*x[1] - (δ/4)*x[2] - (δ/(8*√2))*x[5])],
[((-(δ/(2*√2)))*x[1] - (δ/4)*x[2] - (δ/(8*√2))*x[5])
((δ/2)*x[1] + (δ - α)*x[2] + 0.0*x[3] + (δ/8)*x[5] + (δ/4)*x[6] - x[7])])
) in PSDCone()
)
@objective(model, Max, x[7])
optimize!(model)
Setting the objective sensitivity:
MOI.set(
model,
DiffOpt.ForwardObjectiveFunction(),
sum(x)
)
or conic constraint sensitivity
MOI.set.(
model,
DiffOpt.ForwardConstraintFunction(),
c3,
sum(x) + 1,
)
Errors when differentiating:
> DiffOpt.forward_differentiate!(model)
ERROR: MethodError: no method matching throw_set_error_fallback(::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, ::DiffOpt.ObjectiveFunctionAttribute{…}, ::MathOptInterface.Bridges.Objective.FunctionConversionBridge{…}, ::MathOptInterface.ScalarAffineFunction{…})
Closest candidates are:
throw_set_error_fallback(::MathOptInterface.ModelLike, ::Union{MathOptInterface.AbstractModelAttribute, MathOptInterface.AbstractOptimizerAttribute}, ::Any; error_if_supported)
@ MathOptInterface ~/.julia/packages/MathOptInterface/jGuEH/src/attributes.jl:580
throw_set_error_fallback(::MathOptInterface.ModelLike, ::MathOptInterface.ConstraintFunction, ::MathOptInterface.ConstraintIndex{F, S}, ::F; error_if_supported) where {F<:MathOptInterface.AbstractFunction, S}
@ MathOptInterface ~/.julia/packages/MathOptInterface/jGuEH/src/attributes.jl:1896
throw_set_error_fallback(::MathOptInterface.ModelLike, ::MathOptInterface.ConstraintFunction, ::MathOptInterface.ConstraintIndex, ::MathOptInterface.AbstractFunction; kwargs...)
@ MathOptInterface ~/.julia/packages/MathOptInterface/jGuEH/src/attributes.jl:1908
...
Stacktrace:
[1] set(::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, ::DiffOpt.ObjectiveFunctionAttribute{…}, ::MathOptInterface.Bridges.Objective.FunctionConversionBridge{…}, ::MathOptInterface.ScalarAffineFunction{…})
@ MathOptInterface ~/.julia/packages/MathOptInterface/jGuEH/src/attributes.jl:553
[2] set(b::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, attr::DiffOpt.ObjectiveFunctionAttribute{…}, value::MathOptInterface.ScalarAffineFunction{…})
@ DiffOpt ~/Workspace/DiffOpt.jl/src/copy_dual.jl:51
[3] set(b::MathOptInterface.Bridges.LazyBridgeOptimizer{…}, attr::DiffOpt.ForwardObjectiveFunction, value::MathOptInterface.ScalarAffineFunction{…})
@ DiffOpt ~/Workspace/DiffOpt.jl/src/copy_dual.jl:71
[4] forward_differentiate!(model::DiffOpt.Optimizer{MathOptInterface.Utilities.CachingOptimizer{…}})
@ DiffOpt ~/Workspace/DiffOpt.jl/src/moi_wrapper.jl:564
[5] forward_differentiate!
@ ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:393 [inlined]
[6] forward_differentiate!(model::MathOptInterface.Utilities.CachingOptimizer{…})
@ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:378
[7] forward_differentiate!(model::Model)
@ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:363
[8] top-level scope
@ REPL[24]:1
Some type information was truncated. Use `show(err)` to see complete types.