Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 11 additions & 5 deletions docs/src/apireference.md
Original file line number Diff line number Diff line change
Expand Up @@ -140,10 +140,6 @@ Silent
TimeLimitSec
RawParameter
NumberOfThreads
AbstractCallback
LazyConstraintCallback
HeuristicCallback
UserCutCallback
```

List of attributes useful for optimizers
Expand All @@ -168,6 +164,17 @@ PrimalStatus
DualStatus
```

Attributes relating to solver callbacks:

```@docs
AbstractCallback
LazyConstraintCallback
HeuristicCallback
UserCutCallback
CallbackNodeStatus
CallbackNodeStatusCode
CallbackVariablePrimal
```
### Termination Status

The `TerminationStatus` attribute indicates why the optimizer stopped executing.
Expand Down Expand Up @@ -258,7 +265,6 @@ Calls to `get` and `set` should include as an argument a single `VariableIndex`
VariableName
VariablePrimalStart
VariablePrimal
CallbackVariablePrimal
```

### Constraints
Expand Down
35 changes: 35 additions & 0 deletions src/attributes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -534,6 +534,41 @@ function Base.showerror(io::IO, err::InvalidCallbackUsage)
print(io, "InvalidCallbackUsage: Cannot submit $(err.submittable) inside a $(err.callback).")
end

"""
CallbackNodeStatusCode

An Enum of possible return values from calling [`get`](@ref) with
[`CallbackNodeStatus`](@ref).

Possible values are:

* CALLBACK_NODE_STATUS_INTEGER: the primal solution available from
[`CallbackVariablePrimal`](@ref) is integer feasible.
* CALLBACK_NODE_STATUS_FRACTIONAL: the primal solution available from
[`CallbackVariablePrimal`](@ref) is integer infeasible.
* CALLBACK_NODE_STATUS_UNKNOWN: the primal solution available from
[`CallbackVariablePrimal`](@ref) might be integer feasible or infeasible.
"""
@enum(
CallbackNodeStatusCode,
CALLBACK_NODE_STATUS_INTEGER,
CALLBACK_NODE_STATUS_FRACTIONAL,
CALLBACK_NODE_STATUS_UNKNOWN,
)

"""
CallbackNodeStatus(callback_data)

An optimizer attribute describing the (in)feasibility of the primal solution
available from [`CallbackVariablePrimal`](@ref) during a callback identified by
`callback_data`.

Returns a [`CallbackNodeStatusCode`](@ref) Enum.
"""
struct CallbackNodeStatus{CallbackDataType} <: AbstractOptimizerAttribute
callback_data::CallbackDataType
end
is_set_by_optimize(::CallbackNodeStatus) = true

## Optimizer attributes

Expand Down
1 change: 1 addition & 0 deletions test/attributes.jl
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
@test MOI.is_set_by_optimize(MOI.TerminationStatus())
@test !MOI.is_set_by_optimize(MOI.ConstraintSet())
@test !MOI.is_set_by_optimize(MOI.ObjectiveSense())
@test MOI.is_set_by_optimize(MOI.CallbackNodeStatus(1))
end
@testset "is_copyable" begin
@test !MOI.is_copyable(MOI.TerminationStatus())
Expand Down