diff --git a/src/DOI/aliases.jl b/src/DOI/aliases.jl index 230669a..57f3be4 100644 --- a/src/DOI/aliases.jl +++ b/src/DOI/aliases.jl @@ -21,9 +21,13 @@ const ALG_CONS = OrderedDict{ Tuple{NDF,EQ64}, } +# const LINKAGES = OrderedDict{ +# MOI.ConstraintIndex{DOI.Linkage{DYN_VAR},EQ64}, +# Tuple{DOI.Linkage{DYN_VAR},EQ64} +# } const LINKAGES = OrderedDict{ - MOI.ConstraintIndex{DOI.Linkage{DYN_VAR},EQ64}, - Tuple{DOI.Linkage{DYN_VAR},EQ64} + MOI.ConstraintIndex, # Loosen key to generic ConstraintIndex + Tuple{DOI.Linkage,EQ64} # Loosen value to generic DOI.Linkage } const OBJ = DOI.Bolza{NBF,DOI.MultiPhaseIntegral{NDF}} diff --git a/src/DOI/ingredients.jl b/src/DOI/ingredients.jl index 9964974..a58c72f 100644 --- a/src/DOI/ingredients.jl +++ b/src/DOI/ingredients.jl @@ -151,10 +151,10 @@ end # Dynamic variable boundaries -MOI.supports_constraint(::Optimizer, ::DOI.Initial{DYN_VAR}, ::IV64) = true -MOI.supports_constraint(::Optimizer, ::DOI.Final{DYN_VAR}, ::IV64) = true +MOI.supports_constraint(::Optimizer, ::DOI.Initial{DYN_VAR}, ::EQ64) = true +MOI.supports_constraint(::Optimizer, ::DOI.Final{DYN_VAR}, ::EQ64) = true -function MOI.add_constraint(model::Optimizer, dyn_var_initial::DOI.Initial{DYN_VAR}, set::IV64) +function MOI.add_constraint(model::Optimizer, dyn_var_initial::DOI.Initial{DYN_VAR}, set::EQ64) dyn_var = dyn_var_initial.dyn_fun @@ -163,15 +163,15 @@ function MOI.add_constraint(model::Optimizer, dyn_var_initial::DOI.Initial{DYN_V phase = DOI.phase_index(dyn_var_initial.dyn_fun) if haskey(model.dyn_var_initials[phase], dyn_var) - throw(MOI.AddConstraintNotAllowed{typeof(dyn_var_initial),IV64}("Initial value already set.")) + throw(MOI.AddConstraintNotAllowed{typeof(dyn_var_initial),EQ64}("Initial value already set.")) end model.dyn_var_initials[phase][dyn_var] = set - return MOI.ConstraintIndex{DOI.Initial{DYN_VAR},IV64}(dyn_var.value) + return MOI.ConstraintIndex{DOI.Initial{DYN_VAR},EQ64}(dyn_var.value) end -function MOI.add_constraint(model::Optimizer, dyn_var_final::DOI.Final{DYN_VAR}, set::IV64) +function MOI.add_constraint(model::Optimizer, dyn_var_final::DOI.Final{DYN_VAR}, set::EQ64) dyn_var = dyn_var_final.dyn_fun @@ -180,12 +180,12 @@ function MOI.add_constraint(model::Optimizer, dyn_var_final::DOI.Final{DYN_VAR}, phase = DOI.phase_index(dyn_var_final.dyn_fun) if haskey(model.dyn_var_finals[phase], dyn_var) - throw(MOI.AddConstraintNotAllowed{typeof(dyn_var_final),IV64}("Final value already set.")) + throw(MOI.AddConstraintNotAllowed{typeof(dyn_var_final),EQ64}("Final value already set.")) end model.dyn_var_finals[phase][dyn_var] = set - return MOI.ConstraintIndex{DOI.Final{DYN_VAR},IV64}(dyn_var.value) + return MOI.ConstraintIndex{DOI.Final{DYN_VAR},EQ64}(dyn_var.value) end @@ -210,10 +210,11 @@ end # Linkages -MOI.supports_constraint(::Optimizer, ::Type{DOI.Linkage{DYN_VAR}}, ::EQ64) = true +MOI.supports_constraint(::Optimizer, ::DOI.Linkage{<:Union{PHS,DYN_VAR}}, ::EQ64) = true -function MOI.add_constraint(model::Optimizer, linkage::DOI.Linkage{DYN_VAR}, set::EQ64) +function MOI.add_constraint(model::Optimizer, linkage::DOI.Linkage{T}, set::EQ64) where T<:Union{PHS,DYN_VAR} + _throw_if_invalid_index(model, linkage.dyn_fun_final) _throw_if_invalid_index(model, linkage.dyn_fun_initial) diff --git a/src/intervals.jl b/src/intervals.jl index 9862f2d..2d05096 100644 --- a/src/intervals.jl +++ b/src/intervals.jl @@ -36,7 +36,7 @@ struct FixedIntervals <: AbstractIntervals function FixedIntervals( number::Integer; - points::Vector{<:Real}=collect(range(0.0, 1.0, number + 1)), + points::Vector{<:Real}=collect(range(0.0, 1.0, length = number + 1)), ) if !(number ≥ 1) throw(DomainError(number, "Please ensure number ≥ 1.")) @@ -128,7 +128,7 @@ struct FlexibleIntervals <: AbstractIntervals function FlexibleIntervals( number::Integer, flexibility::Real; - points::Vector{Float64}=collect(range(0.0, 1.0, number + 1)), + points::Vector{Float64}=collect(range(0.0, 1.0, length = number + 1)), ) if !(number ≥ 2) throw(DomainError(number, "Please ensure number ≥ 2."))