Skip to content

No Clear API for ReverseConstraintFunction for Conic Constraints #283

Open
@andrewrosemberg

Description

@andrewrosemberg

The following errors and it is not clear how to correctly fetch the ReverseConstraintFunction perturbations for conic constraints:

model = JuMP.Model(() -> DiffOpt.diff_optimizer(SCS.Optimizer))
set_silent(model)

x = @variable(model)
y = @variable(model)
t = @variable(model)

ceq = @constraint(model, -1.0t == -1.0)

cnon = @constraint(model, 1.0y >= 1 / 2)
csoc = @constraint(model, [1.0t, 1.0x, 1.0y] in MOI.SecondOrderCone(3))

@objective(model, Min, 1.0x)

optimize!(model)

MOI.set(
      model,
      DiffOpt.ReverseVariablePrimal(),
      y,
      1.0
  )

  DiffOpt.reverse_differentiate!(model)

JuMP.coefficient(MOI.get(model, DiffOpt.ReverseConstraintFunction(), cnon), y)

Errors with:

ERROR: MethodError: no method matching coefficient(::DiffOpt.MatrixVectorAffineFunction{…}, ::MathOptInterface.VariableIndex)

Closest candidates are:
  coefficient(::DiffOpt.MatrixScalarQuadraticFunction, ::MathOptInterface.VariableIndex)
   @ DiffOpt ~/Workspace/DiffOpt.jl/src/utils.jl:228
  coefficient(::DiffOpt.MatrixScalarQuadraticFunction, ::MathOptInterface.VariableIndex, ::MathOptInterface.VariableIndex)
   @ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:198
  coefficient(::GenericQuadExpr{C, V}, ::V, ::V) where {C, V}
   @ JuMP ~/.julia/packages/JuMP/xlp0s/src/quad_expr.jl:220
  ...

Stacktrace:
 [1] coefficient(func::DiffOpt.IndexMappedFunction{…}, vi::MathOptInterface.VariableIndex)
   @ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:247
 [2] coefficient(func::DiffOpt.IndexMappedFunction{DiffOpt.IndexMappedFunction{…}}, vi::MathOptInterface.VariableIndex)
   @ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:247
 [3] coefficient(func::DiffOpt.MOItoJuMP{DiffOpt.IndexMappedFunction{DiffOpt.IndexMappedFunction{…}}}, var_ref::VariableRef)
   @ DiffOpt ~/Workspace/DiffOpt.jl/src/jump_moi_overloads.jl:297
 [4] top-level scope

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions