diff --git a/src/attributes.jl b/src/attributes.jl index 6bc6ec2845..d3beefe5a1 100644 --- a/src/attributes.jl +++ b/src/attributes.jl @@ -1844,6 +1844,16 @@ struct ConflictStatus <: AbstractModelAttribute end attribute_value_type(::ConflictStatus) = ConflictStatusCode +""" + ConflictCount() + +An [`AbstractModelAttribute`](@ref) for the number of conflicts found by the +solver in the most recent call to [`compute_conflict!`](@ref). +""" +struct ConflictCount <: AbstractModelAttribute end + +attribute_value_type(::ConflictCount) = Int + """ ListOfVariableAttributesSet() @@ -2677,8 +2687,24 @@ end A constraint attribute to query the [`ConflictParticipationStatusCode`](@ref) indicating whether the constraint participates in the conflict. + +## `conflict_index` + +The optimizer may return multiple conflicts. See [`ConflictCount`](@ref) +for querying the number of conflicts found. + +## Implementation + +Optimizers should implement the following methods: +```julia +MOI.get(::Optimizer, ::MOI.ConstraintConflictStatus, ::MOI.ConstraintIndex)::T +``` +They should not implement [`set`](@ref) or [`supports`](@ref). """ -struct ConstraintConflictStatus <: AbstractConstraintAttribute end +struct ConstraintConflictStatus <: AbstractConstraintAttribute + conflict_index::Int + ConstraintConflictStatus(conflict_index = 1) = new(conflict_index) +end function attribute_value_type(::ConstraintConflictStatus) return ConflictParticipationStatusCode