@@ -6,21 +6,43 @@ import MathOptInterface as MOI
66import JuMP
77import PolyJuMP
88
9+ abstract type AbstractAGECone <: MOI.AbstractVectorSet end
10+
11+ """
12+ struct SignomialSAGECone <: MOI.AbstractVectorSet
13+ α::Matrix{Int}
14+ end
15+
16+ **S**ums of **A**M/**G**M **E**xponential for signomials.
17+ """
18+ struct SignomialSAGECone <: AbstractAGECone
19+ α:: Matrix{Int}
20+ end
21+
922"""
10- struct SAGECone <: MOI.AbstractVectorSet
23+ struct PolynomialSAGECone <: MOI.AbstractVectorSet
1124 α::Matrix{Int}
1225 end
1326
14- **S**ums of **A**M/**G**M **E**xponential.
27+ **S**ums of **A**M/**G**M **E**xponential for polynomials .
1528"""
16- struct SAGECone <: MOI.AbstractVectorSet
29+ struct PolynomialSAGECone <: AbstractAGECone
1730 α:: Matrix{Int}
1831end
19- MOI. dimension (set:: SAGECone ) = size (set. α, 1 )
20- Base. copy (set:: SAGECone ) = set
2132
22- struct SAGESet <: PolyJuMP.PolynomialSet end
23- JuMP. reshape_set (:: SAGECone , :: PolyJuMP.PolynomialShape ) = SAGESet ()
33+ struct SignomialAGECone <: AbstractAGECone
34+ α:: Matrix{Int}
35+ k:: Int
36+ end
37+
38+ struct PolynomialAGECone <: AbstractAGECone
39+ α:: Matrix{Int}
40+ k:: Int
41+ end
42+
43+ MOI. dimension (set:: AbstractAGECone ) = size (set. α, 1 )
44+ Base. copy (set:: AbstractAGECone ) = set
45+
2446function _exponents_matrix (monos)
2547 α = Matrix {Int} (undef, length (monos), MP. nvariables (monos))
2648 for (i, mono) in enumerate (monos)
@@ -31,35 +53,51 @@ function _exponents_matrix(monos)
3153 end
3254 return α
3355end
34- JuMP. moi_set (:: SAGESet , monos) = SAGECone (_exponents_matrix (monos))
3556
36- struct AGECone <: MOI.AbstractVectorSet
37- α:: Matrix{Int}
38- k:: Int
57+ struct SignomialSAGESet <: PolyJuMP.PolynomialSet end
58+ JuMP. reshape_set (:: SignomialSAGECone , :: PolyJuMP.PolynomialShape ) = SignomialSAGESet ()
59+ JuMP. moi_set (:: SignomialSAGESet , monos) = SignomialSAGECone (_exponents_matrix (monos))
60+
61+ struct PolynomialSAGESet <: PolyJuMP.PolynomialSet end
62+ JuMP. reshape_set (:: PolynomialSAGECone , :: PolyJuMP.PolynomialShape ) = PolynomialSAGESet ()
63+ JuMP. moi_set (:: PolynomialSAGESet , monos) = PolynomialSAGECone (_exponents_matrix (monos))
64+
65+ struct SignomialAGESet{MT<: MP.AbstractMonomial } <: PolyJuMP.PolynomialSet
66+ monomial:: MT
67+ end
68+ function JuMP. reshape_set (set:: SignomialAGECone , shape:: PolyJuMP.PolynomialShape )
69+ return SignomialAGESet (shape. monomials[set. k])
70+ end
71+ function JuMP. moi_set (set:: SignomialAGESet , monos)
72+ k = findfirst (isequal (set. monomial), monos)
73+ return SignomialAGECone (_exponents_matrix (monos), k)
3974end
40- MOI. dimension (set:: AGECone ) = size (set. α, 1 )
41- Base. copy (set:: AGECone ) = set
4275
43- struct AGESet {MT<: MP.AbstractMonomial } <: PolyJuMP.PolynomialSet
76+ struct PolynomialAGESet {MT<: MP.AbstractMonomial } <: PolyJuMP.PolynomialSet
4477 monomial:: MT
4578end
46- function JuMP. reshape_set (set:: AGECone , shape:: PolyJuMP.PolynomialShape )
47- return AGESet (shape. monomials[set. k])
79+ function JuMP. reshape_set (set:: PolynomialAGECone , shape:: PolyJuMP.PolynomialShape )
80+ return PolynomialAGESet (shape. monomials[set. k])
4881end
49- function JuMP. moi_set (set:: AGESet , monos)
82+ function JuMP. moi_set (set:: PolynomialAGESet , monos)
5083 k = findfirst (isequal (set. monomial), monos)
51- return AGECone (_exponents_matrix (monos), k)
84+ return PolynomialAGECone (_exponents_matrix (monos), k)
5285end
5386
5487function setdefaults! (data:: PolyJuMP.Data )
55- PolyJuMP. setdefault! (data, PolyJuMP. NonNegPoly, SAGESet )
88+ PolyJuMP. setdefault! (data, PolyJuMP. NonNegPoly, PolynomialSAGESet )
5689 return
5790end
5891
5992function JuMP. build_constraint (
6093 _error:: Function ,
6194 p,
62- set:: Union{SAGESet,AGESet} ;
95+ set:: Union {
96+ SignomialSAGESet,
97+ PolynomialSAGESet,
98+ SignomialAGESet,
99+ PolynomialAGESet,
100+ };
63101 kws... ,
64102)
65103 coefs = PolyJuMP. non_constant_coefficients (p)
@@ -77,7 +115,7 @@ include("bridges/sage.jl")
77115
78116function PolyJuMP. bridges (
79117 F:: Type{<:MOI.AbstractVectorFunction} ,
80- :: Type{<:SAGECone } ,
118+ :: Type{<:SignomialSAGECone } ,
81119)
82120 return [(SAGEBridge, PolyJuMP. _coef_type (F))]
83121end
@@ -86,9 +124,19 @@ include("bridges/age.jl")
86124
87125function PolyJuMP. bridges (
88126 F:: Type{<:MOI.AbstractVectorFunction} ,
89- :: Type{<:AGECone } ,
127+ :: Type{<:SignomialAGECone } ,
90128)
91129 return [(AGEBridge, PolyJuMP. _coef_type (F))]
92130end
93131
132+ include (" bridges/signomial.jl" )
133+
134+ function PolyJuMP. bridges (
135+ F:: Type{<:MOI.AbstractVectorFunction} ,
136+ :: Type{<:Union{PolynomialSAGECone,PolynomialAGECone}} ,
137+ )
138+ return [(SignomialBridge, PolyJuMP. _coef_type (F))]
139+ end
140+
141+
94142end
0 commit comments